GitHub Actionsが11/13に正式リリースされた。
参加はしていないけど Terraform meetup tokyo #3 で @dehio3 様が以下の発表をされていたそうで、自分は今までローカルでPlan/Applyをやっていたのでこの資料を参考にTerraform × GitHub Actionsをやってみた。
GitHub ActionsのWorkflowを作成
GitHub Actionsで、TerraformのPlanやApplyを実行するためのWorkflowを作成する。
ワークフローとは、GitHubで任意のコードプロジェクトをビルド、テスト、パッケージ、リリース、またはデプロイするためにリポジトリで設定できる、カスタムの自動プロセスです。
Terraformコードが格納されたGitHubリポジトリを選択し、画面上部メニューの「Actions」タブを押下する。 次の画面で、画面上の方にある「Setup Workflow your self」ボタンを押下する。
Workflowの作成画面に遷移し、Workflowをコード化する画面となる。
ここで独自にWorkflowを定義しても良いが、hashicorp社からサンプルのWorkflowのコードが公開されているため、これをほぼそのまま使うこともできる。
この中でactions.yml
をそのまま利用できる。
GitHubからPlanを実行できるようにするために、AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
の環境変数をコードにベタ書きするのではなく、GitHubのSecretsに登録するように変更する。
name: 'Terraform GitHub Actions' on: - pull_request # pull requestが出された時にこのGitHub Actionsを実行する jobs: terraform: name: 'Terraform' runs-on: ubuntu-latest steps: - name: 'Checkout' uses: actions/checkout@master - name: 'Terraform Format' uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.13 tf_actions_subcommand: 'fmt' tf_actions_working_dir: '.' tf_actions_comment: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: 'Terraform Init' uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.13 tf_actions_subcommand: 'init' tf_actions_working_dir: '.' tf_actions_comment: true args: '-var-file="terraform.tfvars"' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: 'Terraform Validate' uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.13 tf_actions_subcommand: 'validate' tf_actions_working_dir: '.' tf_actions_comment: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: 'Terraform Plan' uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.13 tf_actions_subcommand: 'plan' tf_actions_working_dir: '.' tf_actions_comment: true args: '-var-file="terraform.tfvars"' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GitHubへのSecretsの登録
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
をGitHubのSecretsに登録する。
Terraformコードを格納したリポジトリを選択し、画面上のメニューで「Settings」を選択する。 次のページの画面左メニューから「Secrets」を選択する。 Name、Valueの形で入力する必要があるので、形式に沿って入力する。
AWS_ACCESS_KEY_ID | アクセスキーの値 |
AWS_SECRET_ACCESS_KEY | シークレットキーの値 |
Actionsの実行
上述のコードで、pull requestが出された時にActionsを実行するようになっているので、PullReqを出してActions(ここではTerraform plan)が実行されることを確認する。
on: - pull_request
Planが成功すればそのままMergeしてOK。Applyも自動で実行できるかもしれないが、そこまでは試せていないのでわからない。 Planに失敗した場合Terraformコードに問題があることがわかるので、CIをGitHub上だけで完結できて便利になった。
まとめ
GitHub Actionsを使ったTerraform Planの自動実行を、記事に記載した資料を参考に設定してみた。 Workflowを使うことで、GitHub上でTerraformのCI/CDを実装できそうで、とても便利そうだった。