Terraform Cloud は、VCS 連携でトリガーされるリモート実行、ワークスペース単位の状態管理と権限制御、ポリシー/コスト推定/Run Tasks などのガードレールを提供します。
この記事では、VCS・Runs・ワークスペースにフォーカスし、設計の勘所と試験で問われやすいポイントを実例と併せて解説します。
Terraform Cloud の中核は「ワークスペース」で、各ワークスペースは単一の Terraform ステートと設定を持ちます。VCS と紐付けると、ブランチ更新や PR に応じて Run が自動生成され、Plan → (ポリシー/コスト) → Apply という流れで実行されます。
リモート実行は Terraform Cloud のマネージド実行環境またはエージェントを用い、結果はワークスペースに記録されます。PR 上では推測プラン (speculative plan) が実行され、ステート変更は行われません。
Terraform Cloud の論理アーキテクチャ (VCS → Workspace → Run)
VCS 連携前提のリポジトリ構成例 (モノレポ)
repo-root/
├── envs/
│ ├── prod/network/ # Workspace: prod-network
│ └── staging/network/ # Workspace: stg-network
└── modules/
└── vpc/
ワークスペースは環境や責務で分けるのが基本です。例えば prod/staging ごと、あるいはコンポーネント (network/app/db) ごとに分離します。モノレポでは working directory を使い、マルチレポでは各リポジトリを 1:1 で紐付けると管理しやすくなります。
VCS 連携では、対象ブランチとワーキングディレクトリを明確にし、不要な変更で Run を発火させないようにトリガープレフィックスを設定します。計画的なタグ運用やチーム/プロジェクトの境界に合わせた分離が、権限・監査・可観測性の確保に直結します。
CLI から Terraform Cloud ワークスペースへ接続 (cloud ブロック)
terraform {
cloud {
organization = "acme"
workspaces {
name = "prod-network"
}
}
}
# 以降は通常の Terraform 設定
module "vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
}
Run はワークスペース単位で直列実行され、同一ワークスペースで複数のトリガーが同時に発生するとキューに積まれます。不要な古い Run はキャンセルやディスカードで整理しましょう。
Apply には適切な権限 (通常はワークスペースの書き込み以上) が必要で、Auto apply を有効化していない場合は手動承認が挟まります。PR での推測プランはステートを書き換えないため、誤適用の心配はありませんが、ポリシー/コストのチェック対象にはできます。
Terraform Cloud ワークスペース設定 (tfe プロバイダ例)
provider "tfe" {
hostname = "app.terraform.io"
token = var.tfc_token
}
resource "tfe_workspace" "prod_network" {
name = "prod-network"
organization = "acme"
execution_mode = "remote" # リモート実行
auto_apply = false # 手動承認フロー
}
Terraform Cloud の標準は Remote 実行で、Terraform バイナリとプラグイン、ログ収集を SaaS 側が担います。プライベートネットワーク内のリソースにしか到達できない場合はエージェントを用意し、Terraform Cloud からジョブをプルして実行します。CLI 主導でリモートステートと変数管理のみを使いたい場合は Local 実行 (CLI-driven run) を選びます。
ネットワーク要件、監査要件、実行の再現性のどれを優先するかで選択が変わります。
| モード | 実行場所 | ネットワーク到達性 | 主な用途 |
|---|---|---|---|
| Remote | Terraform Cloud マネージド | 公開到達先または許可済みエンドポイント | 標準運用・小規模〜中規模 |
| Agent | 自社ホストのエージェント | プライベートのみでも可 (アウトバウンドで TFC に接続) | 閉域ネットワーク/厳格な監査 |
| Local | 開発者マシン/CI 上の Terraform | 実行環境依存 | 試行・開発・既存 CI の活用 |
エージェントプールの作成 (tfe プロバイダ例)
resource "tfe_agent_pool" "priv" {
name = "prod-private-pool"
organization = "acme"
}
# 生成されたトークンでエージェントを起動し、ワークスペースの実行モード=agent/プール=上記を割当
Sentinel などのポリシー適用により、Plan 結果から危険な変更をブロックできます。コスト推定は主要プロバイダで概算コストを提示し、しきい値超過を検知します。Run Tasks はサードパーティのセキュリティ/コンプライアンスチェックを Run に組み込みます。
本番系ワークスペースでは、最低限のポリシー (タグ必須、指定リージョン外禁止、サイズ上限など) とコスト上限の組み合わせが実務・試験の双方で重要な論点です。
Sentinel の簡易ポリシー例 (インスタンスタイプ制限)
import "tfplan/v2" as tfplan
main = rule {
all tfplan.resource_changes as rc {
rc.type != "aws_instance" or
(rc.change.after != null and rc.change.after.instance_type not in ["t2.micro"]) # 例: 特定タイプを禁止
}
}
インフラの依存関係がある場合、上流ワークスペースの Apply 成功をトリガーに下流ワークスペースの Plan/Apply を起動できます。これにより疎結合を保ちながら、環境間・コンポーネント間の整合を自動化できます。
モノレポでは working directory とトリガープレフィックスを厳密に設定し、意図しないディレクトリ変更で Run が走らないようにします。マルチレポではリポジトリごとのレビュー/権限/監査を独立させられます。
Run Trigger の作成 (上流の適用後に下流を実行)
resource "tfe_run_trigger" "app_after_network" {
workspace_id = tfe_workspace.app.id # 下流 (起動される側)
sourceable_id = tfe_workspace.network.id # 上流 (トリガー側)
}
Pro
問題 1
VCS 連携された Terraform Cloud ワークスペースで、Pull Request が作成されたときに自動で実行される動作として最も正しいものはどれか。
正解: A
PR 作成時は推測プラン (speculative plan) が実行され、ステートは更新されません。自動適用は行われず、ポリシー評価やコスト推定を組み合わせて可視化することが可能です。
Terraform Cloud と OSS 版 Terraform の違いは何ですか?
Terraform Cloud はリモート実行、ステート管理、VCS 連携、ポリシー/コスト推定、Run Tasks、アクセス制御などを提供する SaaS です。OSS はローカル/CI 上で実行し、状態管理・権限制御を自前で用意する必要があります。
VCS を使わずに Terraform Cloud を利用できますか?
可能です。API や CLI (Local 実行) で Run を起動し、ステートと変数管理だけを Terraform Cloud に任せる構成が取れます。
ブランチごとにステートを分けられますか?
推奨はワークスペース単位の分離です。ブランチ名で動的にステートを分けるより、環境/責務ごとにワークスペースを作成し、必要に応じて working directory とトリガー設定でブランチ運用を補完します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...