我想创建一个最初只有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后面?
我错过了哪些文档?
有解决方法吗?
答案 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.