Upgrade to Pro — share decks privately, control downloads, hide ads and more …

~CircleCIでTerraformリリースのサーバーレス化~ インフラの独自リリースを継続的リリースへ

adachin0817
November 24, 2021

~CircleCIでTerraformリリースのサーバーレス化~ インフラの独自リリースを継続的リリースへ

https://circleci.connpass.com/event/228801/

【オンライン】【自動化何でもLT大会編】CircleCI コミュニティミートアップの資料になります。

#CircleCIJP

- CircleCI ブログ
https://circleci.com/ja/blog/serverless-terraform-release/

adachin0817

November 24, 2021
Tweet

More Decks by adachin0817

Other Decks in Programming

Transcript

  1. ΞδΣϯμ • ࣗݾ঺հ • ฐࣾࠓ·ͰͷTerraform؅ཧํ๏ • DeployαʔόʔͰͷ՝୊ͱվળ • Terraform։ൃ؀ڥʹ͍ͭͯ •

    CircleCIͰͷϦϦʔεϑϩʔ(Ҏલ) • CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ) • ·ͱΊ ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  2. ࣗݾ঺հ • ҆ୡ ྋ(adachin) • Lancers/SRE 
 2018/5~ • @adachin0817

    • RVIRUS0817 • blog.adachin.me • wiki.adachin.me • ઈࢍݸਓαʔϏε։ൃத ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  3. ݸਓͰCircleCIѪ༻͍ͯ͠·͢🙌 • ݸਓͷϙʔτϑΥϦΦ(adachin.me) 
 ɾࣗಈσϓϩΠ 
 ɹɾSSH release • ݸਓϒϩά(blog.adachin.me)

    
 ɾTerraform CI x CD • ຖ݄ͷίετ௨஌ 
 ɾTrigger 
 ɹ ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  4. ฐࣾࠓ·ͰͷTerraform؅ཧํ๏ • Deployαʔόʔ 
 ɾ֤αʔόʔଆͷσϓϩΠ(Ansible/Terraform) 
 ɾΞϓϦέʔγϣϯͷσϓϩΠͱ༷ʑͳ༻్ͱͯ͠ར༻ • Terraform CI

    
 ɾpush͢Δ౓ʹvalidate,plan͕૸ΔΑ͏ʹ 
 ɾTerraform Cloud͸ར༻͍ͯ͠ͳ͍ • Lancers 
 ɾAmazon Linux 2 (Arm)ʹҠߦޙ 
 ɾੑೳධՁΛECS/Fargate(Arm)ͱൺ΂ͯҠߦ 
 ɾDeployαʔόʔ͸ഇࢭ͢Δ༧ఆ 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  5. DeployαʔόʔͰͷ՝୊ͱվળ • ϒϥϯνͷ੾Γସ͑Λ๨ΕͯଞͷϦϦʔεʹӨڹ͕ग़Δ • 1ਓ͕ґଘͯ͠͠·͏͜ͱͰෳ਺ਓͰͷTerraform։ൃεϐʔυ͕஗ΕΔ • TerraformͷόʔδϣϯΞοϓରԠத 
 ɾٸʹґཔ͕དྷͯɺόʔδϣϯͷ੾Γସ͑Λ͠ͳ͚Ε͹ͳΒͳ͍ •

    ECS Scheduled Taskසൟʹ։ൃϝϯόʔ͔ΒͷϨϏϡʔ 
 ɾϦϦʔεͷࡍSREνʔϜͷ޻਺͕͔͔Γద༻࿙Ε͕ଟൃ • TerraformΛϩʔΧϧͰద༻͍ͨ͠ͱࢥͬͯ΋.. 
 ɾΫϨσϯγϟϧͷݖݶ͕ڧա͗ΔͷͰ؅ཧͨ͘͠ͳ͍(࿙ӮͷڪΕ) 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24 Terraformઐ༻ͷ։ൃ؀ڥΛߏஙɺCircleCIͰܧଓతʹϦϦʔε
  6. Terraform։ൃ؀ڥʹ͍ͭͯ(partᶃ) • ֤ϓϩδΣΫτʹ։ൃ؀ڥΛ༻ҙ • ΫϨσϯγϟϧͷ؅ཧํ๏ 
 ɾAWS KMS 
 ɹ1.

    KMSઐ༻ͷΫϨσϯγϟϧ 
 ɹ2. ҉߸Խ͞ΕͨkeyΛίϐʔ 
 ɹ3. ίϯςφ಺ʹΫϨσϯγϟϧΛ্ॻ͖Ͱ෮߸͢Δ • ηΩϡϦςΟϨϕϧ͕ೋॏʹ 
 ɾdocker-compose downʹΑΓ࡟আ͞ΕΔ 
 ɾ࿙ӮϦεΫ͸Լ͕Δ 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  7. CircleCIͰͷϦϦʔεϑϩʔ(Ҏલ) • masterϚʔδͰterraform applyΛ࣮ࢪ͍͕ͯͨ͠... • SREνʔϜ 
 ɾTerraformͰσόοάͯͦ͠ͷ··apply • ։ൃνʔϜ

    
 ɾଞͷϓϧϦΫΛϚʔδ • AWSଆ͸ݩʹ໭Δˠة͏͘ΠϯγσϯτʹͳΓಘΔ • CircleCIͷAPIΛར༻ͯ͠γΣϧͰϦϦʔεΛ࣮૷͕ͨ͠.. 
 ɾݖݶతʹ։ൃϝϯόʔ͕શһϦϦʔεग़དྷͯ͠·͏ͱ͍͏՝୊͕… 
 ɾApprovalͷঝೝͰͷϑϩʔͰӡ༻ͯ͠Έ͕ͨϑϩʔ͕૿͑ͯՙ͕ॏ͍.. 
 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  8. CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ) • Orbs 
 ɾpath- fi ltering(ਖ਼نදݱ) • masterϚʔδ 


    ɾterraformσΟϨΫτϦ഑Լ 
 ɾmasterͱͷࠩ෼͕͋Ε͹terraform apply • setup: true ͕ඞਢ 
 ɾෳ਺ͷwork fl ow͕ແޮԽʹͳΔ 
 ɾsingle work fl owʹͯ͠෼ׂ͢Δ͜ͱ 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  9. CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ) • check_terraform_difference • ࠩ෼͕ͳ͍ͱ͖ʹmappingʹݕ஌❌ 
 ɾશͯͷύϥϝʔλ͸defaultͷfalse͕ฦΔ 
 ɾechoͰtrueΛฦ͢Α͏ʹ࡞Δඞཁ͕͋Δ •

    terraformσΟϨΫτϦʹࠩ෼͕ͳ͚Ε͹ 
 ɾcheck_terraform_difference͕ಈ࡞ 
 ɾࠩ෼͕͋Ε͹terraform apply • CircleCI͞ΜվળΛ!!🙏 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
  10. ·ͱΊ • Deployαʔόʔ͔Βͷ؅ཧΛ୤٫͢Δ͜ͱ͕Ͱ͖ͨ • ։ൃ؀ڥͰTerraformͷσόοά͕͠΍͘͢ͳͬͨ • TerraformͷϦϦʔεΛ҆શʹαʔόʔϨεͰͷ࣮ݱ͕Ͱ͖ͨ • Lancersຊମ΋׬શTerraformԽ͢ΔͨΊͷ४උ΋੔͏͜ͱ͕Ͱ͖ͨ •

    path- fi ltering 
 ϞϊϨϙͰ΋ύε୯ҐͰࣗಈϦϦʔε͢Δ͜ͱ͕Ͱ͖Δ 
 LambdaͳͲʹ΋Ԡ༻ • Terraform OrbsʹҠߦ͍ͨ͠ 
 
 ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24