Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CloudFormationアンチパターンのお話
Search
Yuki_Kurono
August 24, 2022
Programming
390
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
45
今年のre:inventから学ぶこと
yuki_kurono
0
110
re_invent 2023事前勉強会
yuki_kurono
0
100
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
350
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
900
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
720
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
450
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
650
Other Decks in Programming
See All in Programming
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
620
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
53
34k
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
340
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
260
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
120
T3DD26: From RAGs to Riches
martinhelmich
0
130
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
150
ソフトウェアラスタライザ
fadis
1
780
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
160
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
120
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
180
Fireside Chat
paigeccino
42
4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Technical Leadership for Architectural Decision Making
baasie
3
550
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
510
Practical Orchestrator
shlominoach
191
12k
How to make the Groovebox
asonas
2
2.4k
Building an army of robots
kneath
306
46k
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
ご清聴ありがとうございま した.