🗂

【Github Actions】AWS環境へのTerraformのCI/CD

2024/02/25に公開

はじめに

Terraformを使用したInfrastructure as Code (IaC)は、効率的で再現性がありますが、CI/CDパイプラインを導入することで開発およびデプロイプロセスを更に自動化できます。この記事では、GitHub Actionsを使用してTerraformのCI/CDを構築する手順について解説します。

事前準備

ハンズオン

  • 実際に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