【问题标题】:Build AWS infrastructure using terrafrom in an order that you specify按照您指定的顺序使用 terraform 构建 AWS 基础设施
【发布时间】:2017-04-03 01:05:36
【问题描述】:

最近我遇到了一种情况,我正在使用 terraform 构建 AWS 基础设施,以便为某些应用程序设置集群环境。事情是当我应用 terraform 脚本时,它会构建所有必要的模块并完全旋转多个实例,然后完成。这可能是为了这样做,无论如何都没有什么可责备的,因为 terraform 可以很好地构建这样的基础设施。

当我尝试设置此类基础架构以以集群方式部署应用程序时,这里使用的是配置管理工具。在构建 ec2 实例时,CM 脚本会被相应地调用和配置。当对模块有一些依赖时,问题就来了。

假设 2(A & B) 组件是 Autoscale 组的一部分,而 2(C & D) 组件是正常的 ec2 实例。在这里,如果我希望先构建 A,然后构建 C,因为 C 实例依赖于必须首先完全配置的 A,反之亦然,我如何控制 terraform 帮助我实现这一目标的顺序。

请有人帮我实现它。

提前致谢

【问题讨论】:

    标签: amazon-web-services amazon-ec2 chef-infra configuration-management terraform


    【解决方案1】:

    您可以使用depends_on 参数。资源可以显式依赖于其他资源。反过来,一旦相关资源已成功配置,Terraform 将只构建资源。

    https://www.terraform.io/intro/getting-started/dependencies.html

    【讨论】:

      【解决方案2】:

      另一个答案在字面上是正确的,但总的来说这是要避免的。构建您的 CM 代码,使其不断重新尝试收敛,直到成功。特别是对于 Chef,您可以使用 chef-client 食谱部署一个服务,该服务以给定的时间间隔自动运行 Chef 聚合(默认为 30 分钟,但您可能希望缩短该时间)。以“正确”的顺序运行事情听起来不错,但在处理拜占庭式故障时,您会感谢过去的自己,无论顺序如何,都能确保可靠的收敛。

      【讨论】:

        【解决方案3】:

        该问题具有广泛的性质,其他答案本身就是正确的。我想补充的是,利用模块来确定逻辑子项目的顺序也很有效。

        在 terraform 中,您可以在资源级别使用 depends_on 强制程序顺序,但不能将其用于模块。但是对于模块,您可以使用一个模块的输出作为另一个模块的输入,这将帮助您管理模块级别的程序顺序。

        因此,在您的情况下,我会将 A 和 B 放在一个模块中,将 C 和 D 放在另一个模块中,并使用从一个到另一个的输出变量来控制顺序。

        【讨论】:

          猜你喜欢
          • 2021-11-04
          • 1970-01-01
          • 2019-06-08
          • 1970-01-01
          • 2021-10-25
          • 2018-07-28
          • 2021-10-09
          • 1970-01-01
          • 2020-05-17
          相关资源
          最近更新 更多