将AWS资源从Terraform的管理范畴中移除的方法
我在日常工作中使用Terraform来进行AWS的配置管理。
当我们使用Terraform将AWS资源编码并进行一段时间的管理时,可能会有以下的感受。
我想保留现有的资源,但从Terraform的管理下移除它们。
所以,本次我将记录下上述的步骤。
将已创建的资源从Terraform的管理范围中移除
只需执行以下命令即可。
$ terraform state rm <リソースタイプ>.<リソース名>
这就是以上的内容了。
当执行上述命令时,即使执行了 destroy 或从 Terraform 代码中删除了相关资源的定义,执行 apply 仍会让相关资源在 AWS 环境中持续存在。
确认正在使用Terraform管理的资源清单和状态。
将要执行的state rm命令涉及的资源类型和资源名称是记录在terraform.tfstate文件中的。
上述文件的管理方法有两种选择(包括将terraform.tfstate纳入版本控制系统中 或 存储在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`命令的输出结果中的资源名称即可。
顺便提一下,在列表中显示了以 data.~ 开头的资源。这意味着这些资源是 Terraform 代码所引用的,但其创建是在 Terraform 控制范围之外进行的。