如何修复 terraform 远程状态和本地状态不匹配的问题

Piy*_*ani 5 terraform terraform-provider-gcp

我的队友正在使用 terraform v0.12.28,我开始与他一起工作,但我使用的是 v0.13.x 并做了一些更改,我们使用存储在 GCS 存储桶中的状态文件。

现在我的队友让我降级,因为他写了一些与v0.12.28兼容的模块,我确实降级了我的版本,但远程状态仍然是v0.13.x。

现在我们陷入了具有更高版本的远程状态。解决这个问题最安全的方法是什么?我们处于初始阶段,因此我们可以破坏整个基础设施,但仍然想知道解决方法。

mar*_*iux 2

如果您在后端存储桶中启用了版本控制,我建议

  • 恢复旧版本的状态,
  • 修复任何差异(例如导入自该版本以来创建的资源),以及
  • 从此开始正常工作。

不幸的是,这是一个手动过程,据我所知,没有 terraform 命令支持您将状态恢复到早期版本。

补充笔记

对于未来我的建议是:

  • 确保在您的状态后端中启用版本控制
  • 确保通过将其指定为约束来固定您的 terraform 版本。

例如通过创建一个versions.tf

terraform {
  required_version = "0.12.28"
}
Run Code Online (Sandbox Code Playgroud)

您还可以在其中固定提供商版本(例如,如果您出于任何原因需要坚持使用 aws 提供商 2.x)

terraform {
  required_version = "0.12.28"

  required_providers {
    aws = ">= 2.58, < 3.0"
  }
}
Run Code Online (Sandbox Code Playgroud)