Copy & Paste Engineer

【Terraform】defaultワークスペースを使わせない方法

【Terraform】defaultワークスペースを使わせない方法

Terraformでは、デフォルトで default というワークスペースが存在しますが、これは環境を意図せず共有してしまうリスクがあるため、チーム運用では使用を避けたいケースが多いです。


📌 問題:default ワークスペースの危険性

Terraformを複数環境(dev/stg/prod)で運用する際、ワークスペースを使って状態ファイルを分離するのが一般的です。

しかし、何も指定しないと default ワークスペースが使用されてしまいます。

$ terraform workspace show
default

この状態で terraform apply を実行してしまうと、意図しないリソース操作が発生する恐れがあります。


✅ 解決策:lifecycle.precondition で明示的にブロック

Terraform v1.2以降では、リソースに対して前提条件(precondition)を設定できます。 これを使って、default ワークスペースでの操作を事前に失敗させることが可能です。

実装例

# default ワークスペースを禁止するダミーリソース
resource "null_resource" "forbid_default_workspace" {
  lifecycle {
    precondition {
      condition     = terraform.workspace != "default"
      error_message = "Workspace 'default' is forbidden. Use a named workspace (dev/stg/prod)."
    }
  }
}

実行結果(例)

$ terraform plan


 Error: Workspace 'default' is forbidden. Use a named workspace (dev/stg/prod).

   with null_resource.forbid_default_workspace,
   on main.tf line 1, in resource "null_resource" "forbid_default_workspace":
    1: resource "null_resource" "forbid_default_workspace" {


💡 メリット

項目 内容
🔐 安全性 Plan段階で default をブロックできる
🧼 シンプルさ ダミーの null_resource 1つで完結
⚙️ 移植性 どのProviderでも使える汎用的な方法
🧪 Terraformバージョン v1.2以降で利用可能(2022年5月リリース)

🔗 関連リンク