我试图使用terraform实现一些服务,我不太确定如何有效地处理变量(理想情况下是正确的terraform方式)。
让我们说我想在几个数据中心中启动几个vms,每个数据中心每个数据中心略有不同(想想aws-regions,VPC-ID,Securitygroup-ID等)。
目前(在ansible中)我有一个dict,其中包含每个区域的dict,其中包含特定于该区域的配置。
我希望能够自己部署每个数据中心。
我已阅读了大量文档,并提出了几种可用于实现此目的的方法。
每个数据中心有一个vars文件,其中包含每个DC的配置,并调用terraform -var-file $ {file}
这似乎不太酷,但我想重新考虑一下,如果有办法根据我设置的数据中心名称动态加载vars文件。
在自动加载的vars文件中包含大量地图,并通过data-center-name引用它们。
我已经看过这个了,看起来它看起来不太可能。如果我为每个数据中心创建单独的工作区,它可以解决,但由于地图是字符串 - >只有字符串我不能使用列表。
这听起来不错,但是由于文档已经将外部数据源标记为特殊情况下的“逃生舱”。它可能不是我想要的。
设置一个执行工作的模块,为每个数据中心设置一个目录,为每个包含相应变量的数据中心目录设置一个.tf文件并使用该模块
似乎最优雅,但后来我没有一个中央配置,但很多都要跟踪。
哪种方式适当'解决这个问题的方法?
答案 0 :(得分:0)
至少为遇到同样问题的其他人提供答案:
我继续选择4。
这意味着我已经设置了负责编排服务的模块,默认了我用来反映测试环境的所有变量(例如:如果你没有指定额外的任何内容,那么'重新设置测试,如果你想要其他任何你必须覆盖默认值。)
然后我设立了三个分支机构'在我的目录树中,testing
,staging
和production
,并为每个数据中心/区域添加了子目录。
每个region-directory包含main.tf
来源模块,除了测试包含定义覆盖的terraform.tfvars
之外的所有模块。我在所有这些目录中都有backend.tf
来定义状态存储和锁定的后端。
我最初认为这样做有点过于复杂,我可能会过度设计这个问题,但事实证明这个解决方案更容易理解和维护。