本稿は Terraform Cloud のバックエンド(cloud ブロック)を使い、ワークスペースとコードベースを無理なく連携させる方法を、Associate / Pro レベルの出題傾向を踏まえて整理します。
ローカルやS3等との違い、CLI/VCS駆動の使い分け、変数と権限のベストプラクティス、トラブル時の確認観点まで、試験と実務の両面で迷いがちな点を具体化します。
Terraform Cloud のバックエンドは、state の保管・ロック、実行の記録、ポリシー適用、RBAC をサービス側で担保します。ローカルバックエンドと比べ、並行実行時の衝突や state 配布の手間が抑えられ、監査性が上がります。
Terraform Cloud の最小単位はワークスペースです。1ワークスペース = 1 state と考え、コードベース(ディレクトリ)をワークスペースに結び付けます。cloud ブロックで organization と対象ワークスペース名を明示しておくと、誤った state へ apply する事故を防げます。
最も衝突が少ないのは「ディレクトリ(スタック)単位で cloud.workspaces.name を固定」する方法です。これにより terraform apply が常に同じワークスペースへ向かい、意図しない state の上書きを避けられます。
Terraform Cloud の実行はワークスペースに設定した Terraform バージョンで行われます。ローカル CLI はジョブの提出役です。ローカルとサービス側でバージョン差があっても基本的に動作しますが、言語機能差によるパースエラーを避けるため、極端な乖離は避けましょう。
cloud ブロックとリモート実行、リモート state 参照の例
# terraform/main.tf
terraform {
cloud {
organization = "acme"
workspaces {
name = "network-prod"
}
# TFE を使う場合:
# hostname = "tfe.example.com"
}
# Terraform CLI はジョブを提出。実行はワークスペースに設定されたバージョンで行われる。
}
provider "aws" {
region = var.region
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "core-prod"
cidr = "10.0.0.0/16"
}
# 別ワークスペースの state を安全に参照(読み取り専用)
data "terraform_remote_state" "shared" {
backend = "remote"
config = {
organization = "acme"
workspaces = {
name = "shared-services-prod"
}
}
}
output "shared_vpc_id" {
value = data.terraform_remote_state.shared.outputs.vpc_id
}
誤適用を減らすには、環境やリージョン、プロダクト軸でワークスペースを分けます。1 ワークスペースが管理する範囲は「変更単位」で決めると保守しやすく、計画の可視性も上がります。
モノレポ運用では、ディレクトリ構造とワークスペース名規約を一致させると、VCS 駆動の自動トリガ設定が容易になります。
Terraform Cloud にはワークスペース変数(Terraform 変数と環境変数)と、組織またはプロジェクトにまたがる Variable Set があります。共通値は Variable Set、差分はワークスペース側に置くと管理が単純になります。
機密値は Sensitive として登録し、.tfvars やVCSには置かないのが原則です。プロバイダ認証に使う環境変数(例: AWS_ACCESS_KEY_ID など)も Sensitive 指定にします。
Terraform Cloud はチーム/ユーザ権限でワークスペース操作を制御できます。Plan の閲覧は可だが Apply は不可といった粒度で分け、誤操作を抑制します。
ポリシー(Sentinel)や Run Tasks(セキュリティ/コストチェック連携)を挟むことで、apply 前に組織の基準を自動検証できます。
CLI 駆動では terraform login で作成される ~/.terraform.d/credentials.tfrc.json のトークンが利用されます。ワークスペースで設定した Terraform バージョンと実行モードに従い、計画と適用はリモートで行われ、ログはストリーム表示されます。
よくある失敗は、ワークスペース名の不一致、認証トークン不備、プロバイダ認証環境変数の未設定、実行バージョン差による構文エラーです。まず init の出力、Remote Runs のジョブログ、Variables 画面を確認すると切り分けが速いです。
| 項目 | Terraform Cloud backend | S3 backend | ローカル backend |
|---|---|---|---|
| State 保管/ロック | サービス側で自動ロック・バージョン管理 | DynamoDB でロック別途設計、バケット権限管理 | ロックなし、手動配布が必要 |
| 実行・監査 | リモート実行、キュー/承認、ログ・履歴・差分保存 | ローカル実行が基本。監査は外部で補完 | 完全ローカル。監査・履歴は自前 |
| 権限/RBAC | ワークスペース/チーム権限で細粒度制御 | S3/IAM と運用ルールで実質対応 | 端末アクセス権に依存 |
| ポリシー/統合 | Sentinel/Run Tasks/Cost Estimation 連携 | 外部ツール連携で補完 | 外部ツール前提 |
| セットアップ容易性 | cloud ブロックで簡潔に導入 | S3/DynamoDB/暗号化/AWS 設計が必要 | 最小だがチーム利用の運用負荷大 |
CLI 駆動の実行フロー(Terraform Cloud バックエンド)
[Dev Laptop]
|
| terraform plan/apply (CLI submits run)
v
[Terraform Cloud Workspace]
| (remote plan/apply, state lock/versioning)
v
[Providers/Cloud APIs]
|
v
[Managed Resources]
State path: Managed in Terraform Cloud (per workspace)
Logs/Policies: Stored/enforced in Terraform CloudAssociate / Pro
問題 1
Terraform Cloud の cloud ブロックで workspaces.name を指定した CLI 駆動のワークフローにおいて、誤ったワークスペースへ apply されるリスクを最も低くする運用はどれか。
正解: A
Cloud バックエンドでは、1 ディレクトリ = 1 ワークスペースの固定が最も安全。ローカルの terraform workspace は Cloud ワークスペース切替の仕組みではなく、環境変数や対話選択に依存するとヒューマンエラーが増える。
cloud ブロックと従来の remote バックエンドの違いは?
cloud ブロックは Terraform Cloud/TFE 連携を簡潔に記述できる推奨方法です。従来の backend "remote" と同様にリモート state/実行を提供しますが、cloud は組織名やホスト名の指定方法が明確で、今後の機能追加にも追随しやすい設計です。
Terraform のバージョンはローカルと Terraform Cloud のどちらに合わせるべき?
実行は Terraform Cloud のワークスペース設定で指定されたバージョンで行われます。ローカル CLI は基本的にジョブを送るだけですが、極端に古い/新しいローカル CLI は構文やプラグイン解決でエラーになる場合があるため、ワークスペースに近い安定版を使うのが安全です。
別ワークスペースの出力値を参照したい。安全な方法は?
data "terraform_remote_state" を使い、参照先の organization と workspaces.name を明示して読み取り専用で取得します。state ファイルの直接ダウンロードや手動配布は避け、参照元・先を最小限に設計してください。
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を用いた既存リソース参照の基本、選択基準、評価順序、...