使用 OpenTofu 替代 Terraform
Terraform 是世界上首屈一指的实现基础设施即代码(infrastructure-as-code,即 IaC)的软件工具。Terraform 通过不同云厂商的 Provider,可管理绝大多数的云服务资源。Terraform 最初由 Hashicorp 公司开发, 2024年 IBM 收购了 Hashicop。
Terraform 最开始以 Mozilla 公共许可 v2.0 (MPL 2.0) 发布。但是在 2023年8月10日开始,Hashcorp将旗下所有产品的许可证变更为 Business Source License (BSL 或者 BUSL,商业源代码许可证) v1.1,Terraform 也包括在内。之后,Linux 基金会宣布推出 OpenTofu,它是一个 Terraform 的开源替代方案,并且分叉自 Terraform,采用的是 MPL-2.0。随后一些大厂也有一些跟进动作,比如在新闻报道中提到:“Oracle将Terraform替换为开源分支OpenTofu,用于其Oracle E-Business Suite (EBS) Cloud Manager”。
OpenTofu 与 Terraform 有何区别 🔗
在 OpenTofu 的常见问题回答了OpenTofu 与 Terraform 之间的差异:
On the technical level, OpenTofu 1.6.x is very similar feature-wise to Terraform 1.6.x. In the future, the projects feature sets will diverge.
The other main difference is that OpenTofu is open-source, and its goal is to be driven in a collaborative way with no single company being able to dictate the roadmap.
也就是说,OpenTofu 1.6.x 与 Terraform 1.6.x 很像。但是在未来,二者的特性集就会有差异。
如何使用 OpenTofu 🔗
截止目前,OpenTofu 与 Terraform 的用法基本一致,OpenTofu 也可以使用 Terraform 的各种 Provider,甚至可以按照 Terraform 的文档来使用 OpenTofu。在参考 OpenTofu 的文档完成安装后,使用 tofu
命令即可使用 OpenTofu。
如何在遗留项目中使用 tofu
🔗
OpenTofu 给出了从 Terraform 的不同版本迁移到 OpenTofu 的文档。注意,不同版本的 Terrform 对应了不同版本的 OpenTofu。
在实际中,迁移工作可能是比较复杂的,除了验证 OpenTofu 的兼容性,可能还要修改部署脚本、部署命令等(比如将脚本中的 terraform
修改 tofu
),这样的工作量可能不小。一个简单和偷懒的方式,是给 tofu
创建名为 terraform
的链接。然后使用 terraform
验证是否兼容。
比如,假定 tofu
被安装到了 /usr/local/bin/tofu
路径,那么使用如下命令创建链接:
ln -n /usr/local/bin/tofu /usr/local/bin/terraform
此后,在执行 terraform
命令时,其实在使用 tofu
。