terraform force destory /添加ASG而不是依赖变化的变化

时间:2017-04-04 20:36:21

标签: amazon-web-services terraform

例如,要强制销毁自动缩放组并添加新的,您可以将依赖关系插入到自动缩放组名称中,如此答案中所述:https://stackoverflow.com/a/39347640/1007353

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

有没有办法强制销毁/添加自动缩放组而不更改名称?

是否有一种通用的方法可以强制使用terraform进行破坏/添加,例如depends_on的强制目标/添加或污点变体?

1 个答案:

答案 0 :(得分:3)

目前无法强制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}"

  # ...
}