如何将 Terraform 状态从一个远程存储移动到另一个远程存储

Sha*_*wnC 5 terraform terraform-provider-azure

我们使用 Azure blob 存储作为 Terraform 远程状态,我正在尝试将有关特定现有资源的状态信息移动到该存储帐户中的另一个容器。新容器 (terraforminfra-v2) 已存在,现有 Terraform 代码指向旧容器 (terraforminfra)。我尝试了以下步骤:

  1. 使用“terraform state pull > migrate.tfstate”在 terraforminfra 中创建状态数据的本地副本。当我查看这个文件时,它似乎拥有所有正确的状态信息。
  2. 更新 Terraform 代码,现在引用容器 terraforminfra-v2。
  3. 使用“terraform init”,它会识别后端配置已更改并要求迁移所有工作区。我输入“否”是因为我只想更改特定资源,而不是所有工作区中的所有内容。
  4. 使用命令“terraform state push migrate.tfstate”。

最后一个命令的运行似乎有点像在做某事,但是当它完成时(没有错误提示),新容器中仍然没有状态信息。

是因为我在步骤 #3 中回答“否”,这是否意味着它实际上并未更改为它“指向”的远程状态?与此相关的是,有没有办法使用“terraform state”命令来告诉你的州在哪里?

我在这里错过了一步吗?提前致谢。

Sha*_*wnC 4

好的,我想我知道如何做到这一点(或者至少,这些步骤似乎有效):

  • 将包含 .tf 文件的当前文件夹重命名为其他名称(例如文件夹.old)
  • 使用“terraform state pull”获取当前工作空间状态的本地副本(您需要为要迁移的每个工作空间重复这些步骤)
  • 使用原始名称创建一个新文件夹并将代码复制到其中。
  • 创建一个与原始工作区同名的新工作区。
  • 修改远程后端的代码以指向新容器(或者您要更改的有关远程状态的名称/位置的任何其他内容)。
  • 运行“terraform init”,使其指向新的远程后端。
  • 使用“terraform state push local state file ”将导出的状态推送到新的后端。

然后,我在新文件夹中使用“terraform state list”和“terraform plan”来检查所有内容是否都在那里。