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

15
我正在尝试使用Terraform构建我们的AWS环境,但在扩展方面遇到了一些问题。 我有一个仓库只包含我想在构建环境时重复使用的模块,以及第二个仓库只处理这些模块的实际实现。
我知道HashiCorp的Github页面有一个示例,但那里每个环境都是一个状态文件。 我想将环境拆分出来,但在每个环境中有多个状态文件。 当状态文件变得很大时,应用小更新需要太长时间。
我看到的每个使用多个状态文件的示例,Terraform文件都非常不DRY且不理想。
我更喜欢能够在不同的环境之间具有不同的变量值,但具有相同的配置。
有人做过类似的事情吗? 我错过了什么吗? 我有点沮丧,因为每个Terraform示例都没有达到规模,这使得像我这样的新手难以找到正确的路径。 非常感谢任何帮助或建议!

1
你看过这个吗:https://www.terraform.io/docs/state/environments.html? - Matt Schuchard
谢谢。我一定是没有阅读文档,因为他们在0.9版本中添加了这个功能。 - Justin Flammia
1个回答

15

不幸的是,“环境”的概念对于不同的人和组织来说可能意味着不同的事情。

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

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

Terraform 有一个名为“状态环境”的功能(State Environments),可以为给定的配置同时存在多个命名状态,并允许用户使用“terraform env”命令在特定状态上集中变更操作。

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


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

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

这种妥协导致环境配置之间存在一些重复--可以通过使用Terraform模块共享它们之间的模式来减轻这种重复--但然后它们可以作为基础,允许其他配置进行概括,并且可以无需这种重复地部署多次。


10
自 Terraform 0.11 版本之后,terraform env 已更名为 terraform workspace - ILikeFood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接