如果特定子网在Terraform中不可用,如何选择默认子网?

时间:2019-08-19 11:24:09

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

A -默认的公共子网(始终可用)
B -专用子网

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

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

我如何使用Terraform做到这一点?

1 个答案:

答案 0 :(得分:0)

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

这在Terraform指南Module Composition中得到了说明,该指南显示了我们如何编写需要AWS VPC的模块,而该模块无需知道如何创建VPC。特别是,请参阅Conditional Creation of Objects,该图显示了与您所描述的情况类似的情况,但使用的是AWS AMI而不是子网。

根据您的情况进行调整,这将是一个希望为其提供AWS子网的模块,但不知道该子网是如何创建或确定的。然后,您将为每个环境编写一个单独的调用配置,并在每个环境中确定是否需要“专用子网”才能使用,还是仅使用默认子网。

针对每个环境进行单独配置是对环境之间不可避免的差异进行建模的最佳方法,因为它使您可以写下对每个环境期望的确切形状,从而使该配置还可以用作满足期望的文档。然后,您可以使用共享模块排除不同环境的共同点,从而可能在环境之间的体系结构不同的地方以不同的方式连接这些共享模块。