首页 文章

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

提问于
浏览
1

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

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

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

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

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

1 回答

  • 2

    不幸的是,环境的概念往往对不同的人和组织意味着不同的东西 .

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

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

    Terraform具有a feature called State Environments,通过允许多个命名状态同时存在于给定配置中,并允许用户使用 terraform env 命令在它们之间切换以将更改操作集中在特定状态上,从而为这些用例中的第一个提供服务 .

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


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

    在该模式中,环境本身(作为应用程序的"container",如上所述)每个都使用单独的Terraform配置创建,允许每个配置的详细信息不同,但它们每个都在标准中公开数据允许多个应用程序(每个应用程序使用状态环境功能)的方法,使用相同的配置为每个环境部署一次 .

    这种妥协导致环境配置之间存在一些重复 - 可以通过使用Terraform modules来共享它们之间的模式来实现 - 但这些配置可以作为基础,允许其他配置被多次推广和部署而不会出现这种重复 .

相关问题