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

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

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

yhamano

July 26, 2021
Tweet

More Decks by yhamano

Other Decks in Technology

Transcript

  1. Terraform実行環境
 • ローカルPC
 ◦ ローカルPCからterraform CLIを実行
 ◦ 柔軟性は高い
 ◦ 実環境とリポジトリの内容がズレる


    • CI/CDサービス(CircleCI, Code Build...)
 ◦ PRの作成/マージでterraform CLIを実行
 ◦ 実環境とリポジトリの内容が同一で安心
 ◦ 自動化によるコスト削減
 ◦ ヒューマンエラーの撲滅
 ◦ パイプラインの構築が必要

  2. Terraform実行環境
 • ローカルPC
 ◦ ローカルPCからterraform CLIを実行
 ◦ 柔軟性は高い
 ◦ 実環境とリポジトリの内容がズレる


    • CI/CDサービス(CircleCI, Code Build...)
 ◦ PRの作成/マージでterraform CLIを実行
 ◦ 実環境とリポジトリの内容が同一で安心
 ◦ 自動化によるコスト削減
 ◦ ヒューマンエラーの撲滅
 ◦ パイプラインの構築が必要
 本番環境に適用していく場合はこちらを選択していきたい
  3. 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
  4. 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

  5. 数ヶ月運用してみて
 • 新機能/新サービスをリードタイム無しに積極的に活用できる ようになった
 • version upによるplan結果差分発生は1ヶ月に1回程度
 ◦ Terraform本体とproviderでの利用のみ
 •

    plan結果差分無しの時の標準出力が変更になり、自動マージ されないことがあった
 ◦ planのoptionに-detailed-exitcodeを付与することでplan結果差分 のありなしで終了コードが変わる