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
[LT]生成AIを使ったAWS CloudFormationの書き方
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoshi Kaneyasu
November 11, 2023
Programming
660
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[LT]生成AIを使ったAWS CloudFormationの書き方
Satoshi Kaneyasu
November 11, 2023
More Decks by Satoshi Kaneyasu
See All by Satoshi Kaneyasu
Amazon Managed Grafana で Amazon DynamoDB のデータを可視化する Infinity Plugin + プライベート API 構成
satoshi256kbyte
1
16
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
770
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
160
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
190
AWS CDK ExpressモードとCI/CDの組み合わせ
satoshi256kbyte
1
62
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
240
Amazon_Cognito_で構築する_スケーラブルな_Web_アプリケーション__シングルページ_Web_アプリケーションに認証を組み込む
satoshi256kbyte
0
55
人間とAI、どちらが書いたコードもCI/CDでチェックしてみよう
satoshi256kbyte
0
59
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
310
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
150
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
520
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
110
typoなんかねぇよ
raspython3
0
680
Press start. Python's next generation.
willingc
PRO
3
330
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
7
3.5k
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
190
Family mrubyの進捗
kishima
1
110
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
Featured
See All Featured
Believing is Seeing
oripsolob
1
210
sira's awesome portfolio website redesign presentation
elsirapls
0
410
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
Rails Girls Zürich Keynote
gr2m
96
14k
Exploring anti-patterns in Rails
aemeredith
3
500
Unsuck your backbone
ammeep
672
58k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
BBQ
matthewcrist
89
10k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Transcript
[LT]⽣成AIを使ったAWS CloudFormationの書き⽅ Satoshi Kaneyasu 2023.11.11
2 ⾃⼰紹介 ⽒名︓兼安 聡 所属︓株式会社サーバーワークス 最近興味あるもの︓DevOps、CI/CDパイプライン 趣味︓サックス、筋トレ、CS ゲーム 資格︓ X(Twitter)︓@satoshi256kbyte
好きな⾔葉︓できらぁ︕ など
3 このLTについて • ⽣成AIの話に結びつけてInfrastructure as Codeを推すLTです。 • 本LTにおける⽣成AIは、下記ををイメージしています。 • ChatGPT
• GitHubCopilot • AWS CodeWhisper
4 Infrastructure as Codeのメリット ⾼い再現性によるトライ&エラーのしやすさ 1 差分の可視化によるトレーサビリティの向上 2 ツール連携による⾃動化への道 3
ちなみに、コードのインフラ化をしても設計書は作っています。
5 AWS CloudFormationとは • AWS CloudFormationは、AWSのリソースをコードで書いて、 ⾃動的に展開するためのサービスです。(略称CFn) • 真⾯⽬に書くのはかなり⼤変。 •
Teraform、AWS CDKの話は今回はスキップします。
6 ⽣成AIを⽤いてCFnを書く流れ STEP1 ChatGPTで質問し、全体像を書いてもらう 1 STEP3 GitHub Copilotの⼊⼒補完を使って埋めていく 3 STEP2
書いてもらった全体像から、キーワードを拾って公式を⾒る 2 ⼤体こんな 感じです
7 [STEP1]ChatGPTに質問を投げる • [第⼀段階] • [第⼆段階] ALB+EC2+RDSで、Wordpressを実⾏する環境のCloudFormationを書いてください。 EC2はS3にアクセスすることもあります。 各リソースの繋がりの部分を教えてください。
8 [STEP1]回答してくれた全体像で構造とキーワードを掴む AWSTemplateFormatVersion: '2010-09-09' Parameters: テンプレートに渡す引数の定義 Resources: EC2Instance: Type: AWS::EC2::Instance
Properties: SecurityGroupIds: - Ref: EC2SecurityGroup IAMInstanceProfile: !Ref EC2RoleInstanceProfile ・・・ EC2Role: Type: AWS::IAM::Role Properties: ・・・ EC2RoleInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref EC2Role 以下略 ここで押さえたキーワードは、 後で公式を⾒に⾏くのに役⽴ちます
9 [STEP2] キーワードを拾ってAWS公式サイトを⾒る • ChatGPTが作ったCFnは通る時も通らない時もある。 • 通らない時、⽣成AIに改善を促しても改善しないことがある。 • こうなったら、こだわらずにAWS公式サイトを⾒に⾏くのが吉。 Resources:
EC2Instance: Type: AWS::EC2::Instance Properties: SecurityGroupIds: - Ref: EC2SecurityGroup IAMInstanceProfile: !Ref EC2RoleInstanceProfile ・・・ EC2Role: Type: AWS::IAM::Role Properties: ・・・ EC2RoleInstanceProfile: Type: AWS::IAM::InstanceProfile このあたりのキーワードで検索し、 AWS公式サイトなどを⾒に⾏く
10 [STEP2]リソースのプロパティは精度が低め EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap ・・・ KeyName:
!Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeSize: 50 - DeviceName: /dev/sdm Ebs: VolumeSize: 100 MyDB: Type: AWS::RDS::DBInstance Properties: DBSecurityGroups: - Ref: MyDbSecurityByEC2SecurityGroup - Ref: MyDbSecurityByCIDRIPGroup AllocatedStorage: '5' DBInstanceClass: db.t2.small Engine: MySQL MasterUsername: MyName ManageMasterUserPassword: true MasterUserSecret: KmsKeyId: !Ref KMSKey DeletionPolicy: Snapshot CFnはリソースごとにプロパティの書き⽅がまちまち 似て⾮なる記述が多いので、質問の精度が低いと答え を出しきれないのだろう
11 [STEP3] GitHub Copilotの⼊⼒補完を使って埋めていく • AWS公式サイトを⾒に⾏くのは正確な属性名・構⽂を確認するため • 属性名が正しいと、Copilotの⼊⼒補完がよく効く (正確な属性名を⼊れる=質問の精度が上がってる︖) MyDB:
Type: AWS::RDS::DBInstance Properties: DBSecurityGroups: - Ref: MyDbSecurityByEC2SecurityGroup - Ref: MyDbSecurityByCIDRIPGroup MyDbSecurityByEC2SecurityGroup: Type・・・
12 [PLUS]テンプレート同⼠の連携も⽣成AI • 実際のCFnはレイヤーごとに分割する • CFn同⼠の連携設定の記述もCopilotの⼊⼒補完がとても効く (今となってはないと⾟い) ネットワーク Resources: VPC:
Type: AWS::EC2::VPC PublicSubnet1: Type: AWS::EC2::Subnet Outputs: VPC: (略) PublicSubnet1: Value: !Ref PublicSubnet1 Export: Name: !Sub ${Project}-public-subnet-1 アプリケーション WEBServer: Type: AWS::EC2::Instance Properties: InstanceType: !Ref Ec2InstanceType SubnetId: !ImportValue 'Fn::Sub': '${Project}-public-subnet-1ʼ (略) vpc.yml ec2.yml
13 まとめ 1. チャット形式でやりたことを質問 2. 詰まったらキーワードを拾って公式サイトへ︕ 3. 公式サイトで属性名を押さえて、コード補完に期待に切り替える • コードで環境が作れると、感動を覚えますよ︕
• こわくないよ︕ Infrastructure as Code︕
None