tfstateからのみ削除する

Terraformでリソースを破棄せずにtfstateからのみ削除するにはremovedブロックのlifecycle設定を使う。

removed {
  from = リソース
  lifecycle {
    destroy = false
  }
}

ポイントは lifecycle { destroy = false } を指定すること。
この指定により実際のリソースは削除されず、tfstateからのみ削除される。

削除したいリソース

例えば以下で定義されるS3のバケットを、バケット自体を削除せずにtfstateからのみ削除したいとする。

resource "aws_s3_bucket" "sample" {
  bucket = "sample-bucket"
}

removedブロックを記述する

以下のようにremovedブロックを記述する。

removed {
  from = aws_s3_bucket.sample
  lifecycle {
    destroy = false
  }
}

またaws_s3_bucket.sampleリソースの記述も削除する。

- resource "aws_s3_bucket" "sample" {
-   bucket = "sample-bucket"
- }

terraform planで確認する

実リソースを削除せずにtfstateからのみ削除されることをterraform planコマンドで確認する。

$ terraform plan
 # aws_s3_bucket.sample will no longer be managed by Terraform, but will not be destroyed
 # (destroy = false is set in the configuration)
 . resource "aws_s3_bucket" "sample" {
        id                          = "sample-bucket"
        tags                        = {}
        # (13 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 0 to change, 0 to destroy.

aws_s3_bucket.sample will no longer be managed by Terraform, but will not be destroyed

と表示されており、実際のリソースは削除されずにtfstateからのみ削除されることを確認できる。

また、最終行で0 to destroyと表示されていることでもリソースが削除されないことを確認できる。