前書き
Terraformは、インフラストラクチャをコードとして管理するための強力なツールです。これをGitHubのCI/CDパイプラインと組み合わせることで、インフラの変更を自動的にテストし、適用するプロセスを構築できます。本記事では、Terraformコードを作成し、GitHub Actionsを使用してCI/CDを設定する手順と、定義ファイルのサンプルコードを紹介します。
前提条件
・GitHubリポジトリが作成されていること
・Terraformがローカル環境にインストールされていること
・デプロイ先のクラウドプロバイダー(例:AWS、GCP)の認証情報が取得済みであること
ステップ1: Terraformコードの作成
まず、Terraformを使用して管理したいインフラストラクチャのコードを作成します。以下は、AWS上にS3バケットを作成するシンプルな例です。
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "example" {
bucket = "my-unique-bucket-name"
acl = "private"
}
このコードは、ap-northeast-1リージョンにプライベートなS3バケットを作成します。
ステップ2: GitHubリポジトリへのプッシュ
作成したTerraformコードをGitHubリポジトリにプッシュします。リポジトリのルートディレクトリに.github/workflowsディレクトリを作成し、ここに後述のワークフローファイルを配置します。
ステップ3: GitHub Actionsワークフローの設定
GitHub Actionsを使用して、Terraformのplanとapplyを自動化するワークフローを設定します。以下のYAMLファイルを.github/workflows/terraform.ymlとして作成します。
name: Terraform CI/CD
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- name: code check
uses: actions/checkout@v2
- name: Terraform install
uses: hashicorp/setup-terraform@v1
- name: Terraform init
run: terraform init
- name: Terraform fmt check
run: terraform fmt -check
- name: Terraform plan
if: github.event_name == 'pull_request'
run: terraform plan
- name: Terraform apply
if: github.event_name == 'push'
run: terraform apply -auto-approve
このワークフローは、プルリクエスト時にterraform planを実行し、mainブランチへのプッシュ時にterraform applyを自動的に実行します。
ステップ4: クラウドプロバイダーの認証設定
Terraformがクラウドプロバイダーにアクセスするための認証情報をGitHub Actionsに設定する必要があります。例えば、AWSの場合、以下のようにAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYをGitHubのシークレットとして設定し、ワークフロー内で使用します。
- name: AWS認証情報の設定
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
これにより、GitHub Actions内でAWSへの認証が可能となります。
ステップ5: ワークフローのテスト
設定が完了したら、プルリクエストを作成してterraform planが実行されることを確認し、mainブランチにマージしてterraform applyが実行されることを確認します。これにより、インフラストラクチャの変更が自動的に適用されることを検証できます。
まとめ
本記事では、Terraformコードを作成し、GitHub Actionsを使用してCI/CDパイプラインを構築する手順を紹介しました。この設定により、インフラストラクチャの変更を自動的にテストし、適用するプロセスを実現できます。さらに詳細な設定やベストプラクティスについては、以下の参考記事もご参照ください。
・ Terraform+GitHubActionsでGoogleCloudのCI/CD構築入門
・ The complete CI/CD solution
これらの記事も参考にしながら、ご自身のプロジェクトに適したCI/CDパイプラインを構築してみましょう!