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

Terraform Multiple State Files Best Practice Examples

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

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

我见过的每个使用多个状态文件的示例,Terraform 文件都极不干燥且不理想。

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

有没有人做过这样的事情?我错过了什么吗?我有点沮丧,因为每个 Terraform 示例都不是大规模的,这让像我这样的新手很难走上正确的道路。非常感谢任何帮助或建议!

不幸的是,环境 的概念往往对不同的人和组织有不同的含义。

对某些人来说,它只是创建一些基础设施的多个副本——可能只是临时的,也可能是长期的——以允许在一个不影响另一个的情况下进行测试和实验(可能 生产) 环境。

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

Terraform a feature called State Environments 通过允许多个命名状态同时存在给定配置并允许用户使用 terraform env 命令在它们之间切换来服务于第一个用例将更改操作集中在特定状态上。

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


我的系列文章 Terraform Environment+Application Pattern 中描述了一种 "at scale" 方法(相对而言),它描述了一个成功的部署架构的概括,其中部署了许多单独的应用程序以形成一个环境。

在该模式中,每个环境 自身 (如上所述用作应用程序的 "container")都是使用 单独创建的 Terraform 配置,允许每个配置在配置细节上有所不同,但它们都以标准方式公开数据以允许多个应用程序——每个应用程序都使用 State Environments 功能 -- 使用 相同 配置为每个环境部署一次。

这种妥协导致​​环境配置之间存在一些重复——可以通过使用 Terraform modules 在它们之间共享模式来减轻这种情况——但这些随后可以作为允许其他配置被通用化和多次部署 而没有 这样的重复。