跳至主要内容

从 OpenTofu 1.6.x/1.7.x 升级

OpenTofu 1.8.x 大部分与 OpenTofu 1.6.x 和 1.7.x 兼容(S3 后端的一个小改动除外)。本迁移指南将引导您完成将 OpenTofu 升级到 1.8.0 版的过程。

步骤 0:准备灾难恢复计划

尽管 OpenTofu 1.8 大部分与 1.6 版和 1.7 版兼容,但您应采取必要的预防措施以防止意外发生。确保您拥有最新且已测试的灾难恢复计划。

步骤 1:如果使用 S3 后端 - 从 S3 后端配置中删除任何 use_legacy_workflow 的使用

如果您正在使用 S3 后端,并且设置了 use_legacy_workflow,则需要将其删除。此字段已在 1.7.0 版中弃用,并且已更改为默认值为 false。身份验证的旧版工作流不再受支持。请开始使用新的身份验证方法,该方法与其他 AWS 工具更加一致。

步骤 2:使用 OpenTofu 1.6.x/1.7.x 应用所有更改

在继续之前,请确保使用 tofu apply 应用所有更改。运行 tofu plan 应该不会产生任何计划中的更改。虽然您可以在存在挂起的更改的情况下切换到 OpenTofu,但不建议这样做。

代码块
$ tofu plan

...

No changes. Your infrastructure matches the configuration.

OpenTofu has compared your real infrastructure against your
configuration and found no differences, so no changes are needed.

步骤 3:安装 OpenTofu 1.8.x

第一步,请 按照 OpenTofu CLI 工具的安装说明进行操作。请测试您是否可以成功执行 tofu 命令并接收正确的版本。

代码块
$ tofu --version
OpenTofu v1.8.0
on linux_amd64

步骤 4:备份您的状态文件

在您开始对 Terraform 代码使用 tofu 二进制文件之前,请确保备份您的状态文件。如果您使用的是本地状态文件,则只需在项目目录中复制 terraform.tfstate 文件即可。

如果您使用的是远程后端(例如 S3 存储桶),请确保您遵循后端的备份流程,并且至少执行一次恢复流程。

步骤 5:初始化 OpenTofu 1.8.x

现在您已准备好迁移。在您的代码所在的目录中运行 tofu init。OpenTofu 将从 OpenTofu 注册表下载配置中引用的任何提供程序和模块。

步骤 6:检查计划

初始化后,运行 tofu plan 并确保没有类似于步骤 1 中的挂起更改。如果计划中存在意外更改,请回滚到 OpenTofu 1.6.x/1.7.x 并对您的迁移进行故障排除。(请参阅下面的故障排除部分。)

代码块
$ tofu plan

...

No changes. Your infrastructure matches the configuration.

OpenTofu has compared your real infrastructure against your
configuration and found no differences, so no changes are needed.

步骤 7:测试一个小改动

在您开始使用 OpenTofu 进行较大更改之前,请使用 tofu apply 测试一个较小且不重要的更改。

回滚和报告问题

如果您在迁移到 OpenTofu 时遇到问题,您可以按照以下步骤回滚到 OpenTofu 1.6.x/1.7.x

  1. 创建另一个状态文件的备份。
  2. 删除 OpenTofu 1.8.x 并验证您正在运行 OpenTofu 1.6.x/1.7.x。
  3. 运行 tofu init
  4. 运行 tofu plan 并验证计划中没有意外更改。
  5. 使用一个小且不重要的更改测试回滚。

如果您遇到错误,请在 GitHub 上报告

故障排除

如果您在迁移到 OpenTofu 期间遇到任何问题,您可以加入OpenTofu Slack 或在GitHub Discussions 上提问。

错误:无法查询可用的提供程序包

当您在配置中指定的提供程序在 OpenTofu 注册表中不可用时,会出现此错误。请回滚到 OpenTofu 1.6.x/1.7.x 并确保您的代码在此版本下工作。如果您的代码有效,请提交问题以将提供程序包含在注册表中

错误:模块未找到

当您在配置中指定的模块在 OpenTofu 注册表中不可用时,会出现此错误。请回滚到 OpenTofu 1.6.x/1.7.x 并确保您的代码在此版本下工作。如果您的代码有效,请提交问题以将模块包含在注册表中