Terraform多状态文件最佳实践示例

时间:2017-05-31 15:16:39

标签: amazon-web-services terraform

我正在尝试使用Terraform构建我们的AWS环境,但是我遇到了一些扩展问题。我有一个只是模块的存储库,我想在构建我的环境时反复使用它们,而第二个存储库只是为了处理这些模块的实际实现。

我知道HashiCorp的Github页面有一个例子,但在那里,每个环境都是一个状态文件。我想拆分环境,但在每个环境中都有多个状态文件。当状态文件变大时,应用小更新会花费太长时间。

我见过的每个例子都使用了多个状态文件,Terraform文件非常干净且不理想。

我希望能够在环境之间使用不同的变量值,但具有相同的配置。

有没有人做过这样的事情?我错过了什么吗?我有点沮丧,因为每个Terraform示例都没有达到规模,这使得像我这样的n00b很难开始正确的道路。非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:3)

不幸的是, environment 的概念对不同的人和组织来说意味着不同的事情。

对于某些人来说,它只是创建了一些基础设施的多个副本 - 可能只是暂时的,或者可能是长期的 - 以允许在一个基础设施中进行测试和实验,而不会影响另一个(可能是生产)环境。

对于其他人来说,它是部署体系结构中的第一类构造,其中环境充当其他应用程序和基础架构部署到的容器。在这种情况下,通常有多个单独的Terraform配置,每个配置在每个环境中都有一组资源,共享数据以从较小的部分创建更大的系统。

Terraform有a feature called State Environments通过允许多个命名状态同时存在于给定配置,并允许用户使用terraform env命令进行切换来为这些用例中的第一个提供服务改变特定国家的行动。

状态环境功能单独仅用于第二个用例,因为它只处理单个配置中的多个状态。但是,它可以与其他Terraform功能结合使用,利用${terraform.env}插值来处理差异,允许单个配置中的多个状态环境与另一个配置中的相应状态环境集交互

一个"大规模"方法(相对而言)在我的系列文章Terraform Environment+Application Pattern中进行了描述,该文章描述了成功部署体系结构的概括,其中许多单独的应用程序一起部署以形成环境。

在该模式中,环境本身(用作"容器"用于应用程序,如上所述)均使用单独创建Terraform配置,允许每个配置的细节不同,但它们每个都以标准方式公开数据,以允许多个应用程序 - 每个使用状态环境功能 - 部署一次对于使用相同配置的每个环境。

这种妥协导致​​环境配置之间存在一些重复 - 可以通过使用Terraform modules在它们之间共享模式来实现这些重复 - 但这些可以作为基础,允许其他配置进行通用化和部署多个时间没有这样的重复。