无法使用Terraform destroy销毁一个模块

无法使用Terraform destroy销毁一个模块,terraform,terraform0.12+,Terraform,Terraform0.12+,我使用Terraform模块创建了几个实例: resource "google_compute_instance" "cluster" { count = var.num_instances name = "redis-${format("%03d", count.index)}" ... attached_disk { source = google_compute_disk.ssd[co

我使用Terraform模块创建了几个实例:

resource "google_compute_instance" "cluster" {
  count = var.num_instances
  name = "redis-${format("%03d", count.index)}"
  ...
  attached_disk {
    source = 
google_compute_disk.ssd[count.index].name
  }
}

resource "google_compute_disk" "ssd" {
  count   = var.num_instances
  name    = "redis-ssd-${format("%03d", count.index)}"
  ...
  zone    = data.google_compute_zones.available.names[count.index % length(data.google_compute_zones.available.names)]

}

resource "google_dns_record_set" "dns" {
  count   = var.num_instances
 name    = "${var.dns_name}-${format("%03d", 
count.index +)}.something.com"
  ...

  managed_zone = XXX

  rrdatas = [google_compute_instance.cluster[count.index].network_interface.0.network_ip]
}

module "test" {
  source = "/modules_folder"
  num_instances             = 2
    ...
}
如何销毁其中一个实例及其依赖关系,例如实例[1]+ssd[1]+dns[1]?我试着用计算机摧毁一个模块

terraform destroy -target module.test.google_compute_instance.cluster[1]
但它没有销毁ssd[1],并尝试销毁两个dns:

module.test.google\u dns\u record\u set.dns[0] module.test.google\u dns\u record\u set.dns[1]

如果我跑

terraform destroy -target module.test.google_compute_disk.ssd[1]
它试图销毁实例和dns:

module.test.google\u compute\u instance.cluster[0] module.test.google\u compute\u instance.cluster[1]

module.test.google\u dns\u record\u set.dns[0]

module.test.google\u dns\u record\u set.dns[1]

还有

如何仅销毁实例[1]、ssd[1]和dns[1]?我觉得我的代码可能有一些错误,可能count.index有一些问题,会触发一些意外的破坏


我使用:Terraform v0.12.29

我有点困惑,为什么要
破坏Terraform
通常要做的是减少
num_实例
,然后
Terraform应用

如果您执行
地形销毁
下一次
地形应用
将使您回到您在地形源中配置的任何位置

如果没有更多的源代码,就很难看到发生了什么-但是在模块上设置
num_实例
,并在模块的资源中使用它会让人感觉不稳定


我建议您升级terraform,并直接在模块上而不是在模块内使用
count
for_each
。(这是在terraform
0.13.0
中引入的)请参见尝试销毁之前的
terraform状态列表的输出,这将是一个很好的说明。如果您想销毁模块的资源,为什么不将模块作为目标?@MattSchuchard:我没有。请参阅文章中的我的命令:terraform destroy-target module.test.google\u compute\u instance.cluster[1]用例是:假设我使用上述terraform创建的一个实例出现问题,我想销毁它并重新启动一个新实例。我不认为我可以使用自动缩放来实现这一点,因为在启动一个实例之后,我需要手动运行几个redis cli命令,将新节点加入到redis集群中,并使用hash slot对其进行重新硬存储。这就是我想用上面的地形手动摧毁并重新启动它的方式,这样它就在我的控制范围之内了。