IaCを意識したCLI開発のエッセンス

4d78b749c315e21a956053dcbf0508a9?s=47 po3rin
November 20, 2020

 IaCを意識したCLI開発のエッセンス

〇〇をファイルで宣言的に管理
したい。そのようなツールを開発
するときは少しコツが必要です。

4d78b749c315e21a956053dcbf0508a9?s=128

po3rin

November 20, 2020
Tweet

Transcript

  1. IaCを意識した CLI開発のエッセンス 〇〇をファイルで宣言的に管理 したい。そのようなツールを開発 するときは少しコツが必要です。 冪等性を担保するCLIについて考えよう

  2. தଜ߂෢ ΤϜεϦʔͷ"*ɾػցֶशνʔϜͰݕࡧج൫ पΓΛ୲౰͍ͯ͠Δɻ(P͕޷͖ɻ ֤छΞΧ΢ϯτQPSJOͰ΍ͬͯ·͢ɻ )*SPNV/BLBNVSB

  3. ΤϜεϦʔͰ͸&MBTUJDTFBSDIΛར༻͍ͯ͠Δ͕ɺੵۃతʹ ݕࡧվળ͍ͯ͠ΔͷͰɺ*OEFYʢ؆୯ʹ͍͏ͱσʔλߏ଄ ͷมߋ͕සൟʹൃੜ͠ɺ؅ཧͮ͠Β͍ঢ়گͩͬͨɻ ՝୊ *446&

  4. ݕࡧج൫νʔϜͰ͸JOEFYͷ৽ن࡞੒BMJBT੾Γସ͑Ͱ ରԠ͍ͯ͠ΔŇ৽͍͠JOEFYʹରͯ͠࠶౓σʔλ౤ೖΛߦ͏ ӡ༻ 01&3"5*0/ OFXTW OFXTW /FXTBMJBT 3FRVFTU 0MEJOEFY /FXJOEFY

    4XJUDIJOEFY
  5. ӡ༻ 01&3"5*0/ 3FRVFTU %FQMPZ+PC खಈΩοΫͳϝϯςφϯε+PCͷ਺ʑ DSFBUFJOEFYDSFBUFBMJBTTXJUDIJOEFY

  6. ՝୊ *446& ࠓɺBMJBTʹඥ͍ͮͯΔJOEFYͷόʔδϣϯͬͯԿ͚ͩͬʁʁ JOEFYೖΕସ͑ɺ࡞੒ͷͨͼʹࢸΔͱ͜Ζʹൃੜ͢Δ%J⒎ JOEFY࡞੒εΫϦϓτͷJOEFY໊Λม͑Δͷ๨Εͯͨɻɻ ࢖ͬͯͳ͍JOEFY͕์ஔ͞ΕͯΔɻɻ ႈ౳ੑΛ࣋ͬͨૢ࡞ʹ͍ͨ͠ɻɻ

  7. *B$ͱ͸ΠϯϑϥΛએݴతʹ؅ཧ͢ΔࣄͰιϑτ΢ΣΞ։ൃϓϩηεΛΠ ϯϑϥͷΦʔτϝʔγϣϯʹੜ͔͢Ξϓϩʔνɻ͜ΕΛ্ख͘Ӭଓϛυϧ ΢ΣΞͰ͋Δ&MBTUJDTFBSDIʹ*B$ͷϝϦοτΛద༻Ͱ͖ͳ͍͔ ɾهड़తͳΞϓϩʔνʹΑΔႈ౳ੑ୲อ ɾఆٛϑΝΠϧʹΑΔόʔδϣϯ؅ཧ ɾܧଓςετγεςϜɺϓϩηε *B$ *OGSBTUSVDUVSFBTDPEF

  8. ႈ౳ੑΛอͪͳ͕ΒఆٛϑΝΠϧͰ &MBTUJDTFBSDI*OEFYBMJBTΛએݴత ʹ؅ཧͯ͘͠ΕΔΛ࡞ͬͨ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS

  9. ͜ͷΑ͏ʹఆٛϑΝΠϧͰ&MBTUJDTFBSDIͷ ঢ়ଶΛએݴͰ͖ΔɻӬଓϨΠϠʔͳͷͰૢ ࡞͸XSJUFPOMZʹࠓ͸ߜ͍ͬͯΔɻͭ·Γ ݱࡏͷ࣮૷͸׬શͳ*B$Λଥڠ͢ΔࣄͰσʔ λΛޡͬͯফ͢ϦεΫΛආ͚͍ͯΔɻ FTLFFQFS &MBTUJDTFBSDI*OEFYLFFQFS

  10. ΦϥΠϦʔͷʰ*OGSBTUSVDUVSFBT$PEFʱ ͷதͰ*B$πʔϧ͕࣋ͭ΂͖ػೳʹ͍ͭͯͷه ड़͕͋Δɻ͔͜͜Β͸͜ͷຊΛࢀߟʹ FTLFFQFSͰ΋ҙࣝͨ͠*B$πʔϧ࡞੒ͷϓϥ ΫςΟεΛ঺հ͍ͯ͘͠ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF

  11. ཁ݅ίϚϯυϥΠϯπʔϧͷແਓϞʔυ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ଞͷπʔϧͱ߹Θͤͯ࢖͍΍͍͢Α͏ʹೖྗΛऔΓग़ͤΔ͜ͱ͕ॏ ཁɻFTLFFQFSͰ͸ඪ४ೖྗͳͲ͔Β৘ใΛऔΓग़ͤΔΑ͏ʹ͢ Δɻ·ͨ௚઀తͳλΠϐϯάΛཁٻ͠ͳ͍ͱ͍͚ͳ͍Πϯλʔ ϑΣʔε͸ഉআͰ͖ΔΑ͏ʹ͢Δɻ

  12. ཁ݅ઃఆͷ֎ࡏԽ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ൓෮Մೳੑͷ୲อɻ·ͨطଘͷςΩε τϑΥʔϚοτͰ͋Ε͹͋ΒΏΔط੒ πʔϧͰಡΈॻ͖Ͱ͖Δɻ·ͨɺόʔ δϣϯ؅ཧ΋Ͱ͖Δɻ

  13. ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ແਓ࣮ߦ͸ίϚϯυͱͯࣗ͠ಈͰ࣮ߦͰ͖Δ͚ͩͰ͸ෆे෼ɻਓ͕ؒؔ༩͠ ͳͯ͘΋ߴ͍৴པੑͰ࣮ߦͰ͖Δ͜ͱ͕ॏཁɻͦ͜ͰԼهͷཁૉ͕ඞཁɻ ɾႈ౳ੑ ɾࣄલνΣοΫ ɾࣄޙνΣοΫ ɾ໨ʹݟ͑ΔܗͰͷࣦഊ ɾύϥϝʔλԽ

  14. ཁ݅ແਓ࣮ߦͷαϙʔτ *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰ͸ႈ౳ੑɺࣄલνΣοΫɺ ࣄޙνΣοΫɺ໨ʹݟ͑ΔܗͰͷࣦഊͱ ͍͏ཁ݅Λ࣮૷͍ͯ͠Δɻ͜ΕʹΑΓ ʮΦʔτϝʔγϣϯڪා঱ʯΛݮΒ͢ɻ

  15. *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF FTLFFQFSͰ͸Լهͷεςʔδʹ෼ׂ͞ΕΔ ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMF͸ଘࡏ͢Δ͔ ඞਢϑΟʔϧυ͸ຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞੒ 

    BMJBTͱʹඥͮ͘JOEFY͸ଘࡏ͢Δͷ͔ ࣮ߦεςʔδ ࣮ࡍʹఆٛϑΝΠϧͷঢ়ଶΛಉظͤ͞Δ ࣄޙνΣοΫ ఆٛϑΝΠϧʹ͋ΔJOEFY΍BMJBT͕࡞ΒΕ͔ͨ
  16. *B$Λҙࣝͨ͠$-*ͷ࡞๏ *B$BXBSF$-*#FTU1SBDUJDF ઃఆϑΝΠϧͷόϦσʔγϣϯ ඥͮ͘NBQQJOHpMF͸ଘࡏ͢Δ͔ ඞਢϑΟʔϧυ͸ຬͨ͞Ε͍ͯΔ͔ ࣄલνΣοΫ JOEFY͕࣮ࡍʹ࡞ΕΔ͔ Ұ࣌తͳJOEFYΛ࣮ࡍʹ࡞੒  BMJBTͱʹඥͮ͘JOEFY͸ଘࡏ͢Δͷ͔

    ςετϐϥϛουΛߟྀ͠ɺTUBHFͷதͰ΋ίετͷ௿͍΋ͷ͔ΒνΣοΫ
  17. ݁Ռ $06$-64*0/ *B$Λҙࣝͨ͠$-*Ͱ͸ແਓ࣮ߦͷ৴པੑΛ্͛Δ͜ͱ΍ɺ ଞͷπʔϧ΍εΫϦϓτͱ߹Θͤͯ࢖͑ΔΑ͏ʹ͓ͯ͘͠ͱ (PPEɻ JOEFY؅ཧ༻ͷLT+PCɺγΣϧεΫϦϓτͳͲΛେ૟আɻ ӡ༻͕͔ͳΓγϯϓϧʹͳͬͨ͸ͣɻຊ൪ಋೖ͔Β೔͕ઙ͍ ͷͰࠓޙͷFTLFFQFSͷ׆༂Λ؍࡯͍ͯ͘͠ɻ

  18. ը૾ར༻ݩ 8FCWFDUPSDSFBUFECZTUPSJFTXXXGSFFQJLDPN IUUQTXXXGSFFQJLDPNWFDUPSTXFC