【问题标题】:Cycle error in Terraform when combining ELB and Auto Scaling Group结合 ELB 和 Auto Scaling 组时 Terraform 中的循环错误
【发布时间】:2017-03-18 06:04:42
【问题描述】:

我想创建一个最初只有 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 后面?

我错过了文档中的某些内容吗?

有解决办法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢安东尼。这就说得通了。 'terraform plan' 不会产生任何错误。我会在接下来的几天内用“申请”确认。
    猜你喜欢
    • 2018-07-11
    • 2017-04-23
    • 2018-03-29
    • 2021-07-16
    • 2014-04-20
    • 2017-11-19
    • 1970-01-01
    • 2018-06-27
    • 2017-02-01
    相关资源
    最近更新 更多