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
と表示されていることでもリソースが削除されないことを確認できる。
\手を動かしながらTerraformを学びたい人にオススメ!/