Terraform の “workspace” は同名異義語。CLI では同一コンフィグに対する複数の状態管理、Cloud/Enterprise では実行単位としての独立ワークスペースです。
環境分離や権限設計で選択を誤ると、State 衝突や権限漏れにつながります。この記事では、両者の正しい使い分けを図・比較表・コマンド例で手早く確認します。
CLI の workspace は、同一ディレクトリにある同一 Terraform コンフィグに対して、状態ファイルを切り替える仕組みです。言い換えると、コンフィグは一つ、state が複数です。ローカルまたはバックエンド上で state 名が分かれます。
Terraform Cloud/Enterprise(以下 TFC/E)の workspace は、VCS 連携・変数スコープ・実行履歴・ロール/権限・ポリシー適用などを内包する“実行ユニット”です。各ワークスペースは通常、独立した state と実行パイプラインを持ちます。
CLI の workspace 基本操作(ローカル/任意バックエンド共通)
terraform workspace list
terraform workspace new dev
terraform workspace select dev
terraform plan -var-file=vars/dev.tfvars
terraform applyCLI workspace は、ステートを切り替えつつ同一コンフィグを適用したい場面に適しています。例えば軽量な環境分離(dev, test, qa など)が挙動差の少ない構成で成り立つ場合です。
一方で、変数・プロバイダ設定・モジュール構成が大きく異なる環境を CLI workspace だけで吸収するのは危険です。誤ったワークスペースで apply する人的ミスや、複雑化した条件分岐により可読性が落ち、レビュー漏れの温床になります。
CLI workspace と backend の state 命名(例: S3 backend)
terraform {
backend "s3" {
bucket = "example-tfstate"
key = "projectA/terraform.tfstate" # 実際は workspace 名で分岐されることに注意
region = "ap-northeast-1"
}
}
# ワークスペース名をキーに含めるには、backend の機能や規約で設計(例: key に workspace を埋め込む命名規約)TFC/E の workspace は、VCS ブランチとの連携、変数・機密値のスコープ、プラン・適用キュー、ロール/ポリシー、State 共有・出力の参照(run tasks/DRY 設計)など、実行管理に必要な機能を一式で提供します。
ワークスペース間連携は、変数の共有や出力の参照機能(例: remote state data ソース、TFC/E の統合機能)を用いて安全に行います。手作業で state ファイルを行き来させるような運用は避けます。
TFC/E への接続例(cloud ブロック、変数は TFC/E 側で管理)
terraform {
cloud {
organization = "your-org"
workspaces {
name = "projectA-prod"
}
}
}
# remote backend でも可。資格試験では、TFC/E workspace が state・実行・権限の単位である点を押さえる。日々の運用で効いてくる違いを整理します。特に試験では、CLI と TFC/E の“workspace”の役割混同が頻出です。
以下の表は、設計判断と試験対策の両面で押さえておくべき要点です。
| 項目 | Terraform CLI workspace | Terraform Cloud/Enterprise workspace | 試験での落とし穴 |
|---|---|---|---|
| 概念 | 同一コンフィグに対する state の切替 | 実行・権限・変数管理を含む実行単位 | 同じ“workspace”名称でも意味が違う |
| 状態ファイル | backend 上で workspace ごとに分離 | 各 workspace に 1 つの state(標準) | CLI の state と Cloud の state を同一視しない |
| 対象コンフィグ | 基本は 1 ディレクトリ/1 コンフィグ | VCS ブランチやフォルダとマッピング | CLI で異なるコンフィグを 1 workspace で混在させない |
| 変数・機密 | tfvars/環境変数で管理 | ワークスペーススコープの Variables/Secrets | CLI 側には機密保護やスコープ機能はない |
| 実行トリガー | 手動で plan/apply | VCS/手動/API でキューイングと承認フロー | Cloud では Apply の承認プロセスが設計できる |
| 権限/分離 | ローカル運用に依存 | RBAC/Policy as Code を適用 | CLI workspace で権限制御はできない |
CLI と TFC/E の workspace と state の関係
実行の違い(CLI は手動、TFC/E はキュー+承認)
# CLI: 手動で実行
terraform plan
terraform apply
# TFC/E: VCS 連携(例)
# - main ブランチに PR -> Plan 作成
# - 承認者が Apply を承認 -> 実行
# API/手動トリガーも可(詳細は TFC/E の Run キュー挙動に依存)大きな違いは“何で分けるか”です。差分が大きければディレクトリやリポジトリで分け、権限や監査要件が強ければ TFC/E workspace で分けます。差分が小さく、同一コンフィグで回せるなら CLI workspace で軽量に切り替えます。
リソース命名やバックエンドキーに workspace 名を組み込む命名規約を用意し、誤適用防止のための pre-commit、plan の可視化、approval フローを合わせて設計します。
命名規約例(workspace 名を反映)
locals {
ws = terraform.workspace
}
resource "aws_s3_bucket" "app" {
bucket = "app-${local.ws}"
tags = {
env = local.ws
}
}
# 注意: terraform.workspace は CLI/TFC/E 双方で有効だが、命名衝突や容量制限を考慮することAssociate/Pro では、“CLI workspace は state 切替の仕組みであり、環境の完全分離や RBAC を担わない”が頻出です。また、“TFC/E workspace は実行・変数・権限の単位で、VCS 連携やキューイングを持つ”点も要暗記です。
実務では、同じ言葉でも意味が異なるため運用フローが混ざりやすいことに注意。CLI と TFC/E を併用する場合も、責任分界(誰が、どこで、どう適用・承認するか)を明示しておきます。
よく使う確認コマンド
# 現在のワークスペース確認(CLI)
terraform workspace show
# 変数の優先度確認(計画時の -var-file と環境変数)
terraform plan -var-file=vars/prod.tfvars
# TFC/E: 実行は UI/API が中心(CLI は cloud ブロック経由で送信)Associate / Pro
問題 1
組織が dev と prod を厳密に分離し、RBAC と承認付きの Apply を必須にしたい。どの設計が Terraform のワークスペース概念に最も適合するか。
正解: A
RBAC と承認付き Apply を要件とするなら、TFC/E の workspace 単位で権限と実行キューを管理するのが適切。CLI workspace は state 切替が主目的で、承認フローや RBAC を提供しない。
CLI workspace はリソース命名に自動で影響しますか?
いいえ。CLI workspace は state の切替機構であり、リソース名は自動で変わりません。必要なら terraform.workspace を使って明示的に命名へ反映する設計にします。
TFC/E の複数 workspace 間で出力値を参照したい場合は?
remote state のデータソースや TFC/E の統合機能を使います。直接 state ファイルをコピー/上書きする運用は避け、正式な参照メカニズムで依存関係を表現してください。
CLI workspace 運用から TFC/E workspace に移行する際の注意点は?
state のインポート/移行手順を計画し、変数・機密値は TFC/E の Variables に移します。ワークスペース分割方針(dev/prod など)と RBAC、VCS 連携を先に設計し、命名規約や plan/approve のフローを文書化してから切替えると安全です。
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を用いた既存リソース参照の基本、選択基準、評価順序、...