HCP Terraformでリソースを残しつつWorkspaceを削除する方法

HCP Terraformでリソースを残しつつWorkspaceを削除する方法

Clock Icon2025.02.14

HCP Terraformでリソースを残しつつ、Workspaceを削除することは可能か疑問に思い試してみました。

結論

Workspaceの強制削除を実行することで可能です。しかし、おすすめはしません。

Workspace削除後は、Stateファイルにアクセスできなくなるため、Terraformでリソースを管理することが困難になります。

Workspace内にStateファイルが保管されています。Workspaceを削除することで、Stateファイルも同時に削除されます。

引き続きTerraformで管理したい場合は、Workspace削除前にStateファイルを移行する必要があります。

Backend用のリソースを別途用意する必要やHCP Terraform外でのワークフローの考慮が必要になり、運用負荷は高くなると思います。

コンソール上でやってみた

実際に、テスト用のリソースを作ってWorkspace削除をやってみます。

テスト用リソースを作成

テスト用にSQSキューを作成するTerraformコードを作成しました。

main.tf
provider "aws" {
  region = "ap-northeast-1"
}

terraform {
  cloud {
    organization = "<Organizations名>"
    workspaces {
      project = "<Project名>"
      name    = "<Workspace名>"
    }
  }
}

resource "aws_sqs_queue" "thi" {
  name = "hcp-tf-workspace-delete-test"
}

コードを実行して、リソースを作成します。

terraform init
terraform plan
terraform apply

SQSキューが作成されていることが確認できます。

$ aws sqs list-queues | grep hcp-tf-workspace-delete-test
https://sqs.ap-northeast-1.amazonaws.com/0123456789/hcp-tf-workspace-delete-test

Workspaceのみ削除

リソース残しつつ、Workspace削除します。

HCP Terraformのコンソールにて、Workspaceを選択します。

Workspace Settings -> Destruction and Deletion -> Force Delete from HCP Terraformを選択します。

Cursor_と_Destruction_and_Deletion___sato-workspace-test___classmethod-sandbox___HCP_Terraform-1.png

リソースが残っている場合、以下のように警告が表示されます。

Workspaceのdelete自体は可能なため、Force Deleteを実行します。

Cursor_と_Destruction_and_Deletion___sato-workspace-test___classmethod-sandbox___HCP_Terraform

Workspaceが削除されたことを確認できました。

Workspaces___classmethod-sandbox___HCP_Terraform

期待通り、SQSキューが削除されていないことも確認できました。

$ aws sqs list-queues | grep hcp-tf-workspace-delete-test
https://sqs.ap-northeast-1.amazonaws.com/0123456789/hcp-tf-workspace-delete-test

tfe providerでやってみた

tfe providerを使って、Workspaceを管理している場合はどうなるか試してみました。

前の手順で作成したSQSキューhcp-tf-workspace-delete-testは予め削除しておいてください。

tfe_workspace | Resources | hashicorp/tfe | Terraform | Terraform Registry

リソース作成

tfe providerでWorkspaceを作成します。

force_deletetrueに設定することで、Workspaceの強制削除が可能になります。(リソースが残っている状態でWorkspaceを削除)

ちなみに、デフォルトはfalseです。

mkdir tfe
touch main.tf
tfe/main.tf
resource "tfe_workspace" "test" {
  name         = "hcp-tf-workspace-delete-test"
  organization = "Organizations名"
  project_id   = "<プロジェクトID>"
  force_delete = true
}

Terraformを実行して、Workspaceを作成します。

terraform -chdir=tfe init
terraform -chdir=tfe apply

Terraformで作成したWorkspacを指定します。

先程のAWSリソース作成用コードを使い回します。

mkdir aws
mv main.tf aws/
aws/main.tf
provider "aws" {
  region = "ap-northeast-1"
}

terraform {
  cloud {
    organization = "<Organizations名>"
    workspaces {
      project = "<Project名>"
      name    = "hcp-tf-workspace-delete-test"
    }
  }
}

resource "aws_sqs_queue" "thi" {
  name = "hcp-tf-workspace-delete-test"
}

ディレクトリ構成は以下です。

.
├── aws
│   └── main.tf
└── tfe
    └── main.tf

Terraformを実行して、SQSキューを作成します。

terraform -chdir=aws init
terraform -chdir=aws apply

SQSキューが作成できました。

$ aws sqs list-queues | grep hcp-tf-workspace-delete-test
https://sqs.ap-northeast-1.amazonaws.com/0123456789/hcp-tf-workspace-delete-test

Workspaceのみ削除

Workspaceを管理しているTerraformでdestoryを実行して、Workspaceを削除してみます。

terraform -chdir=tfe destroy

期待通り、SQSキューが残っていました。

$ aws sqs list-queues | grep hcp-tf-workspace-delete-test
https://sqs.ap-northeast-1.amazonaws.com/0123456789/hcp-tf-workspace-delete-test

force_deletefalseにして、Workspaceを削除

force_deletefalseにした場合の挙動をみてみましょう。

先ほどのSQSキューを手動で削除します。

その後、tfe/main.tfforce_deletefalseに変更します。

tfe/main.tf
resource "tfe_workspace" "test" {
  name         = "hcp-tf-workspace-delete-test"
  organization = "Organizations名"
  project_id   = "<プロジェクトID>"
  force_delete = false # ここを変更
}

先ほどと同様に、Applyをそれぞれ実行して、WorkspaceとSQSキューを作成します。

その後Workspace側をDestroyします。

この際に、管理対象リソースがあるとエラーが出力されDestroyが失敗します。

$ terraform -chdir=tfe destroy
│ Error: error deleting workspace ws-XXXXXXX: This workspace has 1 resources under management and must be force deleted by setting force_delete = true

AWS側のリソースを削除して、Workspace内に管理リソースが存在しない状態にすることでDestroyは成功します。

terraform -chdir=aws destroy
terraform -chdir=tfe destroy

Tips: No-code Provisioningで作成したWorkspaceの削除

No-code Provisioningで作成したWorkspaceも同様に削除可能です。

Workspace自体はユーザー側で操作が可能なため、Force delete workspaceを実行できます。

おわりに

手動・tfe providerでWorkspaceの強制削除をやってみました。

強制削除によって、リソースを残したままWorkspaceを削除することはできます。

Workspaceと一緒にStatefileが消えてしまいます。

バックアップの取得等を行ったうえで、十分に注意して実行しましょう。

以上、AWS事業本部の佐藤(@chari7311)でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.