结合ELB和自动缩放组时,在Terraform中出现循环错误



我想首先创建一个只有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_balancer参数,您将ELB与AutoScaling组相关联,并且AutoScaling将知道在AutoScaling组启动该实例时将创建的任何实例附加到该ELB。

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

要告诉terraform用单个实例启动AutoScaling组,将min_size参数设置为1,并让您的缩放策略从那里处理所需的容量。您也可以将desired_capacity设置为1,但要小心在terraform中管理该状态,因为每次应用计划时,它都会将desired_capacity设置为1。

最新更新