SuperAPI AI 工具集

opentofu-guide

部署与运维

查看项目

更新于 10-15 12:47

技能介绍

用途

本技能面向需要了解、安装或从 Terraform 迁移到 OpenTofu 的场景。OpenTofu 是 Terraform 的开源分支,2023 年 HashiCorp 将 Terraform 许可证从 MPL 2.0 改为 BSL(Business Source License)后创建,由 Linux Foundation 治理,与 Terraform 1.5.x 保持完全兼容,并加入社区驱动的功能。

主要能力

许可证与治理差异

  • Terraform(HashiCorp):2023 年 8 月起采用 BSL,对竞争性产品的商业使用有限制;IBM 于 2024 年收购 HashiCorp。
  • OpenTofu:采用 MPL 2.0,真正开源,由 Linux Foundation 治理,社区驱动开发。

功能创新

OpenTofu 1.7 特性:状态加密(客户端加密,社区呼吁 5 年以上)、可循环导入块(import 块中使用 for_each)、动态 Provider 函数、早期变量求值(terraform 块中使用变量)。

OpenTofu 1.8 特性(最新):OpenTofu 专属覆盖、扩展的早期变量求值(模块源中使用变量/locals)、增强的 Provider 支持。

Terraform 优势:HCP Terraform 云平台(Stacks、HYOK、Private VCS Access)、企业支持、更大的生态、Sentinel 策略(350+ NIST 策略)。

兼容性

100% 兼容:HCL 语法、Provider 生态(同一 registry)、状态文件格式(Terraform 1.5.x)、模块结构、CLI 命令。迁移路径为 Terraform 1.5.x 的直接替换,无需修改代码,状态文件可移植(需考虑加密)。

使用方式

安装 OpenTofu

Windows:

choco install opentofu
scoop install opentofu

或从 https://github.com/opentofu/opentofu/releases 手动下载。

macOS:

brew install opentofu
curl -L https://github.com/opentofu/opentofu/releases/download/v1.8.0/tofu_1.8.0_darwin_amd64.tar.gz | tar xz
sudo mv tofu /usr/local/bin/

Linux:

snap install opentofu --classic
curl -fsSL https://get.opentofu.org/install-opentofu.sh | sh
wget https://github.com/opentofu/opentofu/releases/download/v1.8.0/tofu_1.8.0_linux_amd64.tar.gz
tar -xzf tofu_1.8.0_linux_amd64.tar.gz
sudo mv tofu /usr/local/bin/

从 Terraform 迁移

  1. 评估兼容性:terraform version(需为 1.5.x 或兼容版本)、terraform providers。
  2. 安装 OpenTofu。
  3. 测试兼容性:tofu init、tofu validate、tofu plan。
  4. 迁移状态(可选):不使用状态加密时状态兼容,无需迁移,直接改用 tofu 命令;启用状态加密时在 .tofu 文件中配置 encryption 块,设置 TOFU_ENCRYPTION_KEY,执行 tofu init -migrate-state。
  5. 更新 CI/CD:GitHub Actions 使用 opentofu/setup-opentofu@v1;Azure DevOps 使用 Bash 任务执行安装脚本;GitLab CI 使用镜像 ghcr.io/opentofu/opentofu:1.8.0。

状态加密(OpenTofu 独有)

支持 AES-GCM 基本加密、密钥轮换(fallback 旧密钥解密)、云 KMS 集成(AWS KMS、Azure Key Vault、GCP KMS)。最佳实践:密钥安全存储(不提交到仓库,使用 CI/CD secrets)、定期轮换密钥、启用加密前备份未加密状态。

可循环导入块(OpenTofu 1.7+)

在 import 块中使用 for_each 批量导入多个资源,例如通过 locals 定义资源组映射后循环导入。

早期变量求值(OpenTofu 1.7+)

允许在 terraform 块(如 backend 配置)中使用变量;1.8+ 支持在模块源中使用变量,实现动态模块版本。

命令兼容性

所有 Terraform 命令在 OpenTofu 中行为一致,只需将 terraform 替换为 tofu:init、plan、apply、destroy、state、import、validate、fmt、output。

适用场景

选择 OpenTofu:组织政策要求开源工具、需要供应商中立、担心未来许可证变化、合规要求客户端加密、希望无需 HCP Terraform 即可加密、多云端加密需求、希望免费状态加密、预算受限、希望影响路线图、偏好 Linux Foundation 治理。

选择 Terraform:需要 HCP Terraform Stacks、HYOK、Private VCS Access、Sentinel 策略执行、直接 HashiCorp/IBM 支持、SLA 保证、合规认证、临时值(1.10+)、Terraform Query(1.14+)、Actions 块(1.14+)、优先获得最新 Provider 特性、已有 HCP Terraform 投资。

限制

本技能资料未提供 OpenTofu 的收费、价格信息;未提供官方支持 SLA 的具体条款;未提供除已列版本外的其他版本细节。迁移建议中提及多数项目迁移耗时小于 1 小时,但实际耗时因项目而异。