从后端恢复 Terraform 状态

从后端恢复 Terraform 状态

我的 Terraform Git 存储库最终出现了一些无法解决的数据错误,我无法推送最近的更改。我将提交导出到补丁,重新克隆,应用补丁,然后意识到我刚刚毁掉了我的所有本地状态。我使用 AWS CLI 同步了整个状态文件树,将其中一个复制到/作为我想要应用的路径的 .terraform/terraform.tfstate,运行 init,现在出现了版本错误。

这是完全一样首先生成状态文件的运行环境。这也是唯一应用更改的机器,因此所有内容应该仍然同步(这与眼前的问题无关,但一旦我们解决了这个问题,它就不会引起任何其他问题)。

我尝试运行的命令:

$ terraform init
$ terraform init -upgrade
$ terraform init -upgrade -migrate-state

不可避免的、坚定不移的输出:

Initializing the backend...
│ Error: Failed to load state: Terraform 1.3.9 does not support state version 4, please update.

我似乎找不到任何关于如何从远程状态恢复的帖子或文章,但我猜几乎每个人都曾在某个时候不得不从远程状态恢复。我不明白。

从远程恢复的过程应该是什么?如果环境、项目配置和项目状态没有改变,为什么会出现版本问题?

谢谢。任何帮助我都感激不尽。

答案1

当我运行 时terraform init,它已将状态初始化为 .terraform/terraform.tfstate 。因此,我已清除元数据并将我的状态文件还原到该文件路径(我从 S3 手动下载的状态的副本)。那时我开始看到上述错误。不知道为什么。这些都说不通。但是,在注意到帖子中的微妙引用后,我将状态文件移回该项目路径的根目录,一切神奇地奏效了。看起来,在初始化存储库并放入状态文件时,必须将其作为“terraform.tfstate”放置在叶 terraform 模块中,然后 terraform 本身将导入它并正确放置数据。之后,原始文件可能可以被删除。

请注意,问题本身源于对后端的不完全理解。它实际上是状态存在的地方,如果不是本地的话。本地状态文件似乎只包含用于访问/处理它的一些参考/身份信息。因此,一旦我导入了原始状态文件,它就不会再随着后续更新而改变(因为这些更改是直接针对该后端执行的)。只需列出状态元素,然后在网络断开的情况下尝试打印一个,就可以确认这一点。

相关内容