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
PackerとAnsibleでコンパクトに始めるInfrastructure as Code
Search
co-sche
February 10, 2017
Technology
0
260
PackerとAnsibleでコンパクトに始めるInfrastructure as Code
AMIの手運用に潜む罠と、Packer・Ansibleのレイヤー感のお話
co-sche
February 10, 2017
Tweet
Share
More Decks by co-sche
See All by co-sche
DynamoDBとBloomFilterのムフフなカンケイ
co_sche
0
1.5k
Other Decks in Technology
See All in Technology
触れるけど壊れないWordPressの作り方
masakawai
0
690
LLM APIを2年間本番運用して苦労した話
ivry_presentationmaterials
11
9.2k
AIエージェントは「使う」だけじゃなくて「作る」時代! 〜最新フレームワークで楽しく開発入門しよう〜
minorun365
PRO
8
1.3k
次世代のメールプロトコルの斜め読み
hirachan
3
390
NOT A HOTEL SOFTWARE DECK (2025/11/06)
notahotel
0
3.3k
メタプログラミングRuby読書会の活用
willnet
1
130
AI時代におけるドメイン駆動設計 入門 / Introduction to Domain-Driven Design in the AI Era
fendo181
0
310
今から間に合う re:Invent 準備グッズと現地の地図、その他ラスベガスを周る際の Tips/reinvent-preparation-guide
emiki
1
310
InsightX 会社説明資料/ Company deck
insightx
0
210
日本のソブリンAIを支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
130
新米エンジニアをTech Leadに任命する ー 成長を支える挑戦的な人と組織のマネジメント
naopr
1
360
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
280
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Navigating Team Friction
lara
190
15k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Code Review Best Practice
trishagee
72
19k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
PackerͱAnsibleͰ ίϯύΫτʹ࢝ΊΔ Infrastructure as Code
ࣗݾհ • ฏদ ߛయ (ͻΒ·ͭ ͜͏͚͢) • ϓϩάϥϚʔ / ΞʔΩςΫτ
/ ΫϥυΠϯϑϥ • 33ɺ185ɺ74ɺ140ɺ100 • ͓͔͞ͳͨΒΕͳ͍
AWS͔ͭͬͯ·͔͢ʁ ࠓճɺAWSʹԙ͍ͯͷϚγʔϯΠϝʔδͰ ͋ΔɺAMIͷཧʹϑΥʔΧε͓ͨ͠Ͱ ͢ɻ
͘͡ 1. ΠϛϡʔλϒϧΠϯϑϥετϥΫνϟ 2. AMIӡ༻͋Δ͋Δ 3. Ansible 4. Packer 5.
Packer + Ansible
Πϛϡʔλϒϧ ΠϯϑϥετϥΫνϟ
ΠϛϡʔλϒϧΠϯϑϥετ ϥΫνϟ • ෆมͳΠϯϑϥ • ࡞ͬͨΒߏɾઃఆͳͲͷมߋΛՃ͑ͳ͍ • มߋ͕ඞཁͳ߹ • ৽͍͠ͷΛ࡞ͬͯ
• ೖΕସ͑ͯ • ݹ͍ͷΛࣺͯΔ • ͍ࣺͯ
ΞϓϦέʔγϣϯαʔό Πϛϡʔλϒϧ • αʔόΠϯελϯεΛ͍ࣺͯΔ • ΫϥυΠϯϑϥͰͷΦʔτεέʔϦϯά ͳͲʹݟΒΕΔ͍ࣺͯͬΓɺAMIͳͲ ͷϚγϯΠϝʔδ͕͋Δ͔Βͦ͜ͳͤΔۀ
AMIͷӡ༻
AMIͷӡ༻ Πϯϑϥ୲ʮLDAPͱ͔ೖΕͨɺϕʔεͷAMI࡞ͬͨͰʔʯ ৴αʔό୲ʮScalaೖΕͳͳʯ ͚ࣾཧ໘୲ʮஸ৴αʔόͷ͕ScalaೖͬͯΔͬͨ͠Ζʯ Τϥʔϩάαʔό୲ʮΞϓϦNodeJS͚Ͳɺࢹͱ͔ͷઃఆΖΖ ೖͬͯΔ͠ɺ৴αʔόͷͭͬͨΖʯ ཧళ͚ཧ໘୲ʮNodeJSαʔόΛϕʔεAMI͔ΒͪΌΜͱͭ͘Ζʯ ϝσΟΞ͚ཧ໘୲ʮNodeJS͠ɺཧళཧ໘ͷίϐʔ͢Δ͔ʯ
AMIͷӡ༻ • ࣮ࡍҰͷίϐʔˍՃηοτΞοϓͰࡁ·ͳͯ͘ɺ 1ίϯϙʔωϯτʹ͖ͭෳճͷAMI࡞͕ߦΘΕΔ • ֤୲͕ࢥ͍ࢥ͍ͷࣗݾॴ༗AMIΛબͼɺࢥ͍ࢥ͍ͷ ՃηοτΞοϓΛߦ͍ɺ৽ͨͳࣗݾॴ༗AMIΛੜͯ͠ ͍Δ
AMIͷӡ༻ • ͜ͷӡ༻Λ1΄Ͳଓ͚͖ͯͨ • ౿ΜͰ͠·ͬͨɺए͍ۙ͘͠কདྷ౿ΉͰ ͋Ζ͏ཕݪͱͳΔ͕େ͖͚ͯ͘2 छྨ
AMIͷ
AMIͷ AMI͕ࢬ͔ΕͱΛ܁Γฦ͠ɺηΩϡϦ ςΟΞοϓσʔτͳͲͷڞ௨Ͱඞཁͳϝϯς φϯεͷࡍʹͷAMIΛ୳͠ճΒͳ͚Ε ͳΒͳ͘ͳΔ
AMIͷ ྫ͑… Πϯϑϥ୲ʮࢹΛStackDriverʹ͠Αʯ ʮJavaೖͬͯΔͭʹJMXͷΤʔδΣϯτೖΕͳͳʯ ʮҰݸҰݸݟͯճΔΜ͔…ʯ ʮ֤ίϯϙʔωϯτͷ࠷৽ͷAMIͲΕ…ʯ ʮͳΜ͜ΕɺJavaೖͬͯΔ͚Ͳϓϩηε্͕ͬͯͳ͍Μ͚(ࠔ)ʯ ʮ͏͑͑Θɻ֤୲͔ͬ͠ΓೖΕͱ͍ͯʔʯ
AMIͷ • ཧෆೳ • ͕ɺՃͷηοτΞοϓͳΒ·ͩྗٕͰͳ Μͱ͔ͳΔ
ൿͷλϨ
ൿͷλϨ ܧ͗͠ܧ͗͠ͰηοτΞοϓΛߦ͓ͬͯ Γɺ࡞ۀΛͨ͠ຊਓ͔ͦ͠ͷతɾ༰ɾ֬ ೝࣄ߲ΛΒͳ͍
ൿͷλϨ ྫ͑… AWS ʮ͋Μͨͱ͜ͷͬͱΔAmazon Linux ͷόʔδϣϯɺαϙʔτΕΔ͔ΒೖΕସ͑ʔ ɻʯ
ൿͷλϨ બࢶ • ৽͍͠όʔδϣϯͷAmazon LinuxͷϕʔεAMIʹηοτ Ξοϓ͢͠ • ԿೖΕΕࠓ·Ͱ௨Γಈ͘Μ͚ͬ • ࠓͷAMIͷAmazon
LinuxͷόʔδϣϯΛ্͛Δ • Կͷಈ࡞Λ֬ೝ͢Ε͑͑Μ͚ͬ
ൿͷλϨ ֤୲ʮʮʮ ʘ(^o^)ʗ ʯʯʯ
ল (ݴ͍༁) • զʑͷϓϩδΣΫτͰɺAWSͷར༻ͦͷͷ ͕ٕज़తઓͩͬͨ • AMIͱͬͱ͚ɺಉ͡Πϯελϯε͍͘ΒͰ࡞ ΕΔ͡ΌΜʂͰຫ৺ͯ͠ɺAMIͦͷͷͷཧΛ ૄ͔ʹͯͨ͠
AMIΠϛϡʔλϒϧʹ • ͱ͍ͬͯɺAMIͦͦΠϛϡʔλϒϧͩ • ӡ༻͕Πϛϡʔλϒϧ͡Όͳ͍ (͍ࣺͯͰ͖ͳ͍) • AMI͍ࣺͯͰ͖ΔΑ͏ʹ • AMIͷηοτΞοϓɺίʔυͱͯ͠දݱͯ͠όʔ
δϣϯཧ
Ansible
AMIηοτΞοϓͷྲྀΕΛ͓ ͞Β͍ 1. ݩʹͳΔAMI͔ΒΠϯελϯεΛىಈ 2. ىಈͨ͠ΠϯελϯεʹsshͰೖͬͯɺͳΜ͔ΜΠϯ ετʔϧɾϑΝΠϧͷஔɾઃఆ 3. ΠϯελϯεͷεφοϓγϣοτΛࡱΔ 4.
εφοϓγϣοτΛAMIͱͯ͠ొ 5. ΠϯελϯεΛআ
AMIηοτΞοϓͷྲྀΕΛ͓ ͞Β͍ 1. ݩʹͳΔAMI͔ΒΠϯελϯεΛىಈ 2. ىಈͨ͠ΠϯελϯεʹsshͰೖͬͯɺͳΜ͔ΜΠϯ ετʔϧɾϑΝΠϧͷஔɾઃఆ 3. ΠϯελϯεͷεφοϓγϣοτΛࡱΔ 4.
εφοϓγϣοτΛAMIͱͯ͠ొ 5. ΠϯελϯεΛআ
αʔόߏཧ • 2ͰͬͯΔ͜ͱࢥ͍͖ͬΓαʔόͷߏཧ ͳͷͰɺͦΕʹదͨ͠ιϦϡʔγϣϯΛ͏ • લͷϓϩδΣΫτ(ΦϯϓϨཧαʔό)ͰChef Λ͚ͬͯͨͲɺྲྀߦΓʹྲྀ͞Ε͍͢ࢲ AnsibleΛબ
None
Ansible • ༷ʑͳOSʹରԠͨ͠ɺߏཧιϦϡʔγϣϯ • ղઆෆཁ • σΟϨΫτϦϨΠΞτͳͲɺެࣜϕετϓϥΫςΟεʹ ै͏ • શͯͷηοτΞοϓࣗݾॴ༗Ͱͳ͘Amazonॴ༗ͷૉͷ
Amazon Linuxʹߦ͏ͷͰɺႈੑ͋·Γҙࣝ͠ͳ͍Ͱ͍͍
ιʔεެ։
Packer
AMIηοτΞοϓͷྲྀΕΛ͓ ͞Β͍ 1. ݩʹͳΔAMI͔ΒΠϯελϯεΛىಈ 2. ىಈͨ͠ΠϯελϯεʹsshͰೖͬͯɺͳΜ͔ΜΠϯ ετʔϧɾϑΝΠϧͷஔɾઃఆ 3. ΠϯελϯεͷεφοϓγϣοτΛࡱΔ 4.
εφοϓγϣοτΛAMIͱͯ͠ొ 5. ΠϯελϯεΛআ
AMIηοτΞοϓͷྲྀΕΛ͓ ͞Β͍ 1. ݩʹͳΔAMI͔ΒΠϯελϯεΛىಈ 2. ىಈͨ͠ΠϯελϯεʹsshͰೖͬͯɺͳΜ͔ΜΠϯ ετʔϧɾϑΝΠϧͷஔɾઃఆ 3. ΠϯελϯεͷεφοϓγϣοτΛࡱΔ 4.
εφοϓγϣοτΛAMIͱͯ͠ొ 5. ΠϯελϯεΛআ
AMIͷऔΓճ͠ AWSͷϚωίϯ͔ΒϙνϙνΔͷγϯυ ͍
Packer • ༷ʑͳԾԽϓϥοτϑΥʔϜʹରԠͨ͠ɺ ϚγϯΠϝʔδੜιϦϡʔγϣϯ • ϚγϯΠϝʔδʹͳΜ͔ͯ͠৽͍͠ϚγϯΠ ϝʔδΛੜ͢Δ͜ͱʹಛԽ • 1,3,4,5Λ·ͱΊͯ໘Έͯ͘ΕΔ
Packer • 2ʹؔͯ͠PackerͰ·͔ͳ͑Δ͕ɺ୯ମ ͰshεΫϦϓτͷ࣮ߦͷΈՄೳ • Provisionerͱͯ͠AnsibleΛબͰ͖Δɻ • ઃఆ؆୯
ιʔεެ։
Packer + Ansible
Packer + Ansible • Ұɺҙ͖͢ϙΠϯτ • ௨ৗɺpacker build packer.json Ͱ͓̺
• ෆ༻ҙͳΞοϓσʔτΛ͙ʹɺyumͷϦϙ δτϦόʔδϣϯΛݻఆ͠ͳ͚ΕͳΒͳ͍
Packer + Ansible • yumϦϙδτϦͷόʔδϣϯΛݻఆ͢Δʹɺ Ұඞཁ • AMIͷ໊લ͔ΒόʔδϣϯΛऔΓग़ͯ͠มͱ ͯ͠Ҿ͖ճ͠ɺ/etc/cloud/cloud.cfgʹຒΊࠐΉ
ιʔεެ։
AMI࡞ʹඞཁͳखॱ 4063$&@".*BNJYYYYYYYYa 1-":#00,BBBBBBBa CVJMETI Ҏ্
݁Ռ • AMI࡞ͷશͯͷηοτΞοϓ༰Λίʔυʹམ ͱ͢͜ͱͰɺൿͷλϨԽΛࢭΊΒΕͨ • ↑ͷηοτΞοϓ༰ΛৗʹૉͷAmazon Linux AMIʹྲྀ͢Α͏ϧʔϧ͚͢Δ͜ͱͰɺAMIͷ ԽΛࢭΊΒΕͨ
·ͱΊ • AMIͷཧΛखӡ༻Ͱߦ͏͜ͱͦͷͷ͕ কདྷͷཕʹͳΔ • AMIͷԽɺൿͷλϨԽͱ͍͏ཕϙΠ ϯτΛɺPackerͱAnsibleͰճආ͠Α͏
Have a nice Machine Image Life!
͋Γ͕ͱ͏͍͟͝·ͨ͠