【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月リリース) |