terraform force destory/add ASG 而不是依赖性变化的变化

terraform force destory/add ASG instead of change on dependency change

例如,要强制销毁自动缩放组并添加新的,您可以将依赖项插入到自动缩放组名称中,如以下答案所述:

但是,如果您不想更改名称,那么这将不起作用。

有什么方法可以在不更改名称的情况下强制 destroy/add 自动缩放组?

是否有一种通用的方法可以将 terraform 强制为 destory/add,例如强制 destory/add 或 depends_on 的污点变体?

目前没有办法强制 Terraform 重新创建 ASG,除非更改其强制创建新资源的属性之一。正如您所见,name 是人们通常使用的。

更改名称的好处是可以像这样使用 create_before_destroy 生命周期模式:

lifecycle {
  create_before_destroy = true
}

这种情况下Terraform会先创建新的ASG,等到它初始化成功,然后才销毁旧的ASG。如果不更改名称,这是不可能的,否则两个 ASG 的名称会发生​​冲突。

请注意,可以避免手动指定名称的需要,方法是在名称中包含在需要更换 ASG 时更改的内容。例如,一个常见的选择是包含 AMI ID,假设它已经从变量插值中填充,因此它可以同时插值到名称和 AMI 中:

resource "aws_launch_configuration" "example" {
  name = "example-${var.ami_id}"
  image_id = "${var.ami_id}"

  # ...
}

resource "aws_autoscaling_group" "example" {
  name = "${aws_launch_configuration.example.name}"

  launch_configuration = "${aws_launch_configuration.example.name}"

  # ...
}