OpenTofu 迁移:如何在不破坏生产的情况下打破供应商锁定
Source: Dev.to
请提供您希望翻译的正文内容,我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。
Why the Shift to OpenTofu
OpenTofu 分支恢复了 Terraform 二进制在 HashiCorp 转向商业源代码许可证(BSL)时失去的自由。核心命令如 import 实际上被设置了付费墙,生态系统(Registry)也成为了供应商锁定的点。OpenTofu 在不包含仅限 SaaS 的功能的情况下提供相同的功能,让您重新掌控基础设施即代码(IaC)资产。
准备您的代码库
扫描硬编码的注册表引用
#!/bin/bash
# Find hardcoded upstream registry references
grep -r "registry.terraform.io" . --include="*.tf" | while read -r line ; do
echo "[ALERT] Hardcoded upstream registry found: $line"
echo " Refactor to use implicit provider lookup or local mirrors."
done
备份状态
状态文件是唯一的真实来源。损坏它后,您将不得不重新导入成千上万的资源。
-
在本地拉取当前状态
terraform state pull > pre_migration_backup.tfstate -
初始化 OpenTofu
tofu init -upgrade -
干运行(必需)
tofu plan
如果 tofu plan 返回 “No changes”,则说明没有问题。更常见的情况是会看到 “Provider hash mismatch”。这是预期的,因为锁文件是由旧的二进制文件签名的。
修复提供者锁不匹配
rm .terraform.lock.hcl && tofu init
启用本机状态加密
OpenTofu 提供本机客户端侧状态加密(自 v1.7 起免费)。在配置中添加以下块(如果愿意,可将现有的 terraform 块替换为 tofu 块):
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
passphrase = var.state_passphrase # Never hard‑code — inject via CI
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
state {
method = method.aes_gcm.my_method
enforced = true
}
}
}
现在状态在静止和传输过程中均已加密。即使有人访问你的 S3 存储桶,他们也只能看到不可读的字节。
CI/CD 流水线调整
在本地笔记本上迁移相对容易;而 CI/CD 流水线是大多数迁移卡住的地方。请将 HashiCorp 维护的 Terraform Action 替换为 OpenTofu 的等价实现。
# Legacy (risk)
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.6.0
# Current (safe)
- uses: opentofu/setup-opentofu@v1
with:
tofu_version: 1.7.0
即使按每小时 200 美元的计费标准,重构成本通常也能在下一个 Terraform 商业套餐账单之前收回。
比较:专有 Terraform 与 OpenTofu
| 特性 | 专有 Terraform | OpenTofu |
|---|---|---|
| 状态加密 | 仅企业/云版 | 免费 / 原生 |
| 注册表 | 原始(供应商托管) | 镜像(自托管) |
| 支持 | 官方供应商(Tier 1) | 社区 / Spacelift / env0 |
| 测试 | terraform test | tofu test(功能上相同) |
| 许可证 | BSL(部分功能付费墙) | Apache 2.0(完全开源) |
指导原则
- Registry Rule: 如果工具需要特定的 URL 才能工作,它就是一种服务,而不是工具。尽可能对所有内容进行代理或镜像。
- Encryption Standard: 明文状态文件在任何审计中都会失败。使用默认加密状态的工具。
- Divergence Threshold: 监控 Terraform Feature Lag Tracker。当专有工具引入仅对其 SaaS 产品有利的破坏性更改时,立即进行分叉。
相关文章
- 第 1 部分 – 决策框架:状态文件风险、提供商平价差距、CNCF 成熟度以及运营模型评估。
- 第 3 部分 – 凤凰计划:一个 1,200 资源的企业迁移案例研究(后端从 HCP 撤离到主权 S3,审计协议,故障排除指南)。
最初发布于