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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yuki_Kurono
August 24, 2022
Programming
400
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
55
今年のre:inventから学ぶこと
yuki_kurono
0
120
re_invent 2023事前勉強会
yuki_kurono
0
110
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
380
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
910
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
740
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
460
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
670
Other Decks in Programming
See All in Programming
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
golang-bob.pdf
iwatsukayura
0
130
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.6k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
200
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
300
気持ちぃ〜角丸 Squircle
ryu1013
0
290
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
4.8k
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
150
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
ジョジョの世界をXRで再現する
mofurune
0
160
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Making Projects Easy
brettharned
120
6.8k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Practical Orchestrator
shlominoach
192
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
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
ご清聴ありがとうございま した.