2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Terraform] TerraformとGithub CICDパイプラインの組み合わせ

Posted at

前書き

​Terraformは、インフラストラクチャをコードとして管理するための強力なツールです。​これをGitHubのCI/CDパイプラインと組み合わせることで、インフラの変更を自動的にテストし、適用するプロセスを構築できます。​本記事では、Terraformコードを作成し、GitHub Actionsを使用してCI/CDを設定する手順と、定義ファイルのサンプルコードを紹介します。

前提条件

・GitHubリポジトリが作成されていること
・Terraformがローカル環境にインストールされていること
・デプロイ先のクラウドプロバイダー(例:AWS、GCP)の認証情報が取得済みであること

ステップ1: Terraformコードの作成

まず、Terraformを使用して管理したいインフラストラクチャのコードを作成します。​以下は、AWS上にS3バケットを作成するシンプルな例です。

main.tf
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として作成します。

.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のシークレットとして設定し、ワークフロー内で使用します。​

.github/workflow/terraform.yml
    - 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パイプラインを構築してみましょう!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?