- 入门
- 从 OpenTofu 1.6.x/1.7.x 升级
从 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
如果以下任何步骤失败,请不要继续执行,而是按照 下面的回滚说明 操作。如果您怀疑故障可能是 OpenTofu 中错误导致的,请通过提交问题来帮助我们。
现在您已准备好迁移。在您的代码所在的目录中运行 tofu init
。OpenTofu 将从 OpenTofu 注册表下载配置中引用的任何提供程序和模块。
如果您使用的是 S3 后端 - 您需要运行 tofu init -reconfigure
以重新初始化后端。
步骤 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
- 创建另一个状态文件的备份。
- 删除 OpenTofu 1.8.x 并验证您正在运行 OpenTofu 1.6.x/1.7.x。
- 运行
tofu init
。 - 运行
tofu plan
并验证计划中没有意外更改。 - 使用一个小且不重要的更改测试回滚。
如果您遇到错误,请在 GitHub 上报告。
故障排除
如果您在迁移到 OpenTofu 期间遇到任何问题,您可以加入OpenTofu Slack 或在GitHub Discussions 上提问。
错误:无法查询可用的提供程序包
当您在配置中指定的提供程序在 OpenTofu 注册表中不可用时,会出现此错误。请回滚到 OpenTofu 1.6.x/1.7.x 并确保您的代码在此版本下工作。如果您的代码有效,请提交问题以将提供程序包含在注册表中。
错误:模块未找到
当您在配置中指定的模块在 OpenTofu 注册表中不可用时,会出现此错误。请回滚到 OpenTofu 1.6.x/1.7.x 并确保您的代码在此版本下工作。如果您的代码有效,请提交问题以将模块包含在注册表中。