A- 默认公有子网(始终可用(
B- 私有子网
我想在特定子网上创建 EC2 实例取决于 AWS 上的可用性。
如上所述,公有子网"A"始终可用,私有子网"B"并非始终可用。选择子网时,它应该找到并选择私有子网"B"(如果可用(,如果没有,请选择公有子网"A"。
如何使用 Terraform 实现这一点?
在典型的 Terraform 用法中,我们不是通过检查某物是否存在并对其做出反应来模拟这种区别,而是通过声明它在特定情况下是否应该存在,如果该陈述是错误的,则失败。
这在 Terraform 指南模块组合中进行了说明,该模块展示了我们如何编写需要 AWS VPC 的模块,而无需该模块知道该 VPC 是如何创建的。特别是,请参阅对象的条件创建,其中显示了与您描述的情况类似的情况,但使用的是 AWS AMI 而不是子网。
根据您的情况进行调整,它将是一个期望获得 AWS 子网的模块,但不知道该子网是如何创建或决定的。然后,您将为每个环境编写单独的调用配置,在每个环境中决定是否需要"私有子网"可用,或者是否仅使用默认子网。
为每个环境单独配置是对环境之间不可避免的差异进行建模的最佳方式,因为它允许您写下每个环境所需的确切形状,从而使配置也可以作为您期望的文档。然后,您可以使用共享模块来分解不同环境的共同点,从而可能以不同的方式连接这些共享模块,而环境之间的体系结构不同。