Terraform Cloud vs GitHub Actions — どちらで運用すべきか

1. 概要

  • Terraform CloudとGitHub Actionsの役割の違い
  • どちらを選ぶべきか判断するための比較軸
  • チーム規模・インフラ規模別の推奨構成
  • 両者を組み合わせるハイブリッド構成

Terraform CloudはHashiCorpが提供するTerraform専用のSaaSプラットフォームです。一方GitHub ActionsはCI/CDの汎用ツールです。「TerraformをどこでどうCI/CDするか」という問いに対して、多くのチームがこの2択で悩みます。


2. 機能比較

比較軸Terraform CloudGitHub Actions
State管理組み込み(リモートバックエンド)別途S3+DynamoDB等が必要
Secrets管理Workspace変数として管理GitHub Secrets
plan/applyの実行環境Terraform Cloud内(管理不要)セルフホストRunnerまたはGitHub管理Runner
PRへのplan結果表示自動(VCS連携で標準機能)サードパーティAction(tfcmt等)が必要
ポリシー制御Sentinel(有料プラン)OPA/Conftest等を自前で組み込む
コスト無料〜$20/ユーザー/月(Plus)GitHub無料枠あり(分数課金)
セットアップ難度低(GUIでVCS連携するだけ)中(YAMLワークフロー設計が必要)
カスタマイズ性低(Terraform専用)高(任意のステップを追加可能)

3. Terraform Cloudを選ぶべきケース

# Terraform Cloudを使う場合、backendを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"
}

Terraform Cloudが向いているケース:

  • Terraform専用のプラットフォームが欲しい(State・シークレット・実行環境を一括管理したい)
  • インフラチームがGitHub ActionsのYAML設計を担当できるエンジニアを確保しにくい
  • PRベースのplan確認ワークフローをすぐに使いたい(VCS連携で標準機能)
  • 監査ログ・アクセス制御をTerraformに特化した形で管理したい

4. GitHub Actionsを選ぶべきケース

# .github/workflows/terraform.yml
name: Terraform CI/CD

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions:
  id-token: write
  contents: read

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configure AWS credentials (OIDC)
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: ap-northeast-1

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: "~> 1.9"

      - name: Terraform Init
        run: terraform init

      - name: Terraform Plan
        run: terraform plan -no-color
        if: github.event_name == 'pull_request'

      - name: Terraform Apply
        run: terraform apply -auto-approve
        if: github.ref == 'refs/heads/main' && github.event_name == 'push'

GitHub Actionsが向いているケース:

  • すでにGitHub ActionsでアプリのCI/CDを運用しており、インフラも同じプラットフォームで統一したい
  • Terraform以外のツール(terraform-docs・tfsec・Checkov等)を柔軟に組み合わせたい
  • セルフホストRunnerでオンプレ環境やVPC内リソースへアクセスする必要がある
  • コストを最小化したい(GitHub無料枠内で収まるスモールチーム)

5. ハイブリッド構成(両方使う)

# GitHub ActionsからTerraform Cloudのrunをトリガーする
- name: Trigger Terraform Cloud Run
  uses: hashicorp/tfc-workflows-github/actions/create-run@v1
  with:
    workspace: production
    configuration_version: ${{ steps.upload.outputs.configuration_version_id }}

State管理はTerraform Cloud、ワークフロー制御はGitHub Actionsという組み合わせも一般的です。GitHub ActionsでコードチェックやDockerビルドを行い、Terraformの実行だけTerraform Cloudに委ねるパターンです。


6. チーム規模別推奨

チーム規模推奨理由
1〜5人GitHub Actionsセットアップが軽量、Terraform Cloud無料枠でも可
5〜20人Terraform Cloud(Free〜Plus)State管理とアクセス制御を早めに整備
20人以上Terraform Cloud(Business)Sentinelポリシー・監査ログ・SSO必須
オンプレ環境ありGitHub Actions + セルフホストRunner or Terraform Cloud AgentVPC内リソースへのアクセスが必要

7. 関連記事


8. まとめ

  • Terraform Cloudは「State・シークレット・実行環境の一括管理」が強み。設定が最小限で済む
  • GitHub Actionsは「柔軟なカスタマイズ」が強み。既存CI/CDとの統合が容易
  • スモールチームはGitHub Actions、成長するチームはTerraform Cloudへ段階的に移行するパターンが多い
  • 両者を組み合わせるハイブリッド構成も有効(State管理はTF Cloud、ワークフローはGHA)
  • 最終的な選択基準は「チームのYAML設計力」と「State/シークレット管理をどこで一元化するか」

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