インフラ自動化の落とし穴と宣言的アーキテクチャ

 インフラ自動化の落とし穴と宣言的アーキテクチャ

2020/07/14
Cybozu Tech Meetup #3

4bbaed9ee2677ae2ab37e71b4f3cf3f1?s=128

Yusuke Nojima

July 14, 2020
Tweet

Transcript

  1. ΠϯϑϥࣗಈԽͷམͱ݀͠ͱ એݴతΞʔΩςΫνϟ $ZCP[V5FDI.FFUVQ ։ൃຊ෦ :BLVNPνʔϜ ໺ౡ ༟ี

  2. ࠓ೔࿩͢͜ͱ  ΠϯϑϥࣗಈԽͷམͱ݀͠  એݴతΞʔΩςΫνϟͱσϓϩΠύΠϓϥΠϯ

  3. ΠϯϑϥࣗಈԽͷམͱ݀͠

  4. DZCP[VDPN ͷΠϯϑϥ • ࠃ಺ͷΦϯϓϨ%$Ͱӡ༻ • ෺ཧαʔόʔ 1,000 ୆Ҏ্ • ΠϯϑϥͷͨΊͷ1ZUIPOίʔυ

    100,000 ߦҎ্
  5. ࣗಈԽͷྲྀΕ ਓ͕खͰΦϖϨʔγϣϯ खॱॻ ΦϖϨʔγϣϯͷճ਺͕૿Ճ ࣗಈԽͷػӡ͕ߴ·Δ ࣗಈԽʂ खॱॻΛ 1ZUIPOεΫϦϓτʹ

  6. ࣗಈԽͷྫ • ΞϓϦέʔγϣϯͷΞοϓσʔτ • "1αʔόʔͷ੾Γ཭͠ɺϓϩάϥϜͷஔ͖׵͑ɺ%#ϚΠά ϨʔγϣϯɺόονͷҰ࣌ఀࢭɺϝλσʔλͷॻ͖׵͑ͳͲ ௕େͳखॱΛҰίϚϯυʹ • ͜ΕͰΦϖϨʔλʔ͸ΞοϓσʔτखॱͷৄࡉΛ஌Βͳͯ͘ ΋ΞοϓσʔτͰ͖Δʜ͸ͣͩͬͨ

  7. ͱ͜Ζ͕ʜ ͑ͬɺ͜ͷίϚϯυଧͭલʹ αʔϏε"ΛࢭΊͳ͍ͱ͍͚ͳ͍ΜͰ͔͢ʁ ͋Εɺ͜ͷίϚϯυଧͬͨΒ উखʹόονॲཧ͕ࢭ·ͬͨΜͰ͚͢Ͳʁ ҙຯͷΘ͔Βͳ͍ΤϥʔΛు͍ͯ ࢭ·ͬͪΌͬͨΜͰ͕͢ʜ ͑ɺ͜ͷίϚϯυͱಉ࣮࣌ߦͰ͖ͳ͍ΜͰ͔͢ʁ

  8. ͜ͷίϚϯυΛ࣮ߦ͢Δͱ Կ͕ى͜Δ͔Θ͔Βͳ͍͔Β ࣄલʹԿ͕࣮ߦ͞ΕΔ͔ௐ΂͓͔ͯͳ͍ͱʜ ಉ࣮࣌ߦͰΤϥʔ͕ى͜Δͱ͍͚ͳ͍͔Βɺ ଞͷΦϖϨʔλʔ͕ͲΜͳίϚϯυΛ࣮ߦ͢Δͷ͔ ͪΌΜͱฉ͍͓ͯ͜͏ʜ

  9. ΦϖϨʔγϣϯ ϓϥϯχϯά ΦϖϨʔγϣϯ࣮ࢪ ͲͷίϚϯυΛଧͭʁ લఏ৚݅͸ʁ

  10. ΦϖϨʔγϣϯ ϓϥϯχϯά ΦϖϨʔγϣϯ࣮ࢪ Ϝζ͗͢ʜ Πϯϑϥͷେن໛Խ ࣗಈԽʹΑΔฐ֐

  11. ݁ہͲ͏͢Δ΂͖ͩͬͨͷ͔ʁ ΦϖϨʔγϣϯ ϓϥϯχϯά ΦϖϨʔγϣϯ࣮ࢪ ͍··Ͱͷ ࣗಈԽ ໨ࢦ͢΂͖ ࣗಈԽ

  12. ʜʜͲ͏΍Δͷʁ ͍Ζ͍Ζͱٞ࿦ɾݕ౼͢Δ΋̎೥͙ؒΒ͍ਐḿͤͣ

  13. ೥ɺ͜Μͳঢ়گʹసػ͕๚ΕΔʂʂ

  14. 64൛LJOUPOFͷ"84Ҡߦ

  15. :BLVNPϓϩδΣΫτ • 64൛LJOUPOFͷͨΊʹ"84্ͰΠϯϑϥΛθϩ͔Βߏங͢Δ ϓϩδΣΫτ͕ൃ଍ • ΞϝϦΧͰചΔͳΒΞϝϦΧʹ%$͕ඞཁ • ΦϯϓϨ%$͡Όͳͯ͘"84Ͱ

  16. • ࠷ॳ͔ΒࣗಈԽΛલఏͱͨ͠ΞʔΩςΫνϟ • Πϯϑϥ͚ͩͰͳ͘ΞϓϦέʔγϣϯ LJOUPOF ʹ΋ खΛՃ͑Δ • %FW0QTΛҙࣝͨ͠૊৫ߏ଄ •

    %FW͔ͭ 0QTͳνʔϜɻนΛऔΓ෷͓͏ શମ࠷దΛ໨ࢦͧ͢ʂʂ
  17. ࣗಈԽ໰୊΁ͷιϦϡʔγϣϯ • ΠϯϑϥࣗಈԽͷ໰୊ΛҰܸͰղܾ͢Δ୯ҰͷιϦϡʔγϣϯ͸ͳ͍ • ࡉ͔͍໰୊ʹ෼ղͯ͠ݸผܸഁ • એݴతΞʔΩςΫνϟ • ϚωʔδυαʔϏεͷಋೖ •

    ϦϦʔεϓϩηεվળ • ૊৫ମ੍มߋ • ʜ ࠓ೔͸͜Εͷ࿩͕ϝΠϯ
  18. ద༻खॱʹ͍ͭͯߟ͑Δ

  19. l43&͸ɺ͓Αͦ ͷαʔϏεো֐͸ɺಈ࡞தͷγεςϜͷ มߋʹΑͬͯੜ͍ͯ͡Δ͜ͱΛൃݟ͠·ͨ͠z #FUTZ#FZFSଞʮαΠτϦϥΠΞϏϦςΟΤϯδχΞϦϯάʯ ΦϥΠϦʔɺ೥ɺQ

  20. ALB Aurora Aurora nginx slash-ap kintone-ap pod service EKS Cluster

    Elastic search kintone-ap (kintone 本体) kintone-ap (kintone 本体) ミドルウェア、 管理サービス等 いろいろ kintone-ap (kintone 本体) kintone-ap (kintone 本体) slash-ap (ユーザー管理) slash-ap (ユーザー管理) VPC nginx nginx
  21. ద༻खॱ • Πϯϑϥ͸ଟ਺ͷখ͞ͳαʔϏεʹΑͬͯߏ੒͞Ε͍ͯΔ • :BLVNPͷ৔߹͸ݸ͙Β͍ • ͜Ε·Ͱ͸ɺαʔϏεΛมߋͨ͠ͱ͖ʹखಈͰద༻खॱΛ࡞͍ͬͯͨ • ʮϥΠϒϥϦΛมߋ͔ͨ͠ΒɺαʔϏε"ͱαʔϏε#Λߋ৽ͯ͠࠶ى ಈͯ͠ʜʯ

    • Өڹൣғͷ࿙ΕʹΑΔద༻ϛε͕ൃੜ͠΍͍͢
  22. ద༻खॱΛͳͤ͘ͳ͍͔ʁ

  23. ద༻खॱΛͳͤ͘ͳ͍͔ʁ ˠ ιʔείʔυͷΈ͕༩͑ΒΕͨͱ͖ʹ ࣗಈతʹͦΕΛσϓϩΠͰ͖Δ͔ʁ

  24. <docker> debian10 <docker> corretto11 service A service B service C

    <library> shared-kernel ιʔείʔυؒͷґଘάϥϑ
  25. TIBSFELFSOFMΛมߋͨ͠৔߹͸ʁ <docker> debian10 <docker> corretto11 service A service B service

    C <library> shared-kernel TFSWJDF#ͱ TFSWJDF$ΛσϓϩΠ
  26. <docker> debian10 <docker> corretto11 service A service B service C

    <library> shared-kernel EFCJBOΛมߋͨ͠৔߹͸ʁ TFSWJDF" # $ΛσϓϩΠ
  27. ͑ͬ ͜Εμϝ͡Όͳ͍ʁ

  28. ᶃ ιʔείʔυ͕มԽ͍ͯ͠ͳͯ͘΋σϓϩΠ͕ඞཁͳ৔߹͸ͳ͍ͷʁ ᶄ σϓϩΠʹΑΔαʔϏεӨڹͱ͔ىಈॱং੍ޚͱ͔Ͳ͏͢Δͷʁ

  29. ᶃ ιʔείʔυ͕มԽ͍ͯ͠ͳͯ͘΋σϓϩΠ͕ඞཁͳ৔߹͸ͳ͍ͷʁ ᶄ σϓϩΠʹΑΔαʔϏεӨڹͱ͔ىಈॱং੍ޚͱ͔Ͳ͏͢Δͷʁ

  30. l࠶ݱੑz • ϏϧυͱσϓϩΠʹ࠶ݱੑΛ΋ͨͤΔ • ࠶ݱੑͱ͸ • ιʔείʔυ͕ಉ͡Ͱ͋Ε͹੒Ռ෺͕ಉ͡ͱ͍͏ੑ࣭ • ͢ͳΘͪɺιʔείʔυ͕มԽ͠ͳ͚Ε͹σϓϩΠෆཁ

  31. ࠶ݱੑͷ͋ΔϏϧυ ྫ͑͹ʜ • ґଘϥΠϒϥϦͷόʔδϣϯ͸શͯݻఆ͢Δ • ࠷ۙͷϏϧυπʔϧͳΒΘΓͱ؆୯ • EPDLFS ͷϕʔεΠϝʔδ͸ෆมͳϥϕϧΛࢦఆ͢Δ •

    lMBUFTUz͸μϝ • ωοτϫʔΫӽ͠ͷϑΝΠϧμ΢ϯϩʔυʹ஫ҙ • ಉ͡63-ͰผͷϑΝΠϧ͕མͪͯ͜ͳ͍͔ʁ
  32. AP Server, Middlewares Network Database 物理 CloudFormation Kubernetes AWS なら

    気にしなくていい ࠶ݱੑͷ͋ΔσϓϩΠ Load Balancer Monitoring (Datadog), Alerts (PagerDuty) Terraform
  33. ᶃ ιʔείʔυ͕มԽ͍ͯ͠ͳͯ͘΋σϓϩΠ͕ඞཁͳ৔߹͸ͳ͍ͷʁ ᶄ σϓϩΠʹΑΔαʔϏεӨڹͱ͔ىಈॱং੍ޚͱ͔Ͳ͏͢Δͷʁ

  34. l͍ͭͰ΋σϓϩΠͯ͠Α͍z • શͯͷαʔϏεΛʮ͍ͭͰ΋σϓϩΠͰ͖Δʯঢ়ଶʹอͭ • σϓϩΠͰ͖ͳ͍ঢ়ଶʹͳΔͱͨ͠Βෆ۩߹ͱͯ͠ରॲ • ͦ΋ͦ΋"84Ͱ͸&$ΠϯελϯεͷಥવࢮʹରԠ͠ͳ͍ ͱ͍͚ͳ͍ͷͰɺඞવతʹ͜ͷ৚͕݅ඞཁ ΦϯϓϨతࢥߟ͔Βͷ୤٫

  35. l͍ͭͰ΋σϓϩΠͯ͠Α͍zͷͨΊʹ • όονॲཧதʹσϓϩΠ͕૸Δͱ௨৴அʹΑΓΤϥʔʹͳΔ ˠద੾ʹϦτϥΠ͢Δ • ೋॏʹ૸ΔͱࠔΔॲཧ͕͋ͬͯ৑௕ԽͰ͖ͳ͍ ˠ ෼ࢄϩοΫΛಋೖͯ͠৑௕Խ • ϩʔυόϥϯαͷ࠶ىಈͰϢʔβʔ͔ΒͷϦΫΤετ͕ΤϥʔʹͳΔ

    ˠ (SBDFGVM4IVUEPXO
  36. ʮ͍··ͰΦϖϨʔγϣϯͰղܾ͍ͯͨ͠໰୊Λ αʔϏεଆͰղܾ͢Δʯ ͱ͍͏ํ਑

  37. service A service B service C 上位の管理サービス1 上位の管理 サービス2 ΦϖϨʔλʔ

    ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ͍··Ͱ͸ྫ֎ॲཧΛΦϖϨʔλʹ౤͍͛ͯΔߏਤͩͬͨ
  38. service A service B service C 上位の管理サービス1 上位の管理 サービス2 ΦϖϨʔλʔ

    ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ྫ֎ॲཧ ͜Ε͔Β͸ྫ֎ॲཧ΋Ͱ͖Δ͚ͩԼҐͷαʔϏεͰؤுΔ ྫ֎ॲཧͷ࣮૷ʹ͸ϚΠΫϩαʔϏεຊ #VJMEJOH.JDSPTFSWJDFT ͷ஌ݟ͕͘͢͝ࢀߟʹͳͬͨ
  39. %FW0QTͱͷؔ܎ • ΦϖϨʔγϣϯίετͱαʔϏε։ൃίετͷτϨʔυΦϑ • %FWͱ 0QT͕෼཭͍ͯ͠Δͱɺίετͷԡ͠෇͚߹͍ʹ ͳͬͯେม • :BLVNP ͸

    %FW͔ͭ 0QTͳνʔϜͳͷͰ΍Γ΍͍͢ • ΦϖϨʔγϣϯ΋͢Δ͠ɺαʔϏεଆͷ࣮૷΋͢Δ
  40. એݴతΞʔΩςΫνϟͱ σϓϩΠύΠϓϥΠϯ

  41. એݴతΞʔΩςΫνϟ "1αʔόʔ͕୆ ͋Δ͜ͱ ཧ૝ͷঢ়ଶ ೖྗ BQ ࣮ࡍͷঢ়ଶ ࠩ෼ "1αʔόʔ͕΋͏̍୆ඞཁ BQ

  42. खॱࢦ޲ͷΞʔΩςΫνϟͱ એݴతΞʔΩςΫνϟͷҧ͍ • खॱࢦ޲ • ΦϖϨʔγϣϯ ཧ૝ͱ࣮ࡍͷࠩ෼ Λೖྗ͢Δ • ࠷ऴతʹͲ͏͍ͨ͠ͷ͔ΛγεςϜ͸஌Βͳ͍

    • એݴత • ཧ૝ͷঢ়ଶΛೖྗ • Ͳ͏͍͏ΦϖϨʔγϣϯΛ͢Δ͔͸γεςϜ͕ܾΊΔ
  43. σϓϩΠύΠϓϥΠϯ Πϯϑϥͷঢ়ଶΛ ιʔείʔυͰఆٛ (JUͰ؅ཧ ύΠϓϥΠϯ $* "84 ཧ૝ͷঢ়ଶ ࣮ࡍͷঢ়ଶ

  44. yakumo Build Deploy Test dev 環境 dev pipeline repository Deploy

    Test Deploy Test staging 環境 prod 環境 staging pipeline prod pipeline 1JQFMJOF0WFSWJFX
  45. yakumo Build Deploy Test dev 環境 dev pipeline repository Deploy

    Test Deploy Test staging 環境 prod 環境 staging pipeline prod pipeline 1JQFMJOF0WFSWJFX
  46. #VJME ଟ਺ͷαʔϏεΛ ࠩ෼Ϗϧυ͢Δ

  47. #VJME • ࠩ෼Ϗϧυ • ͦͷαʔϏεͷιʔείʔυͷϋογϡΛऔΔ • ڞ௨ϥΠϒϥϦ΍ڞ௨%PDLFSΠϝʔδʹґଘ͍ͯ͠Δ৔߹͸ɺ ґଘ΋ͻͬ͘ΔΊͯϋογϡΛܭࢉ͢Δ • 4ʹࠓ·ͰϏϧυͨ͜͠ͱͷ͋ΔϋογϡΛશ෦ه࿥͓ͯ͘͠

    • 4ʹϋογϡ͕ͳ͍ 㱺 Ϗϧυ͠ͳ͍ͱ͍͚ͳ͍ • ੜ੒͞ΕͨίϯςφΠϝʔδͷλάʹ͸ϋογϡ஋Λ෇͚Δ ʢσϓϩΠͰ࢖͏ʣ
  48. yakumo Build Deploy Test dev 環境 dev pipeline repository Deploy

    Test Deploy Test staging 環境 prod 環境 staging pipeline prod pipeline 1JQFMJOF0WFSWJFX
  49. %FQMPZ • "84ͷϦιʔεͷσϓϩΠ • $MPVE'PSNBUJPO ͰσϓϩΠ͢Δ • $MPVE'PSNBUJPO͕ࣗಈతʹࠩ෼σϓϩΠΛߦ͏ • :BLVNPͷ

    $MPVE'PSNBUJPOςϯϓϨʔτ͸̍ສߦҎ্ • ৔߹ʹΑͬͯ͸ΧελϜϦιʔε΋࢖͏
  50. None
  51. %FQMPZ • ϛυϧ΢ΣΞͷσϓϩΠ • ,VCFSOFUFT Λ࢖ͬͯσϓϩΠ • ίϯςφΠϝʔδͷλά͸Ϗϧυ࣌ͷϋογϡΛࢦఆ 㱺 มߋ͕͋ͬͨίϯςφͷΈ͕σϓϩΠ͞ΕΔ

    • :BLVNPͷ ,VCFSOFUFT.BOJGFTU͸̍ສߦ͙Β͍
  52. yakumo Build Deploy Test dev 環境 dev pipeline repository Deploy

    Test Deploy Test staging 環境 prod 環境 staging pipeline prod pipeline 1JQFMJOF0WFSWJFX
  53. 5FTU • &&ςετΛߦ͏ • 4FMFOJVN ͕ಈ͘ • 2"JO1SPEVDUJPO • ຊ൪؀ڥͰ΋ςετΛ࣮ߦ

  54. ·ͱΊ

  55. ·ͱΊ • ΠϯϑϥࣗಈԽͷམͱ݀͠ • ϓϥϯχϯάͷίετΛݟམͱ͢ͱΦϖϨʔγϣϯ͕εέʔϧ͠ͳ͍ • ΦϖϨʔγϣϯͷ໰୊ΛαʔϏεଆͰղܾ • .JDSPTFSWJDFT΍"84ͷ஌ݟ΋ॏཁ •

    %FW0QT • એݴతΞʔΩςΫνϟͱσϓϩΠύΠϓϥΠϯ • ຊ൪؀ڥͷঢ়ଶΛιʔείʔυͱಉظͤ͞Δ