结合 ELB 和 Auto Scaling Group 时 Terraform 中的循环错误

Cycle error in Terraform when combining ELB and Auto Scaling Group

我想创建一个最初只有 1 个实例的 ASG。

我希望这个 ASG 的所有实例都在一个 ELB 后面。

所以我在 resource "aws_autoscaling_group" "ProductionWeb-ScalingGroup" 中设置 load_balancers = ["${aws_elb.Production-Web-ELB.name}"] .

现在,当我为 resource "aws_elb" "Production-Web-ELB" 编写代码并设置 instances = ["${aws_autoscaling_group.ProductionWeb-ScalingGroup.*.id}"] 时,出现错误...

Error configuring: 1 error(s) occurred:

* Cycle: aws_autoscaling_group.ProductionWeb-ScalingGroup, aws_elb.Production-Web-ELB

我理解这个错误意味着一个资源引用了另一个资源。为了检查它,我注释掉了 load_balancers = ["${aws_elb.Production-Web-ELB.name}"] 部分和 terraform plan 没有任何错误。

所以我的问题是:我是否无法使用 Terraform 创建带有附加 ELB 的 ASG,并且将在其中生成的每个 EC2 都会自动位于 ELB 后面?

文档中是否有我遗漏的内容?

有解决办法吗?

您不需要在 terraform 的 ELB 定义中明确定义将与 ELB 关联的实例。通过使用 load_balancers 参数,您将 ELB 与 AutoScaling 组相关联,AutoScaling 将知道在 AutoScaling 组启动该实例时将创建的任何实例附加到该 ELB。

在这种情况下,Terraform 不直接管理实例的状态——AWS AutoScaling 是,因此除了定义启动配置并将其关联到 AutoScaling 组之外,它们的状态同样不需要在 Terraform 中定义.

要告诉 terraform 使用单个实例启动 AutoScaling 组,请将您的 min_size argument to 1 and let your scaling policies handle the desired capacity from there. You could alternatively set desired_capacity 设置为 1,但要小心在 terraform 中管理该状态,因为它会将 desired_capacity 设置为 1应用计划的时间。