terraform state rm ${リソース名}
で消せる。
aws_route53_zone.default_zone
というリソース名でインポートする場合、以下のようになる。
terraform import aws_route53_zone.default_zone ${ゾーンID}
これを取り込んだ tfstate ファイルはだいたい以下のようになる (雰囲気だけ似せてます)。
{ "version": 4, "terraform_version": "1.3.6", "serial": 2, "lineage": "なんか UUID っぽいやつ", "resources": [ { "mode": "managed", "type": "aws_route53_zone", "name": "default_zone", "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", "instances": [ { "schema_version": 0, "attributes": { "arn": "arn:aws:route53:::hostedzone/01234567890123456789", "comment": "デフォルトドメインのホストゾーン", "delegation_set_id": "", "force_destroy": null, "id": "01234567890123456789", "name": "example.com", "name_servers": [ "ns-114.example.com", "ns-1145.example.com", "ns-11451.example.com", "ns-114514.example.com" ], "primary_name_server": "ns-114.example.com", "tags": { "Name": "example.com" }, "vpc": [], "zone_id": "01234567890123456789" }, "sensitive_attributes": [], "private": "114514b3ivh4mfj3n4zqdiuobfa810==" } ] } ], "check_results": null }
この状態で、コード上から resource "aws_route53_zone" "default_zone {}"
の記述を削除して plan を実行すると、以下のようにリソース削除対象として Destroy に計上されてしまう。
Plan: 114514 to add, 0 to change, 1 to destroy. Changes to Outputs: 以下略
記述を削除してリソースも Terraform の管理対象から外したいけど、AWS 上では残っていてほしい。
「これでは困る……」ということで、そのような場合は state rm
を実行することで、 tfstate の内容のみ削除できる。
terraform state rm aws_route53_zone.default_zone
実行後の tfstate ファイルは以下のようになる。
{ "version": 4, "terraform_version": "1.3.6", "serial": 3, "lineage": "なんか UUID っぽいやつ", "resources": [], "check_results": null }
やったぜ、無事 resources が空になった。
このあとマネジメントコンソールからログインして Route53 を確認すれば分かる通り、 import 元のリソースは AWS 上に残留しているので、これで変に削除とかされずめでたしめでたし。
もちろんこれらは route53 で NS 向けているリソースだったので「削除したくない!」という感じだったので、削除していいリソースであれば state rm せずにコード記述を削除して destroy で構わない。