Slide 1

Slide 1 text

CI/CD環境のTerraform versionを
 最新に保つと幸せになれる
 
 Ops JAWS Meetup#19 勉強会 2021年7月26日(月)


Slide 2

Slide 2 text

おしながき
 ● 自己紹介
 ● Terraform概要
 ● TerraformのCI/CDプロセス
 ● Terraformバージョンアップの必要性と辛み
 ● tfupdateの活用
 ● まとめ


Slide 3

Slide 3 text

Terraform概要
 ● HashiCorp社により開発/提供されているIaCサービス
 ○ HCLと呼ばれる独自の宣言型言語で記述する
 ○ 1000以上のプロバイダに対応している
 ○ Terraformのランタイムや各種プロバイダの利用は無料
 ■ 実行環境は利用者側で用意する必要がある
 ○ Terraform Cloudと呼ばれる実行管理サービスも提供されている


Slide 4

Slide 4 text

2021/06/08


Slide 5

Slide 5 text

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


Slide 6

Slide 6 text

Terraform実行環境
 ● ローカルPC
 ○ ローカルPCからterraform CLIを実行
 ○ 柔軟性は高い
 ○ 実環境とリポジトリの内容がズレる
 ● CI/CDサービス(CircleCI, Code Build...)
 ○ PRの作成/マージでterraform CLIを実行
 ○ 実環境とリポジトリの内容が同一で安心
 ○ 自動化によるコスト削減
 ○ ヒューマンエラーの撲滅
 ○ パイプラインの構築が必要


Slide 7

Slide 7 text

Terraform実行環境
 ● ローカルPC
 ○ ローカルPCからterraform CLIを実行
 ○ 柔軟性は高い
 ○ 実環境とリポジトリの内容がズレる
 ● CI/CDサービス(CircleCI, Code Build...)
 ○ PRの作成/マージでterraform CLIを実行
 ○ 実環境とリポジトリの内容が同一で安心
 ○ 自動化によるコスト削減
 ○ ヒューマンエラーの撲滅
 ○ パイプラインの構築が必要
 本番環境に適用していく場合はこちらを選択していきたい

Slide 8

Slide 8 text

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


Slide 9

Slide 9 text

Terraformの一般的なCI/CDプロセス
 tfファイルをgit push

Slide 10

Slide 10 text

Terraformの一般的なCI/CDプロセス
 PR作成をトリガーに Linterによる静的解析やplan実行を行う

Slide 11

Slide 11 text

Terraformの一般的なCI/CDプロセス
 PRマージをトリガーにapply tfstateを外部ストレージで管理

Slide 12

Slide 12 text

Terraformの一般的なCI/CDプロセス
 本日のメインディッシュ CI/CD環境でのTerraform version管理

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

自動化したい!!!


Slide 15

Slide 15 text

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


Slide 16

Slide 16 text

tfupdate


Slide 17

Slide 17 text

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


Slide 18

Slide 18 text

数ヶ月運用してみて
 ● 新機能/新サービスをリードタイム無しに積極的に活用できる ようになった
 ● version upによるplan結果差分発生は1ヶ月に1回程度
 ○ Terraform本体とproviderでの利用のみ
 ● plan結果差分無しの時の標準出力が変更になり、自動マージ されないことがあった
 ○ planのoptionに-detailed-exitcodeを付与することでplan結果差分 のありなしで終了コードが変わる


Slide 19

Slide 19 text

まとめ
 ● Terraform(IaC全般)を活用する場合は極力CI/CDプロセスを導 入したい
 ● CI/CD環境のTerraform version管理から開放されて幸せにな れた


Slide 20

Slide 20 text

Thank you.