Terraform 当列表被修改时,控制地形相似资源而不重新创建它们的最佳方法

Terraform 当列表被修改时,控制地形相似资源而不重新创建它们的最佳方法,terraform,Terraform,考虑以下代码: variable "list" { type = "list" default = ["a", "b", "c"] } resource "null_resource" "resources_from_a_list" { count = "${length(var.list)}" triggers { field = "${element(var.list, count.index)}}" } } 在terraform中,通常使用循环计数来创建类似

考虑以下代码:

variable "list" {
  type = "list"
  default = ["a", "b", "c"]
}

resource "null_resource" "resources_from_a_list" {
  count = "${length(var.list)}"
  triggers {
    field = "${element(var.list, count.index)}}"
  }
}
在terraform中,通常使用循环计数来创建类似的资源

当需要修改此列表时,删除第一项,例如:

var.list from ["a", "b", "c"] to  ["b", "c"]
所有资源都会重新创建,因为它是控制资源创建/销毁的索引


如果从列表中删除其中一个项目,那么不重新创建它们的最佳方法是什么?

Terraform 0.12将使用新的
for_each
构造解决此问题

目前只有像编辑tfstate这样的黑客解决方法:

terraform state mv <resource-name>.<resource-id>[<i>] <resource-name>.<resource-id>[<j>]
terraformstate mv.[].]
这里有更多的讨论-

另一种选择是使用类似jinja模板的外部模板,其中源tf本身是jinja模板,并且使用模板构造将资源创建为单个资源块