Skip to content

官方文档,https://opentofu.org/

1. Terraform 的许可转向

在过去近十年里,HashiCorp 的 Terraform 无疑是 IaC 领域的代名词。然而,2023年8月,HashiCorp 宣布将其核心产品(包括 Terraform)的许可证从开源的 MPL 2.0 切换到商业源许可证(Business Source License, BSL)。

BSL 许可证虽然允许个人免费使用、修改和分发代码,但对商业用途施加了严格限制。任何可能与 HashiCorp 构成竞争的商业产品,都无法在不支付昂贵费用的情况下使用 Terraform。这一转变,加上其云服务不断上涨的成本,让许多严重依赖 Terraform 的企业和开发者开始重新评估“厂商锁定”带来的风险。当一个基础工具的未来完全由一家公司的商业决策左右时,寻找一个开放、中立的替代方案便显得至关重要。

2. OpenTofu 的诞生:一个真正开源的替代方案

正是在这样的背景下,OpenTofu 应运而生。它最初是由多家公司联合发起的 OpenTF 倡议,旨在保留一个真正开源的 Terraform。如今,OpenTofu 已经成为一个由 Linux 基金会托管的独立项目,并致力于加入云原生计算基金会(CNCF)。

OpenTofu 是 Terraform 1.5.x 版本的一个硬分叉,它承诺:

永远开源:在 MPL 2.0 许可下发布,确保所有用户都可以自由地用于任何目的,无商业限制之忧。

社区驱动:由中立的基金会管理,其发展方向由社区贡献者共同决定,功能和修复的优先级基于社区的实际需求,而非单一供应商的利益。

向后兼容:作为 Terraform 的直接替代品,用户可以平滑迁移,现有的代码、模块和工作流几乎无需更改。

3. OpenTofu vs. Terraform:关键差异对比

虽然 OpenTofu 源于 Terraform,但两者在核心理念和功能上已开始出现分化。以下是它们之间的关键差异:

特性 / 维度OpenTofuTerraform
许可证MPL 2.0 (真正开源)BSL 1.1 (商业源,限制性)
治理模式社区驱动,由 Linux 基金会托管单一厂商 (HashiCorp) 控制
状态文件加密支持 (客户端加密)不支持 (社区呼吁多年)
早期变量评估支持不支持
代码即策略 (Policy as Code)支持 (原生支持 OPA)支持 (需使用 Sentinel)
状态修复支持 (tofu repair --auto)不支持 (需手动刷新和应用)
生态系统兼容 Terraform 提供商和模块庞大但受商业策略影响

最显著的优势在于,OpenTofu 实现了许多 Terraform 社区长期以来渴望但未被实现的功能,其中状态文件加密尤为关键。在 Terraform 中,状态文件以明文形式存储敏感信息,存在巨大的安全隐患。OpenTofu 在 1.7 版本中引入的客户端加密功能,彻底解决了这一痛点。

4. 快速从 Terraform 迁移

如果您已有 Terraform 项目,迁移状态文件仅需两步。这是一个无损操作,因为 OpenTofu 完全兼容 Terraform 的状态格式。

bash
# 1. 从您当前的 Terraform 后端拉取状态文件
terraform state pull > terraform.tfstate

# 2. 将状态文件推送到 OpenTofu 管理的同一后端
tofu state push terraform.tfstate
# 1. 从您当前的 Terraform 后端拉取状态文件
terraform state pull > terraform.tfstate

# 2. 将状态文件推送到 OpenTofu 管理的同一后端
tofu state push terraform.tfstate

完成之后, CI/CD 流程只需将 terraform 命令替换为 tofu 即可。没有学习成本

5. 为什么 OpenTofu 是更优选择

长期的稳定性:由中立基金会确保其开源地位,不受单一公司商业策略的冲击。

更高的安全性:原生支持状态加密等关键安全特性。

更快的创新:社区驱动的开发模式能更快地响应真实世界的需求。

完全的控制权:无厂商锁定,让我们的基础设施未来掌握在自己手中。