terraform - 如何将 Terraform 堆栈嵌套到顶层和模块之外

标签 terraform

Terraform 通过模块解决组件的重用问题。因此,我可能会将 AWS Autoscale Group 的定义放在一个模块中,然后让多个顶级资源文件使用该 ASG。到目前为止还好。

我的问题是:如何使用Terraform对多个顶级资源文件进行分组和组织?换句话说,组织的下一个层次是什么?

我们有一个具有多个应用程序的系统...每个应用程序都对应一个 TF 资源文件,而这些资源文件将使用这些模块。我们有不同的客户使用不同的应用程序集,因此我们需要将它们保存在他们自己的资源文件中。

我们询问是否存在用于部署多个顶级资源文件(对我们来说是应用程序)的 TF 概念。

最佳答案

在某些时候,您无法进一步抽象,或者进一步抽象没有意义。您将始终拥有一个描述要使用的模块的顶级资源文件(即 main.tf)。您可以通过以下方式组织这些顶级资源文件:

使用 Terraform 工作空间

您可以使用workspaces - 就您而言,也许每个客户名称都有一个。每个工作空间都有自己的支持 Terraform 状态。然后您可以在 Terraform 代码中使用 terraform.workspace 变量。工作区还可用于针对不同的环境。

使用单独的状态文件

为每个客户端提供一个顶级状态文件,即 clienta.main.tfclientb.main.tf 等。您可以将它们全部放在相同的存储库并使用脚本来单独运行它们,或者以您喜欢的任何模式运行它们;或者您可以为每个客户端拥有一个存储库。

您还可以将工作区与单独的状态文件结合起来,以针对每个客户端的单独环境,即登台生产Terraform docs详细了解工作区及其一些缺点。

关于terraform - 如何将 Terraform 堆栈嵌套到顶层和模块之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489157/

相关文章:

azure - Terraform Azure AKS 内部负载均衡器

azure - Terraform 开始适用于 Azure 中已有的 100 多个资源

azure - Azure 上的 Terraform Snowpipe 集成时出现错误

jenkins - Terraform aws_cloudformation_stack AlreadyExistsException

google-cloud-platform - terraform GCE 服务帐户节

Terraform:如何自动解决旧状态文件中已删除的提供程序问题?

terraform - 我是否正确地将多个端口添加到 terraform 资源规范中?

terraform - 如何在 Terraform 条件中格式化字符串?

amazon-web-services - 允许 lambda 权限访问 Secretsmanager 值

azure - 如何使用 azurerm_virtual_machine_scale_set_extension 中的设置