経緯
実務でTerraformのCI/CDを管理する際にたまに遭遇するのが、$ terraform planまでは自動実行したいが、applyに関してはplan結果を確認後、チームメンバーで集まって皆で実行したいという場面。
Reviewer一人に責任が集中することがなく、より万全な状態でapplyに臨むことができる。
要はapplyのみ自動で実行せず、手動で実行できる。
その際便利な機能にworkflow_dispatchがある。
使い方
on: workflow_dispatch
と記述するだけ。

使用したyaml
- planを実行するもの
name: Terraform plan
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
on:
push:
branches:
- main
jobs:
ci:
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{secrets.ASSUME_ROLE_ARN}}
aws-region: ap-northeast-1
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.5.2
- name: Terraform Init
run: terraform -chdir=./projects/dev-jp/prd init
- name: Terraform Plan
run: terraform -chdir=./projects/dev-jp/prd plan
- applyを実行するもの
name: Terraform apply
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
on:
workflow_dispatch:
jobs:
apply:
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{secrets.ASSUME_ROLE_ARN}}
aws-region: ap-northeast-1
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.5.2
- name: Terraform Init
run: terraform -chdir=./projects/dev-jp/prd init
- name: Terraform Apply
run: terraform -chdir=./projects/dev-jp/prd apply -auto-approve
挙動
それぞれのワークフローが独立して動作する。
まずはplanの実行。

次にapplyの実行。
コンソール右上に「Run workflow」というボタンがあるためこれをクリック。

ブランチを選択するモーダルが出現するため再度「Run workflow」というボタンをクリックすると、applyが実行される。


