【问题标题】:How to select default subnet if particular subnet is not available in Terraform?如果 Terraform 中没有特定子网,如何选择默认子网?
【发布时间】:2019-08-20 01:04:22
【问题描述】:

A - 默认公共子网(始终可用)
B - 私有子网

我想在特定子网上创建 EC2 实例取决于 AWS 上的可用性。

如上所述,公共子网“A”始终可用,而私有子网“B”并非始终可用。在选择子网时,它应该找到并选择私有子网“B”(如果可用),如果不可用则选择公共子网“A”。

如何使用 Terraform 实现这一目标?

【问题讨论】:

  • 不可用是什么意思?你能创建一个minimal reproducible example 更清楚地解释你的意思和你尝试过的东西吗?
  • 如果子网 B 不可用,您不想创建它吗?具体来说,为私有子网配置的机器将不同于为公共子网配置的机器。如果使用默认公有子网不是一个好习惯,请改为将您自己的 VPC 和网络定义为项目的一部分。

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

在典型的 Terraform 使用中,我们不是通过检查某物是否存在并对它做出反应来模拟这种区别,而是通过声明它在特定情况下是否应该存在,如果存在则失败陈述是错误的。

Terraform 指南 Module Composition 对此进行了说明,该指南展示了我们如何编写一个需要 AWS VPC 的模块,而该模块不需要知道该 VPC 是如何创建的。特别是,请参阅 Conditional Creation of Objects,它显示了与您所描述的情况类似的情况,但使用的是 AWS AMI 而不是子网。

根据您的情况进行调整,这将是一个期望获得 AWS 子网的模块,但不知道该子网是如何创建或决定的。然后,您将为每个环境编写单独的调用配置,在每个环境中决定是否需要“私有子网”可用,或者是否只使用默认子网。

为每个环境单独配置是对环境之间不可避免的差异进行建模的最佳方式,因为它允许您为每个环境写下您期望的确切形状,从而使配置也可以作为您期望的文档。然后,您可以使用共享模块来分解不同环境的共同点,从而在环境之间的架构不同的地方以不同的方式连接这些共享模块。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多