はじめに

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のリファレンスもありますので参考にしてください。