投稿日
Terraformコードに対するCI/CDパイプライン構成例のご紹介
はじめに
Terraformを使いチームで開発を行うと以下のような課題があります。
- コードの品質、読みやすさにばらつきがでる
- 修正したコードが実行可能なものかわからない
- 修正したコードによる環境への影響がわからない
- PJ独自のポリシーに沿った内容かチェックしないといけない
- コード修正までしたがデプロイを忘れる
上記課題をすべてコードレビューで担保するのはとても大変です。Terraformに限らず、一般的にこのような課題はCI/CDの仕組みを導入し自動化することで解決します。そこで本記事ではGithubActionsを使用したTerraformコードのCI/CDパイプラインの仕組みと構築方法を紹介します。仕組みは以下図のようなものです。プルリクエストを行うとterraform fmtとterraform validateによるコードのチェック、terraform planによる影響確認を行います。また、Open Policy Agentによるポリシーチェックを行い、ポリシーに準拠したTerraformコードか確認します。CIの結果を確認し、問題なければマージします。マージするとterraform applyで環境へのデプロイが行われます。
利用ツールの紹介
setup-terraform
setup-terraformはTerraformの開発元であるHashiCorpが公開しているGitHub Actionsワークフローです。Terraform CLIをGitHub Actionsで使用できるようにするものです。こちらのhashicorp/setup-terraformで公開されています。構成例ではGitHub ActionsでTerraformコマンドを実行する際に使用しています。
Open Policy Agent
Open Policy Agent(略称:OPA)はポリシーをチェックするオープンソースのツールです。ポリシーを定義し、そのポリシーに準拠しているかチェックします。ポリシーはRegoという少し特殊な言語で記述します。OPAはTerraform以外にもK8sマニフェストやDockerfileなどにも対応しています。構成例ではGitHub ActionsでTerraformコードのポリシーチェックをする際に使用しています。
構築方法
こちらのcnc4e/terraform-cicdで構築方法およびワークフローを試すサンプルのコード群を公開しています。簡単なRegoのリファレンスもありますので参考にしてください。