手动将状态文件移动到不同的后端

Manually moving a state file to a different backend

我使用第三方工具为现有基础设施重新创建了一个状态文件,即 terraformer。现在我想将 .tfstate 移动到另一个 azurerm 后端并从那里进行管理。

如果我只是将文件,即 mystate.tfstate 从本地复制到内部存储帐户容器,并使用与后端配置相同的文件 name/key,它会起作用还是我需要做其他事情来实现了吗?

我不想通过尝试做一些不确定按我预期工作的事情来冒状态文件或基础架构的风险。

I don't want to risk the state file or infrastructure by trying to do something that isnt sure to work as I expect.

先备份状态文件,这样就不会拿状态文件冒险了。

只要您不是 运行 一个 apply 命令,您就不会拿基础设施冒险。即使您是 运行 的 apply 命令,您也可以在继续之前查看计划。

所以只需(始终)备份您的状态文件,并在应用之前始终检查计划,没有风险。

Terraform 有一些内置于 terraform init 的自动迁移行为。

根据您的描述,到目前为止您似乎一直在使用本地状态存储,因此最新的状态快照在您本地系统的 .tfstate 文件中,您可能没有backend block 在您的配置中,因为本地存储是默认设置。

在开始这个过程之前,我建议先在安全的地方复制一份状态文件,这样您就可以更有信心地进行实验。此过程不应冒您现有状态文件的风险,但如果您已经投入大量工作来构建该状态文件,那么小心一点也无妨。

接下来,添加 a backend "azurerm" block 以告诉 Terraform 它应该使用该后端。请参阅文档以了解您需要设置哪些设置以及您可能需要先进行哪些其他准备步骤,例如建立一个新的存储容器。

如果您一直在使用本地状态,那么您可能会在当前工作目录中有一个 terraform.tfstate 文件,Terraform 将在下一步中检查该文件。如果到目前为止您已重命名该文件,则需要将其重命名回 terraform.tfstate 以符合 Terraform 的本地状态存储实现的预期。

如果您现在 运行 terraform init,Terraform 应该注意以下两点:

  1. 您有一个 backend 块,但当前工作目录当前没有初始化的后端连接。
  2. 您的工作目录中已有一个 terraform.tfstate 文件。

在这两件事成立的情况下,Terraform 将建议将您的状态从本地后端迁移到 azurerm 后端。您可以按照它建议的步骤并回答出现的提示,之后您应该会找到存储在您配置的 Azure 存储容器中的相同状态快照。

确认对象存在于 Azure 存储中后,您可以删除 terraform.tfstate 文件,因为 Terraform 将不再引用它。