Chef・Ansible等を用いた環境の自動構築方法 日本OSS推進フォーラム主催 第5回アプリケーション部会勉強会 http://connpass.com/event/11707/
ChefɾAnsibleΛ༻͍ͨڥͷࣗಈߏஙํ๏!~ೖฤ~Yutaro Sugai!2015/2/23
View Slide
͡Ίʹ͜ͷൃදݸਓͷݟղͰ͋Γɺॴଐ͍ͯ͠Δʢ͍ͯͨ͠ʣ৫ͷݟղɺChef࣮ફೖஶऀਞͷݟղͰ͋Γ·ͤΜٕज़తʹؒҧ͍͕͋Ε͘͞͠ࢦఠ͍ͯͩ͘͠͞
ࣗݾհɾtwitter: hokkai7goɾGitHub: hokkai7goɾRubyܥΧϯϑΝϨϯεͷϨϙʔτɾΔͼ·ฤूɾChef࣮ફೖɾWebPay
ࠓͷChefAnsibleΛͬͨࣗಈԽʹ͍ͭͯͷɺσϞΛ͓ݟͤ͠·͢ɻπʔϧɺίʔυͷʹͳΓ͕ͪͰ͕͢ࠓࣗಈԽͷೖʹண͠·͢ɻࣗಈԽΛಋೖ͢Δࡍͷҙࢥܾఆʹཱ͍͚ͯͯͨͩΕ͍Ͱ͢ɻओ࠵ऀ͔Βࣄલʹ͍࣭ͨʹ͑ͨΓɺࣗಈԽಋೖͷࡍʹߟ͑Δ͜ͱΛհ͠·͢ɻ
Chef࣮ફೖ• ධൃചதʂ• ٕज़ධ͔ࣾΒ• ݱࡏୈೋ൛• ߽՚ࣥචਞ• ҰͰ෯͘Χόʔ
͓ྱ• Chef࣮ફೖͷஶऀͷΈͳ͞Μ• ൃදͷػձΛ͍͍ͭͬͯͨͩͨ͘ @miyohide ࢯ• ຊOSSਪਐϑΥʔϥϜͷؔऀͷํʑ
࣭͍ͤͯͩ͘͞͞• SIerʹ͓ۈΊͷํ• ཧ৬ͷํ• ݱͷΤϯδχΞͷํ• ChefAnsibleͳͲΛͬͨ͜ͱ͕͋Δํ
࣭͍ͤͯͩ͘͞͞• ChefAnsibleʹڵຯ͕͋Δํ• ࣗಈԽʹڵຯ͕͋Δํ• ͳΜͱͳ͘དྷͨํ
େࣄͳ͜ͱ• ChefɾAnsibleͱ໊ʹ͋Γ·͕͢ɺπʔϧͷಋೖ͕తͰ͋Γ·ͤΜ
େࣄͳ͜ͱ• ࣗಈԽࢸΔಓ• ࣗಈԽΛҡ࣋͢Δϓϩηε
ࣗಈԽ!ͱ
ࣗಈԽͱhttps://kotobank.jp/word/ࣗಈԽ-681577ɹΑΓҾ༻͡Ͳ͏‐͔ʤ‐ΫϫʥʲࣗಈԽʳ!ʦ໊ʧ(εϧ)ਓखʹΑΒͣɺػցίϯϐϡʔλʔʹΑΔॲཧํࣜʹม͑Δ͜ͱɻʮఔͷʕΛ࣮ݱ͢Δʯ
ࣗಈԽࢲୡ͕࣮ݱ͍ͨ͠ͷɺɾαʔόߏஙɾӡ༻ɹͷࣗಈԽ
ࣗಈԽ͍͖ͳΓɾπʔϧɾίʔυͷʹͳΔͷૣٸ͗͢Δ
తͷલʹ• ͲΜͳ৫ʁ• ͲΜͳϓϩμΫτʁ• ͩΕ͕ϓϩμΫτΛ͏ͷʁ• ϓϩμΫτ͕མͪΔͱ୭͕ࠔΔͷʁ• མͪͨϓϩμΫτΛ୭͕͢ͷʁ• ࣗಈԽͰԿΛղܾ͢Δͷʁ• ϦϦʔεΛओಋ͢Δͷ୭ʁͲͷ৫ʁ• ϓϩδΣΫτࠓɺͲΜͳஈ֊ʁ
తͷલʹ• ͲΜͳ৫ʁ• ͲΜͳϓϩμΫτʁ• ͩΕ͕ϓϩμΫτΛ͏ͷʁ• ϓϩμΫτ͕མͪΔͱ୭͕ࠔΔͷʁ• མͪͨϓϩμΫτΛ୭͕͢ͷʁ• ࣗಈԽͰԿΛղܾ͢Δͷʁ• ϦϦʔεΛओಋ͢Δͷ୭ʁͲͷ৫ʁ• ϓϩδΣΫτࠓɺͲΜͳஈ֊ʁӡ༻ʹؔΘΔਓΛר͖ࠐΉඞཁ
తͷલʹ• ͲΜͳ৫ʁ• ͲΜͳϓϩμΫτʁ• ͩΕ͕ϓϩμΫτΛ͏ͷʁ• ϓϩμΫτ͕མͪΔͱ୭͕ࠔΔͷʁ• མͪͨϓϩμΫτΛ୭͕͢ͷʁ• ࣗಈԽͰԿΛղܾ͢Δͷʁ• ϦϦʔεΛओಋ͢Δͷ୭ʁͲͷ৫ʁ• ϓϩδΣΫτࠓɺͲΜͳஈ֊ʁϓϩμΫτͷཧղ
తͷલʹ• ͲΜͳ৫ʁ• ͲΜͳϓϩμΫτʁ• ͩΕ͕ϓϩμΫτΛ͏ͷʁ• ϓϩμΫτ͕མͪΔͱ୭͕ࠔΔͷʁ• མͪͨϓϩμΫτΛ୭͕͢ͷʁ• ࣗಈԽͰԿΛղܾ͢Δͷʁ• ϦϦʔεΛओಋ͢Δͷ୭ʁͲͷ৫ʁ• ϓϩδΣΫτࠓɺͲΜͳஈ֊ʁҰ൪େࣄͳͱ͜Ζ
తͷલʹ• ͲΜͳ৫ʁ• ͲΜͳϓϩμΫτʁ• ͩΕ͕ϓϩμΫτΛ͏ͷʁ• ϓϩμΫτ͕མͪΔͱ୭͕ࠔΔͷʁ• མͪͨϓϩμΫτΛ୭͕͢ͷʁ• ࣗಈԽͰԿΛղܾ͢Δͷʁ• ϦϦʔεΛओಋ͢Δͷ୭ʁͲͷ৫ʁ• ϓϩδΣΫτࠓɺͲΜͳஈ֊ʁஈ֊ʹΑΓΔ͜ͱ͕มΘΔ
ࣗಈԽͷϝϦοτ• Πϯϑϥͷߏஙɾӡ༻ΛίʔυͰࣗಈԽ• αʔόʹࠨӈ͞Εͳ͍• Φϖϛεͷݮ• ޮԽʢͷݮʣ• ଐਓੑͷഉআ• खॱॻ͔Βͷଔۀ• ਖ਼͔֬ͭߴ
ࣗಈԽͷσϝϦοτ• σϝϦοτ• ࣌ؒͱख͕͔͔ؒΔ• ܧଓతʹอक͢Δ࣌ؒͱखؒ
ࣗಈԽʹσϝϦοτ͕͋Δͱ͍͑ɺ!ख࡞ۀ+खॱॻͭΒ͍
• ਫΛҿΉ• ࣍ɺࣗಈԽͷಋೖํ๏ʹ͍ͭͯ
Ͳ͏ͬͯࣗಈԽΛಋೖͨ͠Β͍͍ͷʁ
ಋೖ• λΠϛϯά• ϓϩδΣΫτ͕࢝·Δͱ͖• ։ൃڥΛߏங͢Δͱ͖• طଘͷγεςϜʹಋೖ͢Δͱ͖• ্هҎ֎ͷ߹(൪֎ฤ)
ಋೖ(PJ։࢝࣌)• ϓϩδΣΫτ։࢝࣌ʹࣗಈԽ͓͖͍ͯͨ͠ͷ• σϓϩΠɾCIɾߏஙࣗಈԽ• ࣮ࡍʹಈ͘ίʔυ͕ͳͯ͘Ζ͏• ϓϩηεΛ܁Γฦ͠վળ͢Δ͜ͱ͕Ͱ͖Δ
ಋೖ(։ൃڥߏங)• ಉ͡ڥΛૉૣ͘։ൃऀʹͰ͖ΔΑ͏ʹͳΔ• όʔδϣϯͷҧ͍Ͱ·ͳ͘ͳΔ• ϝϯόʔ૿͑ͨ࣌ʹѹతʹָ• VagrantͱΈ߹ΘͤΕߏஙͷΓ͕͍͢͠͠• Chef, Ansibleͷೖʹ͓͢͢Ί• Chef࣮ફೖ5,6ষ͓͢͢Ί• [ؾΛ͚ͭΔ͜ͱ] όʔδϣϯཧ͠ɺܧଓతʹมߋΛՃ͑ΒΕΔΑ͏ʹ͓ͯ͘͠
ಋೖ(։ൃڥߏங)ᶃ VM Imageऔಘᶄ ϦϙδτϦ͔ΒίʔυऔಘίʔυΛऔಘͯ͠ܧଓతʹϓϩϏδϣχϯά
ಋೖ(طଘͷγεςϜ)• Ұ൪Ή͔͍ͣ͠• ՔಇதͷαʔϏεʹӨڹΛ༩͍͑ͨ͢Ί• αʔόՃ͕͋ΕҰ൪ͱ͖͍ͬͭ͢
ಋೖ(൪֎ฤ)• ڥ͕มԽ͢Δͱ͖ʹಋೖ͢Δ• αʔόҠߦ• PaaS, IaaSͳͲͷҠߦ• ·ͬ͞ΒͳαʔόΛࣗಈԽͰߏங
ಋೖ(จԽ)• จԽͷಋೖ͕େࣄͰɺࠎ͕ંΕΔ͔• ख࡞ۀΛͳ͘͠ɺࣗಈԽͰͷ࡞ۀத৺ʹ• ݽಠͳChef(ͳͲ)͍ʹͳͬͯ͠·Θͳ͍Α͏• ·ͣಡΈॻ͖ग़དྷΔؒΛ૿͢• Ξϯνύλʔϯʹؾ͕͚ΔਓΛ૿͢• ѻ͏ϛυϧΣΞOSɺίϚϯυͷཧղ͕Լͱͯ͠ඞཁʹͳͬͯ͘Δ• ϝϯςφϯεੑ• ಡΈॻ͖͕͍͢͠• ӡ༻ʹϑΟοτ͢Δ͔
ࣄલʹ͍࣭ͨ(1)“࣮ࡍʹɺChefΛͬͯɺRailsΞϓϦ͕ಈ͘ڥΛߏஙͯ͠ཉ͍͠ !ʢChefͷΠϯετʔϧ͔Β͡ΊͯɺRailsΞϓϦ͕ಈ͘·Ͱʣ”!!→͜ͷ͋ͱσϞಈըΛ͓ݟͤ͠·͢
ࣄલʹ͍࣭ͨ(2)”ChefͰݕࡧ͢ΔͱɺChef SoloɺChef ServerɺKnifeɺCookbookɺ !ϨγϐɺBerkshelfͳͲɺ͞·͟·ͳ༻ޠ͕ͨ͘͞Μ͋Γ !Α͔͘Βͳ͍ɻཧͯ͠ཉ͍͠ɻ”!!→Chef Solo: ελϯυΞϩϯܗࣜͷChef!→Chef Server: Chef ClientͱڞʹΫϥΠΞϯτ/αʔόܗࣜͷChef!→Ϩγϐ: Ұ൪جૅతͳߏཁૉɻίʔυͰॻ͍ͨઃఆखॱ!→Cookbook: ϨγϐʹඞཁͳσʔλϑΝΠϧΛ·ͱΊͨͷ!→Knife: खݩͷΫοΫϒοΫͱରͷαʔόΛͭͳ͙ίϚϯυϥΠϯπʔϧ
ࣄલʹ͍࣭ͨ(2)http://www.slideshare.net/yandod/devopschef-chef12 ΑΓҾ༻Chef ServerΛͬͨߏ
ࣄલʹ͍࣭ͨ(2)http://www.slideshare.net/yandod/devopschef-chef12 ΑΓҾ༻
ࣄલʹ͍࣭ͨ(3)“RubyͷDSLΛॻ͘͜ͱͰαʔόߏஙͷࣗಈԽ͕ߦ͑Δͱͷ͜ͱ͕ͩɺ !θϩ͔Βͯ͢Λॻ͖ى͜͢ͷେมͩ͠ɺֶशίετ͕ߴ͗͢Δ !Α͏ʹࢥ͏ɻApacheRuby,PassengerͳͲΛΠϯετʔϧ͢ΔͨΊͷ !ςϯϓϨʔτ͋Δͷ͔ʁ “!!→͍͍࣭Ͱ͢Ͷʂ!→Chef supermarket( https://supermarket.chef.io/ )͕͋Γ·͢ɻ!!͝ར༻ܭըతʹ!ʢΉͷͰͳ͍Մೳੑɺ݁ہιʔείʔυΛಡΉӋʹͳΔ͜ͱʣ
Chef Supermarket• ୭͕ϝϯς͍ͯ͠Δͷʁ!• Chefࣾ!• PayPal!• HiganWorks!• Chef׆༻ΨΠυஶऀͷᖒొ͞Μͷձࣾ!• ͳͲͳͲ(ΫοΫϒοΫ࣍ୈ)!• ͲΜͳΫοΫϒοΫ͕͋Δͷʁ!• nginx!• apache2!• rbenv!• postgresql!• mysql!• docker!• ͳͲͳͲ
ࣄલʹ͍࣭ͨ(4)“RubyͷDSLͰࣗಈԽͰ͖Δͷָͩͱࢥ͏͕ɺςετ !ͲͷΑ͏ʹ͢Δͷ͔ɻ “!!→͍͍࣭Ͱ͢Ͷʂ!→test-kitchen, Serverspec Infrataster Ͱςετ͢Δͷ͕ྑͦ͞͏!→͔͠͠ɺ·ͩϕετϓϥΫςΟεͳ͍ͱೝ͍ࣝͯ͠Δ!→ࣗಈԽͷՌΛ֬ೝ͢Δͷ͕େࣄ!→ςετʹ࣌ؒΛ͍ա͗ͳ͍Α͏ʹɺ·ͣεϞʔϧελʔτͰ!ʢࣗಈԽʹɺςετʹ͕͔͔࣌ؒΔͱվળͷαΠΫϧΛճ͠ʹ͍͘ʣ
http://serverspec.org/ ΑΓ
http://infrataster.net/ ΑΓ
ࣄલʹ͍࣭ͨ(5)“్தͰࣦഊͨ͠ޙʹ࠶ɺ࣮ߦͯ͠ͳ͍͔ɻ !ࣗ࡞ͷγΣϧεΫϦϓτͳͲͰࣗಈԽΛࢼΈΔͱɺϦϥϯॲཧͷ !࡞ΓࠐΈ͕େมɻ “!!→ͳ͍ɻ!→ႈੑ(Կ࣮ߦͯ͠ಉ݁͡ՌʹͳΔੑ࣭ͷ͜ͱ)Λߟྀͯ͠ॻ͔ΕͨϨγϐͰ͋Εͳ͍ɻ!→ʮखॱʯͰͳ͘ʮঢ়ଶʯΛఆٛ͢ΕΑ͍(Chef࣮ફೖ §2.10 p49)!→ྫ͑…(࣍ͷεϥΠυ
ྫ͑ɺgit clone͢Δͱ͖ॳճ͚ͩclone͍ͨ͠ͳΒɺ࣍ճҎ࣮߱ߦ͢Δඞཁ͕ͳ͍bash_profileΛϗʔϜσΟϨΫτϦʹஔ͍͕ͨ͠aaa ͱ͍͏༰ؚ͕·Ε͍ͯΔͳΒɺมߋΛՃ͑ͨ͘ͳ͍http://qiita.com/hokkai7go@github/items/37895052b52105be4c51 ΑΓ
ࣄલʹ͍࣭ͨ(6)“αʔόݻ༗ͷઃఆʢϗετ໊IPΞυϨεʣͳͲΛChefͰ !࣮ݱ͢Δ͜ͱՄೳ͔ʁͦ͜Γख࡞ۀ͔ʁ “!!→Մೳ͕ͩɺΫϥυڥΛ͍ͬͯͨͷͰݸਓతʹ͋·Γܦݧ͕ͳ͍!→ϗετ໊IPΞυϨεͷඥ͚Λཧ͢Δͷ͕ࡶͦ͏ʹࢥ͏
ࣄલʹ͍࣭ͨ(7)“Chefʹࣅͨπʔϧͱͯ͠PuppetansibleͳͲ͕͋ΔΑ͏͕ͩɺ !ͦΕͧΕͷಛʁ “!!→͍͍࣭Ͱ͢Ͷʂ
πʔϧൺֱChef Ansible Itamae γΣϧεΫϦϓτอकੑ ○ ○ ○ ☓ಋೖָ͕͔ ˚ ○ ○ ○কདྷੑ ○ ○ ○ ?қ ˚ ○ ˕ ˚ϓϥοτϑΥʔϜ˕ ○ ○ ○
πʔϧൺֱ• Chef• RubyͳͷͰΘ͔Γ͍͕͢ɺεΫϦϓτ͕ཚཱ͠ͳ͍Α͏ؾΛ͚ͭΔඞཁ͕͋Δ• ͍ΖΜͳͱ͜ΖͰίʔυΛࠩ͠ࠐΊΔɺ͘·ͳ͘ಡΉඞཁ͕͋ΔΑ͏ʹࢥ͏• ઃఆରͷαʔόʹΤʔδΣϯτ(Ruby)ΛΠϯετʔϧ͢Δඞཁ͕͋Δ• ར༻ऀ૿͍͑ͯ͘ͱࢥ͏• WindowsAzureʹରԠ͍ͯ͠Δ༷(Chef12͔Β)
πʔϧൺֱ• Ansible• γϯϓϧͰͱͯΑ͍• ͔͠͠ɺyamlͰԿ͔ॻ͘ͷʹແཧ͕͋Δؾ͕͢Δ• ར༻ऀ૿͍͑ͯ͘ͱࢥ͏• ΤʔδΣϯτϨε࠷ߴʂ• SSH͑͞Ͱ͖ΕΑ͍
πʔϧൺֱ• Itamae• Chef͔ΒൃΛಘͨγϯϓϧͰܰྔͳπʔϧ• ຊਓ͕։ൃɻใΛಘ͍͢• RubyͳͷͰΘ͔Γ͍͢• ར༻ऀ૿͍͑ͯ͘ͱࢥ͏• ΤʔδΣϯτϨε࠷ߴʂ
πʔϧൺֱ• γΣϧεΫϦϓτ• ॻ͘ͷϝϯςφϯεେม• Θ͔Γʹ͍͘ͷͱɺႈੑͷߟྀ͕େม• EC2ͷcloud-initͷΑ͏ʹɺॳظߏஙͰڧྗ• γΣϧͷํݴΛߟྀ͢Δඞཁ͕͋Δ
·ͱΊ• πʔϧ͕େࣄͰͳ͍• ࣗಈԽࢸΔಓ• ࣗಈԽΛҡ࣋͢Δϓϩηε• ͦͷ্Ͱɺࣗͨͪͷ৫ͰͲͷπʔϧΛબͿ͔• จԽͷಋೖ͕େม͕ͩେࣄ• ʢͳͥಋೖ͢Δͷ͔ͱ͍ͬͨʣ͚ࣾϙΤϜΛॻ͘ͱΘΓ͍͔͢• ࣄྫΛΓ͍ͨͷͰɺͥͻൃද͍ͯͩ͘͠͞
Q&A• ೖฤͷൃද͜ΕͰऴΘΓͰ͢• ࣭͋Γ·͔͢ʁ
ChefɾAnsibleΛ༻͍ͨڥͷࣗಈߏஙํ๏!~σϞฤ~Yutaro Sugai!2015/2/23
σϞ• Vagrant + Chef soloΛͬͯߏங!• vagrantͷػೳͰ͋ΔprovisionerΛར༻!• ChefͷagentΠϯετʔϧVagrant͕ࣗಈͰͬͯ͘ΕΔ!• ΫοΫϒοΫ!• جຊతʹChef supermarketͷͷΛར༻!• nginx!• postgresql!• nodejs!• rbenv(RubyͷΠϯετʔϧཧ)!• ࣗલͰॻ͍ͨͷ্هΫοΫϒοΫͷݺͼग़͠ɺnginxͷݻ༗ઃఆͷΈ!• σϓϩΠrailsΞϓϦଆ͔ΒcapistranoΛར༻ͯ͠ߦ͏