私はAWSの構成管理にTerraformを日常利用しています。
AWSリソースをTerraformでコード化し、ある程度の期間管理していくとこんな思いを抱く時があります。
「作成済みのリソースは残したまま、Terraformの管理下からは外したい」
というわけで、今回は上記の手順を記録しておきます。
作成済みリソースをTerraform管理下から外す
下記コマンドを実行すればOKです。
$ terraform state rm <リソースタイプ>.<リソース名>
以上です。
上記コマンドを実行すると、destroy を実行したり、Terraformコードから該当リソースの定義を削除した状態で apply を実行しても、該当するリソースはAWS環境上に残り続けます。
Terraformで管理しているリソースの一覧と状態を確認
state rm
コマンドの実行しに指定するリソースタイプとリソース名は、terraform.tfstate というファイルに記録されています。
上記ファイルの管理方法には2種類(terraform.tfstate自体をVCSに含める or S3に保存する)あり、いずれの場合も下記コマンドで確認可能です。
# 一覧表示
$ terraform state list
data.aws_acm_certificate.sample
aws_ecs_cluster.sample
aws_ecs_service.sample
aws_ecs_task_definition.sample
・
・
・
aws_vpc.sample
# 状態確認
$ terraform state show aws_ecs_cluster.stg
# aws_ecs_cluster.sample:
resource "aws_ecs_cluster" "sample" {
arn = "arn:aws:ecs:ap-northeast-1:************:cluster/sample-cluster"
capacity_providers = []
id = "arn:aws:ecs:ap-northeast-1:************:cluster/sample-cluster"
name = "sample-cluster"
tags = {}
setting {
name = "containerInsights"
value = "disabled"
}
}
terraform state rm
コマンドで指定する値は、terraform state list
コマンドの出力結果にあるリソース名を指定すればOKです。
ちなみに一覧表示の中で data.~
から始まるリソースがあります。これは 「Terraformコードで参照しているけれども、作成自体はTerraform管理外で行われたリソースである」
ということを意味しています。