组合ELB和Auto Scaling组时Terraform中的周期错误

时间:2016-11-04 11:56:41

标签: amazon-web-services amazon-ec2 amazon-elb terraform

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

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

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

现在,当我为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后面?

我错过了哪些文档?

有解决方法吗?

1 个答案:

答案 0 :(得分:3)

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

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

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