setup-terraform Action で Terraform 実行を簡潔に

HashiCorp から GitHub Actions の setup-terraform Action が登場しました。

github.com

公式ドキュメントはこちら

www.terraform.io

従来は terraform-github-actions が提供されていましたが、こちらは今凍結されています。

github.com

Terraform は init / validate / plan / apply と複数のサブコマンドを実行する必要がありますが、terraform-github-actions は Dockerfile Action のため繰り返し uses: で Action を実行する必要がありました。

setup-terraform は JavaScript Action であり、ワークフロー実行環境に terraform CLI を文字通りセットアップしてくれるので、run: でサブコマンドを自由に実行できます。

blog.kondoumh.com

以前 DigitalOcean の Droplets を作るワークフローを terraform-github-actions で作りました。

blog.kondoumh.com

Action を繰り返し適用しているためかなり冗長でした。setup-terraform に置き換えてみます。

PR 作成時のワークフロー

name: Terraform Plan for droplet

on:
  pull_request:
    types: [opened]

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TF_TOKEN }}
  DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}

jobs:
  terraform:
    name: 'Terraform'
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v2
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1
        with:
          terraform_version: 0.12.24
      - name: 'Terraform Init'
        run: terraform init
      - name: 'Terraform Validate'
        run: terraform validate
      - name: 'Terraform Plan'
        run: terraform plan

PR マージ時のワークフロー

name: Terraform Apply droplet

on:
  pull_request:
    types: [closed]

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TF_TOKEN }}
  DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}

jobs:
  terraform:
    name: 'Terraform'
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v2
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1
        with:
          terraform_version: 0.12.24
      - name: 'Terraform Init'
        run: terraform init
      - name: 'Terraform Apply'
        run: terraform apply -auto-approve
        if: github.event.pull_request.merged == true

かなり簡潔に書けるようになりました。