JavaScriptを有効にしてください

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

 ·  ☕ 2 分で読めます

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

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


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

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

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

1
2
$ terraform workspace show
default

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


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

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

実装例

1
2
3
4
5
6
7
8
9
# 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)."
    }
  }
}

実行結果(例)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ 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月リリース)

🔗 関連リンク

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer