🗂
【Github Actions】AWS環境へのTerraformのCI/CD
はじめに
Terraformを使用したInfrastructure as Code (IaC)は、効率的で再現性がありますが、CI/CDパイプラインを導入することで開発およびデプロイプロセスを更に自動化できます。この記事では、GitHub Actionsを使用してTerraformのCI/CDを構築する手順について解説します。
事前準備
-
【GitHub Actions】 OIDC で AWS 認証を行う
- terraformの使い方などは解説していないので、下記の記事がわかりやすくまとめれていたので、必要に応じて確認下さい。
Terraformの基本的な使い方
- terraformの使い方などは解説していないので、下記の記事がわかりやすくまとめれていたので、必要に応じて確認下さい。
ハンズオン
- 実際にTerraformを使用したcicdを構築していきます。
- .github/workflows/terraform.ymlというファイルを作成し、以下の内容で作成します。
- ブランチ名は任意のブランチに変更してください
- AWS_ROLE_ARNはアシュームロールするロールarnに変更してください。
- TF_VERSIONは使用したいterraformのバージョンに変更してください。
- AWS_DEFAULT_REGIONは利用しているリージョン名に変更してください。
- 作成したら、対象のリポジトリにpushして問題無く動作するか確認してください。
name: terraform cicd test
# cicdを実行したブランチを指定
on:
push:
branches:
- ブランチ名
env:
AWS_ROLE_ARN: ロールarn
TF_VERSION: 1.5.1
AWS_DEFAULT_REGION: 利用リージョン
# AWS認証(OIDC)で必要な権限
permissions:
id-token: write
contents: read
jobs:
aws-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout branch
- uses: actions/checkout@v3
# AWS認証(OIDC)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ${{ env.AWS_DEFAULT_REGION }}
role-to-assume: ${{ env.AWS_ROLE_ARN }}
# Terraform準備
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: ${{ env.TF_VERSION }}
### フォーマット修正箇所をチェック
- name: Terraform fmt
id: fmt
run: terraform fmt -check
# 初期化
- name: Terraform init
run: terraform init
# dry run 実行
- name: Terraform Plan
run: terraform plan -out=tfplan
# deploy 実行
- name: Terraform apply
run: terraform apply -auto-approve
発展
- 本番環境などでは、Terraform Plan実行の実行結果を見てdeployを動かしたい場合があると思います。そのような時には、GitHubで下記のような設定を行うことで、実現可能です。
Discussion