GitHub ActionsによるTerraformの自動化
こんにちは。NOBORIの村田です。
医療機関向けのクラウドサービスの設計開発を行っています。
その中でGitHub ActionsとTerraformを使ってインフラ構築の自動化を行ったためその紹介を行いたいと思います。
※過去にTerraformに関する記事も書いたので、よければそちらも参照下さい
やりたいこと
・Pull Requestの作成時にterraform fmtを実行し、差分があれば失敗させる
・Pull Requestの作成時にterraform planを実行し、コメントに結果を表示する
・Pull Requestをマージした際にterraform applyを実行し、変更を反映する
Pull Request作成時のワークフロー
・PR作成時にGitHub Actionsを実行する
name: plan
on:
pull_request:
branches: [master]
・Jobの実行環境の設定
jobs:
terraform:
name: Terraform Plan
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v2
・AWSのアクセスキー等を設定
- name: configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
・terraformコマンドをインストール
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.0.0
・terraform fmt/validでテンプレートファイルのフォーマットチェック及びvalidationを行う
・チェックに失敗した場合、Jobをエラーにする
- name: Terraform Format
run: terraform fmt -recursive -check
- name: Terraform Validation
working-directory: ./
run: |
terraform init
terraform workspace select stg
terraform validate
terraform plan -no-color
・terraform planを実行
・-no-colorを指定しないと、後続のstepでPRにコメントする際に表示がおかしくなる
- name: Terraform Plan
id: plan
working-directory: ./
run: |
terraform plan -no-color
・terraform planの結果をPRのコメントを投稿する
- name: Comment
uses: actions/github-script@v3.0.0
env:
PLAN: "terraform\n${{ steps.plan.outputs.stdout }}"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const output = `
#### Terraform Plan: \`${{ steps.plan.outcome }}\`
<details><summary>Show Plan</summary>
\`\`\`${process.env.PLAN}\`\`\`
</details>`;
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
Pull Requestをマージした際のワークフロー
・PRをマージした時にワークフローを実行する
name: apply-staging
on:
pull_request:
branches: [master]
types: [closed]
jobs:
terraform:
name: Terraform Apply
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v2
・AWSのアクセスキー等の設定、terraformコマンドのインストールはplanの時と同様に行います
- name: configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.0.0
・terraform applyを実行する
- name: Terraform Apply
id: apply
working-directory: ./
run: |
terraform init
terraform workspace select stg
terraform apply -auto-approve
おわりに
以上でGithub Actionsの設定は完了です。
aws-actions/configure-aws-credentialやhashicorp/setup-terraformを使うことで簡単にAWS環境の構築を自動化出来ました。
これからも、インフラ構築やアプリケーションのビルドについてGithub Actionsで自動化していきたいと思います。