Terraform CloudのVCS連携設定ガイド

1. 概要

  • Terraform CloudのVCS連携とは何か
  • 対応VCS(GitHub / GitLab / Bitbucket / Azure DevOps)
  • VCS連携のセットアップ手順
  • PRでのplan自動実行とmainマージ後のapply設定
  • ブランチ設定とトリガーのカスタマイズ

Terraform CloudのVCS連携を設定すると、GitHubなどへのpushやPRをトリガーにterraform plan/applyが自動実行されます。コードレビューとインフラ変更が一体化した運用が可能になります。


2. VCS連携の仕組み

GitHub PR作成 / push
  │ Webhook
  ↓
Terraform Cloud
  │ Runをキュー
  ↓
Remote Runner
  │ terraform plan(PRの場合)
  │ terraform apply(mainマージ後)
  ↓
PRコメントに結果を投稿

3. セットアップ手順

Step 1: VCSプロバイダーを登録

Terraform Cloud → Settings → Version Control → Add a VCS Provider → GitHub.com

GitHub OAuth Appを作成し、Client IDとSecretをTerraform Cloudに登録します。

Step 2: Workspaceを作成

Workspace → New Workspace → Version control workflow → リポジトリを選択

Step 3: Workspaceの設定

  • Working Directory(Terraformファイルのディレクトリ)
  • Terraform Version
  • Apply Method(Auto Apply / Manual Apply)
  • VCS Branch(追跡するブランチ。デフォルトはmain)

4. Terraform側のコード

# VCS連携でTerraform Cloudを使う場合、cloudブロックを設定
terraform {
  required_version = ">= 1.9"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }

  cloud {
    organization = "my-org"
    workspaces {
      name = "production"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

variable "environment" {
  description = "環境名"
  type        = string
  default     = "dev"
}

data "aws_ami" "amazon_linux_2023" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "name"
    values = ["al2023-ami-*-x86_64"]
  }
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.amazon_linux_2023.id
  instance_type = "t3.micro"

  root_block_device {
    volume_size = 20
    volume_type = "gp3"
    encrypted   = true
  }

  tags = {
    Name        = "${var.environment}-web"
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}

5. Auto Apply vs Manual Apply

設定動作
Auto Applyplanが成功すると自動でapplyが実行される
Manual Applyplanの後、UI上で確認してからapplyをクリックする

推奨: 本番環境はManual Apply。開発環境はAuto Applyで効率化できます。


6. トリガーのカスタマイズ

Workspace → Settings → Version Control
  ├─ VCS Branch: main(追跡ブランチ)
  ├─ Automatic Run Triggering: ✅
  ├─ Trigger Patterns: 特定ディレクトリの変更のみに制限可能
  │   例: environments/production/**
  └─ Include submodules: Git submoduleも追跡する場合

monorepoで特定ディレクトリの変更だけをトリガーにしたい場合はTrigger Patternsを使います。


7. PRでのplan結果確認

VCS連携を設定すると、PRにTerraform CloudのRunへのリンクとplan結果のサマリーが自動投稿されます。

PR:
  ✅ Terraform Cloud: Plan has 2 changes to apply.
  [View run in Terraform Cloud →]

8. 関連記事


9. まとめ

  • VCS連携はTerraform CloudのWorkspace設定からGitHub OAuthアプリを登録して開始
  • PR作成でterraform planが自動実行されPRにサマリーが投稿される
  • mainマージ後にterraform applyが実行される(Auto Apply時は自動)
  • 本番環境はManual Apply推奨(人間が最終確認してからapplyを実行)
  • monorepoでは Trigger Patterns で変更があったディレクトリのみをトリガーに絞れる

対象バージョン: Terraform Cloud (2024) 公式ドキュメント: https://developer.hashicorp.com/terraform/cloud-docs/vcs