Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CloudFormationアンチパターンのお話
Search
Yuki_Kurono
August 24, 2022
Programming
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CloudFormationアンチパターンのお話
Yuki_Kurono
August 24, 2022
More Decks by Yuki_Kurono
See All by Yuki_Kurono
Terraform(IaC)と実環境の乖離どうしていますか?
yuki_kurono
0
62
今年のre:inventから学ぶこと
yuki_kurono
0
120
re_invent 2023事前勉強会
yuki_kurono
0
110
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
390
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
930
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
750
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
470
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
680
Other Decks in Programming
See All in Programming
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
140
AI Augmentation Techniques with Liberty
ivargrimstad
1
340
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
400
ChromeでローカルLLM
ryu1013
0
190
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
140
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
220
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.5k
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.6k
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
120
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
370
Facilitating Awesome Meetings
lara
57
7.2k
Product Roadmaps are Hard
iamctodd
55
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Producing Creativity
orderedlist
PRO
348
41k
Odyssey Design
rkendrick25
PRO
2
920
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
Claude Code のすすめ
schroneko
67
230k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Transcript
CloudFormationアンチパターンのお話 JAWS-UG 名古屋 LT未経験者にも登壇して貰いたいLT会 2022.08.24 Wed yuki kurono
自己紹介 名前 黒野 雄稀 AWS歴 ・約3年 ・2022 APN ALL
AWS Certifications Engineer 所属 アイレット株式会社 普段の業務 ・基幹系インフラ構築 ・システム運用構築
CloudFormationについて AWSで提供されるInfrastructure as Code(IaC)サービス IaC = コードとしてインフラを構築 テンプレートと呼ばれるファイルにコードを記述していく。 • 記述方法
◦ Json ◦ YAML AWSTemplateFormatVersion: '2010-09-09' Resources: FirstVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16
CloudFormationアンチパターン
CFnと手動変更の並行管理 CFnで作成したリソースを手動で変更することもできます。 しかし、手動変更部分の管理が発生しコード管理が煩雑になるのでやめよう (どうしても手動変更したいなら、もうCFnは捨てる。) ドリフト発生
ExportとImportValue "Resources" : { "WebServerInstance": { "Type": "AWS::EC2::Instance", "Properties": {
"InstanceType" : "t2.micro", "NetworkInterfaces" : [{ "SubnetId" : { "Fn::ImportValue" : "WebSubnet" }, "GroupSet" : [ { "Fn::ImportValue" : "WebSG" } } ], Outputs: WebSubnet01: Description: Web Public Subnet Value: !Ref WebSubnet Export: Name: "WebSubnet" WebSG01: Description: Web Security Group Value: !Ref WebSG Export: Name: "WebSG" WebApp.yaml Network.yaml Export、ImportValueを使用することで、スタック(テンプレートファイル)間で値の受け渡しが 可能。 任意の名前を使用してExportできます。
ExportとImportValue Outputs: WebSubnet: Description: Web Public Subnet Value: !Ref WebSubnet
Export: Name: !Sub "${AWS::StackName}-WebSubnet" WebSG: Description: Web Security Group Value: !Ref WebSG Export: Name: !Sub "${AWS::StackName}-WebSG" PrivateSubnet: Description: Private Subnet Value: !Ref PrivateSubnet Export: Name: !Sub "${AWS::StackName}-PrivateSubnet" PrivateSG: Description: Private Security Group Value: !Ref WebPrivateSG Export: Name: !Sub "${AWS::StackName}-PrivateSG" DatabaseSubnet: Description: Database Subnet Value: !Ref DatabaseSubnet Export: Name: !Sub "${AWS::StackName}-DatabaseSubnet" DatabaseSG: Description: Database Security Group Value: !Ref DatabaseSG Export: Name: !Sub "${AWS::StackName}-DatabaseSG" Web02Subnet: Description: Web Public Subnet02 Value: !Ref Web02Subnet Export: Name: !Sub "${AWS::StackName}-Web02Subnet" Web02SG: Description: Web02 Security Group Value: !Ref WebSG Export: Name: !Sub "${AWS::StackName}-Web02SG" Private02Subnet: Description: Private02 Subnet Value: !Ref Private02Subnet Export: Name: !Sub "${AWS::StackName}-Private02Subnet" Private02SG: Description: Private02 Security Group Value: !Ref Private02SG Export: Name: !Sub "${AWS::StackName}-Private02SG" Database02Subnet: Description: Database02 Subnet Value: !Ref Database02Subnet Export: Name: !Sub "${AWS::StackName}-Database02Subnet" Database02SG: Description: Database02 Security Group Value: !Ref Database02SG Export: Name: !Sub "${AWS::StackName}-Database02SG" Web03Subnet: Description: Web Public Subnet03 Value: !Ref Web03Subnet Export: Name: !Sub "${AWS::StackName}-Web03Subnet" Web03SG: Description: Web03 Security Group Value: !Ref WebSG Export: Name: !Sub "${AWS::StackName}-Web03SG" Private03Subnet: Description: Private03 Subnet Value: !Ref Private03Subnet Export: Name: !Sub "${AWS::StackName}-Private03Subnet" Private03SG: Description: Private03 Security Group Value: !Ref Private03SG Export: Name: !Sub "${AWS::StackName}-Private03SG" Database03Subnet: Description: Database03 Subnet Value: !Ref Database03Subnet Export: Name: !Sub "${AWS::StackName}-Database03Subnet" Database03SG: Description: Database03 Security Group Value: !Ref Database03SG Export: Name: !Sub "${AWS::StackName}-Database03SG" Network.yaml Export名どれ。。。? AWSリソース数が膨大な場合には、Export名を管理するのがほ ぼ不可能になる。。・
AccountIDとRegionのハードコート !Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}' !Sub 'arn:aws:ec2:ap-northeast-1:12345678910:vpc/${vpc}' 稀にMappingsやParametersでアカウントID、リージョンを入力しているテンプレートがあるが 環境が変わった時に動かないなど中々大変。。 疑似パラメーターを使用することで、柔軟性が得られるので積極的に使っていこう。
まとめ • まずはCFn始めてみよう。 ◦ その他のIaCに比べ、学習コストは低いと思います! ◦ 実際に使ってみて分かることの方が多いと思う。 • Count
Macroというマクロ機能を使うとFor文を実現できるみたいなのでまた遊んでみよ うと思います。 • 機能追加されて、使いやすくなることを期待してます!!
参考 - Qiita - https://qiita.com/kurono/items/b3362e16a3a396b9b2a7 - 公式ドキュメント - https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html
ご清聴ありがとうございま した.