如何正确组织我的terraform配置?

时间:2018-01-24 16:51:04

标签: devops terraform

我试图使用terraform实现一些服务,我不太确定如何有效地处理变量(理想情况下是正确的terraform方式)。

让我们说我想在几个数据中心中启动几个vms,每个数据中心每个数据中心略有不同(想想aws-regions,VPC-ID,Securitygroup-ID等)。

目前(在ansible中)我有一个dict,其中包含每个区域的dict,其中包含特定于该区域的配置。

我希望能够自己部署每个数据中心。

我已阅读了大量文档,并提出了几种可用于实现此目的的方法。

1。使用vars-files

每个数据中心有一个vars文件,其中包含每个DC的配置,并调用terraform -var-file $ {file}

这似乎不太酷,但我想重新考虑一下,如果有办法根据我设置的数据中心名称动态加载vars文件。

2。使用地图

在自动加载的vars文件中包含大量地图,并通过data-center-name引用它们。

我已经看过这个了,看起来它看起来不太可能。如果我为每个数据中心创建单独的工作区,它可以解决,但由于地图是字符串 - >只有字符串我不能使用列表。

3。使用外部来源

这听起来不错,但是由于文档已经将外部数据源标记为特殊情况下的“逃生舱”。它可能不是我想要的。

4。在.tf-file

中使用模块和变量

设置一个执行工作的模块,为每个数据中心设置一个目录,为每个包含相应变量的数据中心目录设置一个.tf文件并使用该模块

似乎最优雅,但后来我没有一个中央配置,但很多都要跟踪。

哪种方式适当'解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

至少为遇到同样问题的其他人提供答案:

我继续选择4。

这意味着我已经设置了负责编排服务的模块,默认了我用来反映测试环境的所有变量(例如:如果你没有指定额外的任何内容,那么'重新设置测试,如果你想要其他任何你必须覆盖默认值。)

然后我设立了三个分支机构'在我的目录树中,testingstagingproduction,并为每个数据中心/区域添加了子目录。

每个region-directory包含main.tf来源模块,除了测试包含定义覆盖的terraform.tfvars之外的所有模块。我在所有这些目录中都有backend.tf来定义状态存储和锁定的后端。

我最初认为这样做有点过于复杂,我可能会过度设计这个问题,但事实证明这个解决方案更容易理解和维护。