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
TerraformとCloudFormationどちらを採用すべき?
Search
Fukazawa Shun
May 19, 2021
Programming
19k
0
Share
TerraformとCloudFormationどちらを採用すべき?
AKIBA.AWS ONLINE #03 -IaC を語りたい 編-
での登壇資料
Fukazawa Shun
May 19, 2021
More Decks by Fukazawa Shun
See All by Fukazawa Shun
AIをプライベートや業務で使ってみよう!効果的な認定資格の活かし方
fukazawashun
0
200
試験は暗記より理解 〜効果的な試験勉強とその後への活かし方〜
fukazawashun
0
680
AWS認定資格取得に向けた効果的なデベキャン活用法や学習方法について
fukazawashun
1
390
DevelopersIO BASECAMP(デベキャン)の今までとこれからについて
fukazawashun
0
1M
DevelopersIO BASECAMPで扱うサービスのアップデート紹介
fukazawashun
0
970
書く技術
fukazawashun
0
2.3k
GitHub Actionsを使ってAWS App Runnerにデプロイできるようになりました
fukazawashun
0
1.7k
Other Decks in Programming
See All in Programming
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
250
Agent Skills を社内で育てる仕組み作り
jackchuka
1
1.8k
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
1.1k
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
130
20260514_its_the_context_window_stupid.pdf
heita
0
850
認証統合から始めるフロントエンドの機能単位開発 — マイクロサービス思想の適用
koukimiura
0
100
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
140
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
130
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
130
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
200
🦞OpenClaw works with AWS
licux
1
350
My daily life on Ruby
a_matsuda
3
200
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.9k
For a Future-Friendly Web
brad_frost
183
10k
Navigating Weather and Climate Data
rabernat
0
190
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
510
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
300
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Transcript
None
5FSSBGPSNͱ$MPVE'PSNBUJPO ͲͪΒΛ࠾༻͖͢ʁ ਂᖒ ढ़ʢ'VLB[BXB4IVOʣ "84ࣄۀຊ෦ίϯαϧςΟϯά෦
3 ⾃⼰紹介 ਂᖒ ढ़ʢFukazawa Shunʣ クラスメソッド株式会社 AWS事業本部コンサルティング部 @shun_quartet #AKIBAAWS
4 ϓϩϩʔά 5FSSBGPSN PS $MPVEGPSNBUJPO
5 جຊతͳબఆ݅ͱͯ͠ • ·ͣબఆʹ͓͚Δલఏͱͯ͠ʜ • ೲͱͯ͠ࢦఆ͕͋Δ͔ • ϝϯόʔͰϝϯςՄೳ͔ • ෳࡶͳͷɺ࠷ઌͳͷ͕ྑ͍ͷͰͳ͍
• ࠾༻ٕͨ͠ज़ͷಛੑΛνʔϜͰཧղ͠ӡ༻͍͚ͯ͠Δ͔
6 両者の違いって︖ 基本的な違い
7 $MPVEGPSNBUJPOʹ͍ͭͯ • "84͕ఏڙ • :BNM͔KTPOͰهड़ • "84্Ͱ࣮ߦ • *".ϩʔϧΛ༻ͨ͠ηΩϡΞͳೝূ
Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - "RegionMap" - Ref: "AWS::Region" - "AMI"
8 5FSSBGPSNʹ͍ͭͯ • )BTIJ$PSQ͕ఏڙ • )$-Ͱهड़ • ϩʔΧϧ1$ͷϚγϯ্Ͱ࣮ߦ • ΩʔͷཧΛݕ౼͢Δඞཁ͕͋Δ
• &$ͷ"84αʔϏε্Ͱͷ࣮ߦεΠονϩʔϧ ͰηΩϡΞͳೝূ͕Մೳ resource "aws_instance" "web" { ami = data.aws_ami.ubuntu.id instance_type = "t3.micro" tags = { Name = "HelloWorld" } }
9 ྆ऀͷҧ͍ͬͯʁ ྆ऀͷ۩ମతͳ ಛΛݟ͍͖ͯ·͠ΐ͏ʂ
10 両者の違いって︖ 異なるリージョンへのデプロイ
11 ҟͳΔϦʔδϣϯͷσϓϩΠ • 4UBDL4FUT IUUQTEPDTBXTBNB[PODPNKB@KQ"84$MPVE'PSNBUJPOMBUFTU6TFS(VJEFTUBDLTFUTDPODFQUTIUNM • ҟͳΔϦʔδϣϯʹϦιʔεΛ࡞ߋ৽আ͢Δػೳ • ҟͳΔΞΧϯτʹσϓϩΠՄೳ Region
Region Region Stack sets stack stack stack アカウントA アカウントB
12 ҟͳΔϦʔδϣϯͷσϓϩΠ • ҟͳΔ1SPWJEFSΛ༻͍Δ IUUQTXXXUFSSBGPSNJPEPDTQSPWJEFSTJOEFYIUNM Region Region Region Provider A
Provider B Provider C provider aws { region = "ap-northeast-1” } provider aws { region = "us-east-1" alias = "use1" } resource "aws_instance" "web" { 〜〜〜 } resource "aws_instance" "web_use1" { provider = aws.use1 〜〜〜 }
13 ҟͳΔϦʔδϣϯͷσϓϩΠ • "84Ͱͷ*B$Ͱ͋Ε$MPVEGPSNBUJPOͷํ͕ҟͳΔϦʔ δϣϯ ΞΧϯτʹσϓϩΠ͍͢͠ • ϚϧνϦʔδϣϯγεςϜͰͳͯ͘ηΩϡϦςΟͷ߹Ͱ"84$POGJH"NB[PO (VBSE%VUZΛશͯͷϦʔδϣϯʹల։͍ͨ͠ͱ͍ͬͨधཁʹରԠ͍͢͠ •
5FSSBGPSN1SPWJEFSΛΓସ͑Δ͜ͱ͕Ͱ͖ΔނͷϝϦοτɻ
14 異なるIaaSへのデプロイ 異なるIaaSへのデプロイ
15 ҟͳΔ*BB4ͷσϓϩΠ • $MPVEGPSNBUJPO"84ͷαʔϏεͷͨΊଞͷϓ ϥοτϑΥʔϜͷσϓϩΠରԠ͍ͯ͠ͳ͍ • 5FSSBGPSN1SPWJEFSΛΓସ͑Δ͜ͱͰҟͳΔ *BB4ʹσϓϩΠ͕ߦ͑Δ • "84
• ($1 • "[VSF ʜ
16 差分検出 差分検出
17 ࠩݕग़ • *B$Ͱཧ͍ͯ͠Δͷͷɺ͍ͭख࡞ۀͰڥΛमਖ਼ ͯ͠͠·͏͜ͱΑ͋͘Δ • ڥͱίʔυ͕ဃͯ͠͠·ͬͨࡍͷݕग़ͲͷΑ͏ʹߦ͏͔ʁ
18 ࠩݕग़ • $MPVEGPSNBUJPOͷ߹ɺυϦϑτݕग़ͱ͍͏ػೳ͕͋Δ IUUQTEPDTBXTBNB[PODPNKB@KQ"84$MPVE'PSNBUJPOMBUFTU6TFS(VJEFEFUFDUESJGUTUBDLIUNM • ڥͱίʔυͷဃΛࣗಈͰݕग़͢Δػೳ • $POGJHϧʔϧͱΈ߹ΘͤͨΓͯ͠௨Մೳ Stack
VPC NAT gateway Instance Instance ≒ AWS Config EventBridge
19 ࠩݕग़ • 5FSSBGPSNͷ߹ɺ1MBOίϚϯυΛ࣮ߦͯ͠4UBUFͱͷࠩ Λൺֱ͢Δ IUUQTXXXUFSSBGPSNJPEPDTDMJDPNNBOETQMBOIUNM • ΦϓγϣϯΛ͚Δ͜ͱͰίʔϧόοΫ͔Βࠩͷݕग़͕Մೳ VPC NAT
gateway Instance Instance ≒ $ terraform plan -detailed-exitcode
20 ࠩݕग़ • 5FSSBGPSNͷ߹ɺࣗಈԽ͍ͨ͠߹࡞ΓࠐΈ͕ඞཁʹͳΔ • $MPVEGPSNBUJPOͩͱࠩݕग़"84ͷϚωʔδυαʔϏε ʹدͤΔ͜ͱ͕Ͱ͖Δ
21 両者の違いって︖ ロジック
22 ϩδοΫ • ಉ͡ϦιʔεΛෳ࡞͍ͨ͠߹ɺΓมʹΑͬͯΞ ΫγϣϯΛม͍͑ͨέʔε͋Δ • ྫɿ มʹ֨ೲ͞Ε͍ͯΔ";͚ͩ4VCOFUΛ࡞͍ͨ͠ • ϩδοΫͷ࣮ͲͷΑ͏ʹߦ͏͔
23 ϩδοΫ • $MPVEGPSNBUJPOͷ߹ • $POEJUJPOTηΫγϣϯΛ༻͢Δ • ༻Մೳͳؔ • 'O"OE
• 'O&RVBMT • 'O*G • 'O/PU • 'O0S Description: "Template.” Parameters: EnvType: Type: String AllowedValues: - prod - test Conditions: CreateProdResources: !Equals - !Ref EnvType - prod Resources: 〜〜〜 Outputs: 〜〜〜
24 ϩδοΫ • 5FSSBGPSNͷ߹ • ߏମΛ༻͍ͨ܁Γฦ͠ॲཧ • ࡾ߲ԋࢉࢠ • ΈࠐΈؔ
• ͍ΘΏΔϓϩάϥϜݴޠʹ ͍ۙهड़ • ذॲཧͳ͍ dynamic "origin_group" { for_each = var.load_balancer_origin_groups content { name = origin_group.key dynamic "origin" { for_each = origin_group.value.origins content { hostname = origin.value.hostname } } } } variable "load_balancer_origin_groups" { type = map(object({ origins = set(object({ hostname = string })) })) }
25 排他制御 排他制御
26 ഉଞ੍ޚ • ಉ࣮࣌ߦ͞Εͨ࣌ʹ4UBDLPS4UBUF্͕ॻ͖͞Εͯ͠·͏͜ͱ ͳ͍ͷ͔ʁ • ෳਓͰӡ༻͍ͯ͠ΔࡍʹॏཁͳϙΠϯτɻɻ
27 ഉଞ੍ޚ • $MPVEGPSNBUJPOͷ߹ • ࣮ߦத$3&"5&@*/@130(3&44εςʔλεʹͳΔ • $3&"5&@*/@130(3&44ͷ࠷தมߋෆՄ
28 ഉଞ੍ޚ • 5FSSBGPSNͷ߹ • 4UBUFΛͲ͜ʹஔ͘ͷ͔ʹΑͬͯҟͳΔ • IUUQTXXXUFSSBGPSNJPEPDTMBOHVBHFTFUUJOHTCBDLFOETJOEF YIUNM •
%ZOBNP%#MPDLΛ༻͍Δ͜ͱ͕Ͱ͖Εഉଞ੍ޚՄೳ • IUUQTXXXUFSSBGPSNJPEPDTMBOHVBHFTUBUFMPDLJOHIUNM
29 両者の違いって︖ バージョン管理
30 όʔδϣϯཧ • όʔδϣϯΛ͏·͘ཧ͢Δඞཁ͕͋Δ • ϝϯόʔͷ࣮ߦڥࠩҧ • ࠷৽ͷैͱݱߦҡ࣋
31 όʔδϣϯཧ • $MPVEGPSNBUJPOͷ߹ • "84ͷαʔϏεͳͷͰ͍ΘΏΔόʔδϣϯͷ֓೦͕ͳ͍ • ςϯϓϨʔτόʔδϣϯଘࡏ͢Δͷͷɺݱ࣌Ͱ͔͠ ͳ͍ͷͰόʔδϣϯཧͷඞཁ͕ͳ͍ •
IUUQTEPDTBXTBNB[PODPNKB@KQ"84$MPVE'PSNBUJPOMBUFTU6 TFS(VJEFGPSNBUWFSTJPOTUSVDUVSFIUNM
32 όʔδϣϯཧ • 5FSSBGPSNͷ߹ • 5FSSBGPSNͦͷͷͱ1SPWJEFSͷόʔδϣϯΛཧ͢Δ • 5FSSBGPSNͷόʔδϣϯUGFOWͰཧ • IUUQTHJUIVCDPNUGVUJMTUGFOW
• 1SPWJEFSSFRVJSFE@QSPWJEFSTͰࢦఆ • ࠷ۙUFSSBGPSNMPDLIDMͱ͍͏QSPWJEFSͷMPDLϑΝΠϧొ • IUUQTXXXUFSSBGPSNJPEPDTMBOHVBHFQSPWJEFSTSFRVJSFNFOUTIUNM • ͍ΘΏΔϓϩάϥϛϯάݴޠͷόʔδϣϯཧʹ͍ۙ
33 開発ツール 開発ツール
34 ։ൃπʔϧ • γϯλοΫεΤϥʔ։ൃஈ֊Ͱݕ͍ͨ͠ • σϓϩΠ͔ͯ͠ΒΤϥʔͩͱ໘ • *%&ʹΈࠐΊΔ։ൃิॿπʔϧ͋Δͷ͔ʁʁ
35 ։ൃπʔϧ • $MPVEGPSNBUJPO • $GOMJOU • IUUQTBXTBNB[PODPNKQCMPHTOFXTHJUQSFDPNNJUWBMJEBUJPOPGBXT DMPVEGPSNBUJPOUFNQMBUFTXJUIDGOMJOU •
ҎԼͷΑ͏ͳνΣοΫΛࣗಈͰͯ͘͠ΕΔ • ਖ਼͍͠ܗࣜʢ:BNM PS+TPOʣͰॻ͚͍ͯΔ͔ • όάͳ͍͔ʢଘࡏ͠ͳ͍มࢀরɺฦΓͷظʣ • ଞͷ࣮ํ๏ͷఏҊʢϋʔυίʔυͷճආʣ • *%&ʢ74$PEFʣͷϓϥάΠϯ͋Δ • IUUQTHJUIVCDPNBXTTDSJQUJOHHVZDGPSN74$PEF
36 ։ൃπʔϧ • 5FSSBGPSN • ίϚϯυΦϓγϣϯʹࣗಈิਖ਼ػೳ͕͋Δ • IUUQTXXXUFSSBGPSNJPEPDTDMJDPNNBOETGNUIUNM • อଘ࣌ʹ͜ͷίϚϯυΛ࣮ߦ͢ΕࣗಈͰߏจमਖ਼
• -JOUFSπʔϧଘࡏ • IUUQTHJUIVCDPNUFSSBGPSNMJOUFSTUGMJOU • ίʔυ͕ηΩϡϦςΟతʹͳ͍͔ΛνΣοΫ͢Δπʔϧ • ྫɿηΩϡϦςΟάϧʔϓ͕શ։Ͱઃఆ͞Ε͍ͯΔ • IUUQTHJUIVCDPNUGTFDUGTFD • *%&ͷϓϥάΠϯ͋Δ • 74$PEF 1Z$IBSN $ terraform fmt
37 まとめ まとめ
38 ·ͱΊ • $MPVEGPSNBUJPO • ෳࡶͳॲཧͷهड़͍͠ • ͋·Γෳࡶʹͯ͠͠·͏ͱݟʹ͘͘ͳΔ͜ͱ • "84ͱͷੑ͕ߴ͘ɺؔ࿈αʔϏεଟ͍
• ҟͳΔϦʔδϣϯͷσϓϩΠɺڥͱͷဃݕग़ • 5FSSBGPSN • ಉ͡ߏจͰҧ͏*BB4ʹσϓϩΠͰ͖Δ • 1SPWJEFS͕Γସ͑ΒΕΔނͷϝϦοτ • ߏจόʔδϣϯཧ͕ϓϩάϥϛϯάݴޠʹ͍ۙ • ϓϩάϥϜܦݧͷ͋ΔํೃછΈ͍͔͢
39 ऴΘΓ օ͞Μͷૉఢͳ *B$ϥΠϑΛԠԉͯ͠·͢ʂ
None