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

CI/CD環境のTerraform versionを最新に保つと幸せになれる

yhamano
July 26, 2021

CI/CD環境のTerraform versionを最新に保つと幸せになれる

yhamano

July 26, 2021
Tweet

More Decks by yhamano

Other Decks in Technology

Transcript

  1. CI/CD環境のTerraform versionを

    最新に保つと幸せになれる


    Ops JAWS Meetup#19 勉強会 2021年7月26日(月)


    View Slide

  2. おしながき

    ● 自己紹介

    ● Terraform概要

    ● TerraformのCI/CDプロセス

    ● Terraformバージョンアップの必要性と辛み

    ● tfupdateの活用

    ● まとめ


    View Slide

  3. Terraform概要

    ● HashiCorp社により開発/提供されているIaCサービス

    ○ HCLと呼ばれる独自の宣言型言語で記述する

    ○ 1000以上のプロバイダに対応している

    ○ Terraformのランタイムや各種プロバイダの利用は無料

    ■ 実行環境は利用者側で用意する必要がある

    ○ Terraform Cloudと呼ばれる実行管理サービスも提供されている


    View Slide

  4. 2021/06/08


    View Slide

  5. v1.0.0がリリースされ遂にGA🎉


    View Slide

  6. Terraform実行環境

    ● ローカルPC

    ○ ローカルPCからterraform CLIを実行

    ○ 柔軟性は高い

    ○ 実環境とリポジトリの内容がズレる

    ● CI/CDサービス(CircleCI, Code Build...)

    ○ PRの作成/マージでterraform CLIを実行

    ○ 実環境とリポジトリの内容が同一で安心

    ○ 自動化によるコスト削減

    ○ ヒューマンエラーの撲滅

    ○ パイプラインの構築が必要


    View Slide

  7. Terraform実行環境

    ● ローカルPC

    ○ ローカルPCからterraform CLIを実行

    ○ 柔軟性は高い

    ○ 実環境とリポジトリの内容がズレる

    ● CI/CDサービス(CircleCI, Code Build...)

    ○ PRの作成/マージでterraform CLIを実行

    ○ 実環境とリポジトリの内容が同一で安心

    ○ 自動化によるコスト削減

    ○ ヒューマンエラーの撲滅

    ○ パイプラインの構築が必要

    本番環境に適用していく場合はこちらを選択していきたい

    View Slide

  8. Terraformの一般的なCI/CDプロセス


    View Slide

  9. Terraformの一般的なCI/CDプロセス

    tfファイルをgit push

    View Slide

  10. Terraformの一般的なCI/CDプロセス

    PR作成をトリガーに
    Linterによる静的解析やplan実行を行う

    View Slide

  11. Terraformの一般的なCI/CDプロセス

    PRマージをトリガーにapply
    tfstateを外部ストレージで管理

    View Slide

  12. Terraformの一般的なCI/CDプロセス

    本日のメインディッシュ
    CI/CD環境でのTerraform version管理

    View Slide

  13. Terraform version

    ● 結構な頻度でリリースがあるが、手動でのversion up対応は辛い

    ○ tfファイルで管理しているrequired_versionの書き換え 

    ○ CI/CD環境で利用するTerraform本体のversion up対応 

    ○ 既存リソースに影響が無いことをplanで確認 

    ○ tfstateを複数管理している場合は各ディレクトリに対して対応する必要がある 

    ● 一方、新機能/新サービスをterraform管理したい場合はversion upする必要がある

    version指定がある
    コンポーネント
    概要 例
    Terraform本体 Terraform自体のコアな処理を担当 -
    provider 各プロバイダに依存した処理を担当 hashicorp/terraform-provider-aws
    hashicorp/terraform-provider-google
    module resource定義のテンプレート terraform-aws-modules/terraform-aws-vpc
    terraform-aws-modules/terraform-aws-iam

    View Slide

  14. 自動化したい!!!


    View Slide

  15. tfupdate

    ● 指定したディレクトリ配下もしくはファイルのversion記載部分を、取得したversionで
    再帰的に一括更新してくれる

    ○ tfupdate terraform -v 1.0.0 main.tf で実行すればmain.tf内のversion記載部分を
    1.0.0に更新してくれる

    ● CI/CD等のスケジュールジョブ内で利用することで、最新版のリリースがあれば
    version up用のPRを自動作成することが可能

    ○ CircleCIであればexampleのconfig.ymlやOrbが公開されている

    ■ https://github.com/minamijoyo/tfupdate-circleci-example 

    ■ https://circleci.com/developer/orbs/orb/masutaka/tfupdate 

    ○ exampleはPR作成までだが、plan結果に差分が無ければ自動マージとかもで
    きちゃう!

    ● 詳細はQiitaに公開されています

    https://github.com/minamijoyo/tfupdate


    View Slide

  16. tfupdate


    View Slide

  17. 朝起きたら最新versionになってる幸せ😍


    View Slide

  18. 数ヶ月運用してみて

    ● 新機能/新サービスをリードタイム無しに積極的に活用できる
    ようになった

    ● version upによるplan結果差分発生は1ヶ月に1回程度

    ○ Terraform本体とproviderでの利用のみ

    ● plan結果差分無しの時の標準出力が変更になり、自動マージ
    されないことがあった

    ○ planのoptionに-detailed-exitcodeを付与することでplan結果差分
    のありなしで終了コードが変わる


    View Slide

  19. まとめ

    ● Terraform(IaC全般)を活用する場合は極力CI/CDプロセスを導
    入したい

    ● CI/CD環境のTerraform version管理から開放されて幸せにな
    れた


    View Slide

  20. Thank you.


    View Slide