Arch Day 122
Arch Day 122: Infrastructure as Code深度 — Terraform vs OpenTofu vs Pulumi vs CDK
Infrastructure as Code (IaC)是用代码声明式管理基础设施的方法论,其核心价值不是"写代码创建资源",而是让基础设施具备可版本控制、可审计、可重复、可测试的软件工程属性。
2026-07-30
第五阶段 - 云架构深度IaCTerraformOpenTofuPulumiAWSCDK基础设施即代码
日期: 2026-07-30 (Day 122) 阶段: 第五阶段 - 云架构深度 标签: #IaC #Terraform #OpenTofu #Pulumi #AWSCDK #基础设施即代码
核心概念
一句话定义
Infrastructure as Code (IaC)是用代码声明式管理基础设施的方法论,其核心价值不是"写代码创建资源",而是让基础设施具备可版本控制、可审计、可重复、可测试的软件工程属性。
为什么关注
2023-2026年IaC领域发生了剧烈变化:HashiCorp许可证变更 → OpenTofu分叉 → IBM $65亿收购HashiCorp → CDKTF归档。选错IaC工具可能面临许可证风险和技术债务。
误区与反模式
| 误区 | 真相 |
|---|---|
| "Terraform是开源的" | 2023年8月已改为BSL 1.1,不是开源 |
| "IaC工具都差不多" | 声明式HCL vs 命令式编程语言,范式完全不同 |
| "用CDK就不用学CloudFormation" | CDK底层生成CloudFormation,调试时必须理解CF |
| "State文件放Git就行" | State包含敏感数据,必须加密+远程存储 |
知识点详解
1. 四大IaC工具全面对比
| 维度 | Terraform | OpenTofu | Pulumi | AWS CDK |
|---|---|---|---|---|
| 最新版本 | 1.x (BSL 1.1) | 1.12 (2026.02) | 3.x | v2 |
| 许可证 | BSL 1.1 (非开源) | MPL 2.0 (真开源) | Apache 2.0 | Apache 2.0 |
| 语言 | HCL (声明式) | HCL (兼容TF) | Python/TS/Go/Java/C# | TS/Python/Java/C#/Go |
| 多云 | 300+ providers | 兼容所有TF providers | 复用TF providers | 仅AWS |
| State加密 | 需外部方案 | 原生支持 (v1.7+) | 原生支持 | N/A (CloudFormation) |
| AI能力 | 有限 | 社区驱动 | Neo (Agentic AI) | CDK Mixins |
| 治理方 | HashiCorp/IBM | Linux Foundation/CNCF | Pulumi Inc | AWS |
2. HashiCorp许可证风暴与IBM收购
时间线:
- 2023.08: Terraform从MPL 2.0改为BSL 1.1,禁止第三方提供竞争性托管服务
- 72小时内: OpenTofu manifesto发布,社区迅速分叉
- 2024.04: IBM以**$65亿**收购HashiCorp
- 2025.12: CDKTF正式sunset归档,仓库只读
影响:41%的平台工程师将IaC许可证不确定性列为工具链规划的前三大风险。
3. OpenTofu关键特性演进
| 版本 | 关键特性 |
|---|---|
| 1.7 | 原生State加密(PBKDF2/AWS KMS/GCP KMS) |
| 1.8 | Early variable evaluation(变量可用于module sources) |
| 1.9 | Provider iteration with for_each |
| 1.11 | Ephemeral resources(secrets仅存内存不写入state) |
| 1.12 | Provider-defined functions in dynamic blocks |
4. Pulumi Neo — AI驱动的IaC
Pulumi 2025年推出Neo——Agentic AI平台:
- 自然语言到基础设施:描述需求,Neo自动生成代码
- Custom Instructions:编码组织标准,Neo自动应用
- MCP Server:连接Claude Code、Cursor等AI编辑器
5. AWS CDK v2最新改进
- CDK Mixins(2026.03 GA):
.with()语法为Construct添加可组合功能 - EKS v2 L2 Constructs:原生资源支持,单栈多集群
- 合成引擎优化:大型栈从分钟级缩短到秒级
6. 选型决策
| 场景 | 推荐 | 原因 |
|---|---|---|
| 多云大型企业(开源优先) | OpenTofu | 真开源、state加密、Linux Foundation治理 |
| 开发者为主的团队 | Pulumi | 用熟悉语言、Neo AI、测试友好 |
| 纯AWS环境 | AWS CDK | 最紧密集成、高级抽象 |
| 已有大量TF代码 | OpenTofu | 无缝迁移、不受BSL限制 |
面试题
问题:如何处理IaC的State管理和安全?
回答:
- 远程Backend:S3+DynamoDB(锁)/Terraform Cloud/OpenTofu Cloud
- State加密:OpenTofu原生支持KMS加密,Terraform需要backend层加密
- 最小权限:State文件包含敏感数据,CI/CD用临时凭证访问
- State锁定:防止并发修改导致状态不一致
- Drift检测:定期plan检测手动变更(OpenTofu/Crossplane自动修复)