AWS IaC 成熟度 - CloudFormation、CDK、SAM 构建的声明式基础设施管理优势

以 CloudFormation、CDK、SAM 为核心,将 AWS Infrastructure as Code 生态系统的成熟度与 Azure ARM/Bicep 及 GCP Deployment Manager 进行比较,解析 CDK 多语言支持带来的开发体验差异。

IaC 是衡量云运维成熟度的指标

Infrastructure as Code(IaC)是将云基础设施配置作为代码管理的方法。手动从控制台创建资源的运维方式环境可再现性低,变更历史追踪也困难。引入 IaC 后,基础设施的版本管理、代码审查、自动化测试、CI/CD 集成成为可能。IaC 的成熟度直接反映组织的云运维成熟度。AWS 在 IaC 领域提供 CloudFormation(声明式定义)、CDK(编程语言抽象化)、SAM(无服务器特化)三层工具,覆盖从初学者到高级用户的广泛需求。

CloudFormation - AWS IaC 的基础

CloudFormation 是 AWS 的原生 IaC 服务,以 JSON 或 YAML 声明式定义基础设施资源。截至 2025 年支持 800 多种资源类型,AWS 新服务发布时通常在数周内即可通过 CloudFormation 管理。CloudFormation 的核心概念是栈(Stack)。栈是作为单一单元管理的资源集合,创建、更新、删除作为原子操作执行。变更集(Change Set)可在应用前预览变更内容,防止意外的资源删除或替换。漂移检测(Drift Detection)可检测手动变更导致的实际状态与模板的偏差。StackSets 可将同一模板部署到多个账户和区域,在 Organizations 环境中实现治理。

CDK 多语言支持带来的开发体验革新

AWS CDK(Cloud Development Kit)于 2019 年 GA,是用编程语言定义基础设施的框架。支持 TypeScript、Python、Java、C#、Go 五种语言。CDK 的革新在于将基础设施定义从声明式配置文件提升为编程语言的表达力。条件分支、循环、抽象化、继承、组合等编程概念可直接应用于基础设施定义。Constructs(构造)是 CDK 的核心抽象。L1 Constructs 是 CloudFormation 资源的直接映射,L2 Constructs 添加了合理默认值和便利方法,L3 Constructs(Patterns)将多个资源组合为常见架构模式。Construct Hub 是社区共享的构造库,可复用经过验证的架构模式。

与 Azure ARM 模板和 Bicep 的比较

Azure 的 IaC 以 ARM(Azure Resource Manager)模板为基础。ARM 模板以 JSON 格式编写,但冗长的语法受到开发者批评。为应对这一课题,Microsoft 开发了 Bicep 这一领域特定语言。Bicep 编译为 ARM 模板,以简洁的语法实现同等功能。Bicep 的语法确实比 ARM 模板简洁,但作为领域特定语言,表达力不及 CDK 的通用编程语言。CDK 可利用 IDE 的代码补全、类型检查、重构工具,而 Bicep 的工具支持有限。Azure 没有与 CDK 直接对应的多语言 IaC 框架。Azure SDK 可用编程语言操作资源,但这是命令式方法,不具备 CDK 的声明式合成能力。

GCP Deployment Manager 与 Terraform 的定位

GCP 的原生 IaC 工具是 Deployment Manager,但 Google 自身正转向推荐使用 Terraform。Deployment Manager 使用 YAML 和 Jinja2/Python 模板,但功能更新缓慢,新 GCP 服务的支持往往滞后。Google 投资 Terraform 的 GCP Provider 开发,事实上将 Terraform 定位为 GCP 的主要 IaC 工具。这种将 IaC 委托给第三方工具的方针与 AWS 自主开发 CloudFormation 和 CDK 的方针形成对比。Terraform 作为多云 IaC 工具优秀,但 GCP 特有功能的支持速度不及 CloudFormation 对 AWS 新服务的支持。

SAM 的无服务器 IaC 特化

AWS SAM(Serverless Application Model)是作为 CloudFormation 扩展简化无服务器应用定义的框架。Lambda 函数、API GatewayDynamoDB 表、Step Functions 等无服务器资源可用简洁语法定义。SAM CLI 提供本地测试、调试、部署的一体化工作流。sam local invoke 可在本地执行 Lambda 函数,sam local start-api 可在本地启动 API Gateway 模拟器。这使得无服务器应用的开发周期大幅缩短。Azure Functions 的本地开发工具和 GCP Cloud Functions 的 Functions Framework 也提供类似功能,但 SAM 与 CloudFormation 的无缝集成和 CDK 的互操作性是 AWS 独有的优势。如果想系统学习 IaC 设计模式,相关书籍 (Amazon) 也可供参考。

总结

AWS 的 IaC 生态系统由 CloudFormation(声明式定义基础)、CDK(编程语言高级抽象化)、SAM(无服务器特化)三层构成。CloudFormation 支持 800 多种资源类型,新服务支持速度最快。CDK 的多语言支持将基础设施定义提升为编程语言的表达力,实现了其他 IaC 工具无法达到的抽象化和复用性。Azure 的 Bicep 语法简洁但表达力有限,GCP 事实上将 IaC 委托给 Terraform。IaC 生态系统的成熟度和选择广度方面 AWS 明显领先。