Terraform通过模块解决组件的重用问题。因此,我可能将一个AWS Autoscale Group的定义放在一个模块中,然后让多个顶级资源文件使用该ASG。到目前为止很好。
我的问题是:如何使用Terraform分组和组织多个顶级资源文件?换句话说,下一级别的组织是什么?
我们有一个具有多个应用程序的系统...每个应用程序将对应一个TF资源文件,而那些资源文件将使用这些模块。我们有不同的客户使用不同的应用程序集,因此我们需要将它们保存在自己的资源文件中。
我们正在询问是否存在用于部署多个顶级资源文件(我们的应用程序)的TF概念。
答案 0 :(得分:3)
在某些时候,您不能或者没有必要进一步抽象。您将始终拥有描述要使用的模块的顶级资源文件(即main.tf
)。您可以通过以下方式组织这些顶级资源文件:
您可以使用workspaces-在您的情况下,每个客户名称可以使用一个。每个工作区都有自己的后援Terraform状态。然后,您可以在Terraform代码中使用terraform.workspace
变量。工作区还可以用于定位不同的环境。
为每个客户(例如clienta.main.tf
,clientb.main.tf
等)拥有一个顶级状态文件。您可以将它们全部存储在同一存储库中,并使用脚本分别运行它们,或者无论您喜欢哪种模式;否则每个客户可以有一个存储库。
您还可以将工作空间与单独的状态文件组合在一起,以针对每个客户端定位单独的环境,即staging
,production
。 Terraform docs详细介绍了工作区及其缺点。