Terraform 通过模块解决组件的重用问题。因此,我可能会将 AWS Autoscale Group 的定义放在一个模块中,然后让多个顶级资源文件使用该 ASG。到目前为止还好。
我的问题是:如何使用Terraform对多个顶级资源文件进行分组和组织?换句话说,组织的下一个层次是什么?
我们有一个具有多个应用程序的系统...每个应用程序都对应一个 TF 资源文件,而这些资源文件将使用这些模块。我们有不同的客户使用不同的应用程序集,因此我们需要将它们保存在他们自己的资源文件中。
我们询问是否存在用于部署多个顶级资源文件(对我们来说是应用程序)的 TF 概念。
最佳答案
在某些时候,您无法进一步抽象,或者进一步抽象没有意义。您将始终拥有一个描述要使用的模块的顶级资源文件(即 main.tf
)。您可以通过以下方式组织这些顶级资源文件:
使用 Terraform 工作空间
您可以使用workspaces - 就您而言,也许每个客户名称都有一个。每个工作空间都有自己的支持 Terraform 状态。然后您可以在 Terraform 代码中使用 terraform.workspace 变量。工作区还可用于针对不同的环境。
使用单独的状态文件
为每个客户端提供一个顶级状态文件,即 clienta.main.tf
、clientb.main.tf
等。您可以将它们全部放在相同的存储库并使用脚本来单独运行它们,或者以您喜欢的任何模式运行它们;或者您可以为每个客户端拥有一个存储库。
您还可以将工作区与单独的状态文件结合起来,以针对每个客户端的单独环境,即登台
、生产
。 Terraform docs详细了解工作区及其一些缺点。
关于terraform - 如何将 Terraform 堆栈嵌套到顶层和模块之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489157/