$30 off During Our Annual Pro Sale. View Details »

~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. ~CircleCIͰTerraformϦϦʔεͷαʔόʔϨεԽ~


    ϥϯαʔζגࣜձࣾ


    ։ൃ෦/ٕज़ج൫ SRE ҆ୡ ྋ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    ΠϯϑϥͷಠࣗϦϦʔεΛܧଓతϦϦʔε΁

    View Slide

  2. ΞδΣϯμ
    • ࣗݾ঺հ


    • ฐࣾࠓ·ͰͷTerraform؅ཧํ๏


    • DeployαʔόʔͰͷ՝୊ͱվળ


    • Terraform։ൃ؀ڥʹ͍ͭͯ


    • CircleCIͰͷϦϦʔεϑϩʔ(Ҏલ)


    • CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ)


    • ·ͱΊ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  3. ࣗݾ঺հ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  4. ࣗݾ঺հ
    • ҆ୡ ྋ(adachin)


    • Lancers/SRE

    2018/5~


    • @adachin0817


    • RVIRUS0817


    • blog.adachin.me


    • wiki.adachin.me


    • ઈࢍݸਓαʔϏε։ൃத
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  5. ฐࣾαʔϏε


    ʹ͍ͭͯ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  6. ฐࣾαʔϏεʹ͍ͭͯ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    (Ұ෦)

    View Slide

  7. ͪͳΈʹ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  8. ݸਓͰCircleCIѪ༻͍ͯ͠·͢🙌
    • ݸਓͷϙʔτϑΥϦΦ(adachin.me)

    ɾࣗಈσϓϩΠ

    ɹɾSSH release


    • ݸਓϒϩά(blog.adachin.me)

    ɾTerraform CI x CD


    • ຖ݄ͷίετ௨஌

    ɾTrigger

    ɹ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  9. ฐࣾࠓ·Ͱͷ
    Terraform؅ཧํ๏
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  10. ฐࣾࠓ·Ͱͷ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

    View Slide

  11. ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    https://blog.adachin.me/archives/11698

    View Slide

  12. DeployαʔόͰͷ


    ՝୊ͱվળ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  13. DeployαʔόʔͰͷ՝୊ͱվળ
    • ϒϥϯνͷ੾Γସ͑Λ๨ΕͯଞͷϦϦʔεʹӨڹ͕ग़Δ


    • 1ਓ͕ґଘͯ͠͠·͏͜ͱͰෳ਺ਓͰͷTerraform։ൃεϐʔυ͕஗ΕΔ


    • TerraformͷόʔδϣϯΞοϓରԠத

    ɾٸʹґཔ͕དྷͯɺόʔδϣϯͷ੾Γସ͑Λ͠ͳ͚Ε͹ͳΒͳ͍


    • ECS Scheduled Taskසൟʹ։ൃϝϯόʔ͔ΒͷϨϏϡʔ

    ɾϦϦʔεͷࡍSREνʔϜͷ޻਺͕͔͔Γద༻࿙Ε͕ଟൃ


    • TerraformΛϩʔΧϧͰద༻͍ͨ͠ͱࢥͬͯ΋..

    ɾΫϨσϯγϟϧͷݖݶ͕ڧա͗ΔͷͰ؅ཧͨ͘͠ͳ͍(࿙ӮͷڪΕ)

    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    Terraformઐ༻ͷ։ൃ؀ڥΛߏஙɺCircleCIͰܧଓతʹϦϦʔε

    View Slide

  14. Terraform


    ։ൃ؀ڥʹ͍ͭͯ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  15. Terraform։ൃ؀ڥʹ͍ͭͯ(partᶃ)
    • ֤ϓϩδΣΫτʹ։ൃ؀ڥΛ༻ҙ


    • ΫϨσϯγϟϧͷ؅ཧํ๏

    ɾAWS KMS

    ɹ1. KMSઐ༻ͷΫϨσϯγϟϧ

    ɹ2. ҉߸Խ͞ΕͨkeyΛίϐʔ

    ɹ3. ίϯςφ಺ʹΫϨσϯγϟϧΛ্ॻ͖Ͱ෮߸͢Δ


    • ηΩϡϦςΟϨϕϧ͕ೋॏʹ

    ɾdocker-compose downʹΑΓ࡟আ͞ΕΔ

    ɾ࿙ӮϦεΫ͸Լ͕Δ

    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  16. Terraform։ൃ؀ڥʹ͍ͭͯ(partᶄ)
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  17. CircleCIͰͷ

    ϦϦʔεϑϩʔ(Ҏલ)
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  18. CircleCIͰͷϦϦʔεϑϩʔ(Ҏલ)
    • masterϚʔδͰterraform applyΛ࣮ࢪ͍͕ͯͨ͠...


    • SREνʔϜ

    ɾTerraformͰσόοάͯͦ͠ͷ··apply


    • ։ൃνʔϜ

    ɾଞͷϓϧϦΫΛϚʔδ


    • AWSଆ͸ݩʹ໭Δˠة͏͘ΠϯγσϯτʹͳΓಘΔ


    • CircleCIͷAPIΛར༻ͯ͠γΣϧͰϦϦʔεΛ࣮૷͕ͨ͠..

    ɾݖݶతʹ։ൃϝϯόʔ͕શһϦϦʔεग़དྷͯ͠·͏ͱ͍͏՝୊͕…

    ɾApprovalͷঝೝͰͷϑϩʔͰӡ༻ͯ͠Έ͕ͨϑϩʔ͕૿͑ͯՙ͕ॏ͍..


    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  19. CircleCIͰͷ

    ϦϦʔεϑϩʔ(ݱࡏ)
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  20. CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ)
    • Orbs

    ɾpath-
    fi
    ltering(ਖ਼نදݱ)


    • masterϚʔδ

    ɾterraformσΟϨΫτϦ഑Լ

    ɾmasterͱͷࠩ෼͕͋Ε͹terraform apply


    • setup: true ͕ඞਢ

    ɾෳ਺ͷwork
    fl
    ow͕ແޮԽʹͳΔ

    ɾsingle work
    fl
    owʹͯ͠෼ׂ͢Δ͜ͱ

    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  21. CircleCIͰͷϦϦʔεϑϩʔ(ݱࡏ)
    • check_terraform_difference


    • ࠩ෼͕ͳ͍ͱ͖ʹmappingʹݕ஌❌

    ɾશͯͷύϥϝʔλ͸defaultͷfalse͕ฦΔ

    ɾechoͰtrueΛฦ͢Α͏ʹ࡞Δඞཁ͕͋Δ


    • terraformσΟϨΫτϦʹࠩ෼͕ͳ͚Ε͹

    ɾcheck_terraform_difference͕ಈ࡞

    ɾࠩ෼͕͋Ε͹terraform apply


    • CircleCI͞ΜվળΛ!!🙏
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  22. ·ͱΊ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  23. ·ͱΊ
    • Deployαʔόʔ͔Βͷ؅ཧΛ୤٫͢Δ͜ͱ͕Ͱ͖ͨ


    • ։ൃ؀ڥͰTerraformͷσόοά͕͠΍͘͢ͳͬͨ


    • TerraformͷϦϦʔεΛ҆શʹαʔόʔϨεͰͷ࣮ݱ͕Ͱ͖ͨ


    • Lancersຊମ΋׬શTerraformԽ͢ΔͨΊͷ४උ΋੔͏͜ͱ͕Ͱ͖ͨ


    • path-
    fi
    ltering

    ϞϊϨϙͰ΋ύε୯ҐͰࣗಈϦϦʔε͢Δ͜ͱ͕Ͱ͖Δ

    LambdaͳͲʹ΋Ԡ༻


    • Terraform OrbsʹҠߦ͍ͨ͠


    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide

  24. ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    https://engineer.blog.lancers.jp/sre/terraform_circleci/

    View Slide

  25. ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24
    https://engineer.blog.lancers.jp/engineer-recruit/

    View Slide

  26. ͝ਗ਼ௌ͋Γ͕ͱ͏
    ͍͟͝·ͨ͠ʂ
    ʲࣗಈԽԿͰ΋LTେձฤʳCircleCI ίϛϡχςΟϛʔτΞοϓ 2021/11/24

    View Slide