我可以在 Terraform 中对多个 Terraform 文件使用相同的状态文件吗

我可以在 Terraform 中对多个 Terraform 文件使用相同的状态文件吗

假设在项目目录中我有 2 个 .tf 文件,并且我希望这两个 .tf 文件具有相同的状态文件。现在,如果执行一个 .tf 文件的计划,我的状态文件会更新,但是当我尝试执行其他 .tf 文件的计划时,我的状态文件会使用最新文件进行更新,并且会破坏之前的 .tf 文件资源

答案1

目前还不清楚您想要实现什么 - 也许您可以澄清一下?

如果目录中有多个文件,Terraform 应该规划并应用两个都针对相同的状态文件(使用 Backend 声明)。正如文档所述:

“Terraform 按字母顺序加载指定目录中的所有配置文件。加载的文件内的配置相互附加。这与合并相反。”

如果你希望将 .tf 文件分开,可以从不同的目录运行 Terraform(从而创建多个状态文件),或者使用工作区

您可以将多个工作区绑定到单个后端(或状态)。这允许部署该配置的多个不同实例。这些以前被称为“环境”,但在 0.10 中被重新命名。

摘自文档:

命名工作区允许在单个后端内方便地在单个配置的多个实例之间切换。多个工作区的一个常见用途是创建一组基础架构的并行、不同副本,以便在修改主要生产基础架构之前测试一组更改。

要使用工作区,您可以运行如下命令:

$ terraform workspace new bar
Created and switched to workspace "bar"!

You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.

然后,您可以引用资源中的工作区插值来动态改变部署的内容:

resource "aws_instance" "example" {
  count = "${terraform.workspace == "default" ? 5 : 1}"

  # ... other arguments
}

答案2

你确实回答了你自己的问题:不,你不能将相同的状态文件用于多个不同的地形管理操作,因为状态文件将被覆盖,并且一切都会失控。

相关内容