AWS CloudFormation 介绍与选型指南
AWS CloudFormation 介绍与选型指南:模板规范版本 2010-09-09 与功能演进口径、栈/变更集/StackSets 核心概念、官方 create-stack 上手示例,附 Terraform/Pulumi/OpenTofu 量化对比与选型建议
AWS CloudFormation 介绍与选型指南
一、信息基准
- 查询日期:2026-10-18
- 版本口径:AWS CloudFormation 是 AWS 托管服务,非开源软件,无独立版本号,因此本篇标题不带版本。版本口径以两个维度描述:一是模板规范版本——模板格式版本
2010-09-09(官方文档明确其为当前唯一有效值);二是服务功能演进——以官方 User Guide 与公告为准持续演进。
| 信息项 | 内容 | 官方来源 |
|---|---|---|
| 服务定位 | 帮助用户建模并配置 AWS 资源的基础设施即代码服务(官方 Welcome 原文) | docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html |
| 模板规范版本 | 2010-09-09(当前唯一有效值) | 同上 format-version-structure.html |
| 模板正文配额 | 直传 51,200 字节;经 S3 上传可至 1 MB | 同上 cloudformation-limits.html |
| 栈配额 | 每区域默认 200 个栈(可申请调整) | 同上 cloudformation-limits.html |
| CLI 参考版本 | AWS CLI 2.38.1 Command Reference(本文示例出处) | docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html |
| 开源情况 | 闭源托管服务,无 GitHub 仓库(官方未公布 stars) | aws.amazon.com/cloudformation/ |
二、软件概述
本次介绍的对象为 AWS CloudFormation(查询日期 2026-10-18,信息以其官方 User Guide 与配额文档为基准)。
CloudFormation 是 AWS 官方的基础设施即代码(IaC)服务,官方定义是"a service that helps you model and set up your AWS resources",让你把更多时间放在应用上而非资源管理上。用户以 YAML 或 JSON 模板声明所需资源(计算、网络、存储、数据库等),CloudFormation 负责按依赖关系创建、更新、删除整套资源,并跟踪其状态。官方总结的三大价值是:简化基础设施管理、快速复制整套基础设施、轻松控制与跟踪基础设施变更。作为 AWS 原生服务,它与 IAM、控制台、CloudWatch 等深度集成,是纯 AWS 环境中最"正统"的 IaC 选择;代价则是与 AWS 绑定,不具备跨云能力。
三、核心概念
3.1 模板(Template)
JSON/YAML 文本文件,声明资源与配置。模板由固定段落组成:AWSTemplateFormatVersion(规范版本,2010-09-09)、Description、Parameters、Mappings、Conditions、Resources、Outputs 等,其中 Resources 段为必填。
3.2 栈(Stack)
模板的一次部署实例。以栈为单位创建/更新/删除整套资源;栈的状态、事件、输出可在控制台与 API 中跟踪。
3.3 变更集(Change Set)
更新栈前先生成"将做什么改动"的预览(新增、替换、删除哪些资源),人工审阅后再执行,用于控制变更风险。
3.4 StackSets
用一个模板在多个目标账号、多个区域批量创建栈,配合 AWS Organizations 做多账号治理(官方 StackSets 概念文档)。
3.5 漂移检测(Drift Detection)
检测栈内资源是否被带外修改(配置漂移),输出资源级差异报告。
3.6 回滚与栈策略
创建/更新失败自动回滚;栈策略(Stack Policy)与删除策略(DeletionPolicy)可保护关键资源不被误改误删。
四、功能特性
4.1 全量 AWS 资源覆盖
几乎覆盖全部 AWS 服务的资源类型,新服务上线通常会同步提供对应资源类型,这是 AWS 原生 IaC 的独有优势。
4.2 模块(Modules)
把常用资源组合封装成可复用模块,供多个模板引用,统一组织级最佳实践。
4.3 自定义资源(Custom Resources)
模板中通过自定义资源调用外部逻辑(如 Lambda 函数),扩展 CloudFormation 管不到的自动化动作。
4.4 治理与合规配套
官方提供 CloudFormation Hooks(在资源操作前后执行治理检查)与 CloudFormation Guard(策略即代码校验模板)等配套能力,服务企业级管控需求。
4.5 IaC Generator
从既有 AWS 资源反向生成模板,便于把存量资源纳入 IaC 管理。
4.6 配额体系
官方配额文档明确:模板正文直传上限 51,200 字节(经 S3 可至 1 MB)、每区域默认 200 个栈(可申请提升),大规模组织需提前规划。
五、快速上手
最小模板(YAML,语法依据官方模板格式版本说明 format-version-structure.html):
AWSTemplateFormatVersion: "2010-09-09"
Description: Minimal sample stack
Resources:
SampleBucket:
Type: AWS::S3::Bucket
创建栈(命令逐字引自 AWS CLI 2.38.1 参考的官方示例):
aws cloudformation create-stack --stack-name myteststack --template-body file://sampletemplate.json --parameters ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1\,SubnetID2
官方文档显示该命令返回以 arn:aws:cloudformation:us-east-... 开头的 StackId,可用 aws cloudformation wait stack-create-complete 或控制台观察创建进度。以上为官方文档所述流程,本文不做本地实测。
六、适用场景与限制
6.1 适用场景
- 纯 AWS 环境的基础设施管理:资源覆盖最全、与控制台/IAM 集成最深,无需引入第三方工具链。
- 多账号治理:StackSets + Organizations 在大量账号/区域统一发放基线设施。
- 变更审计要求高的组织:变更集预览、漂移检测与 CloudTrail 天然契合合规审计流程。
- 存量资源 IaC 化:IaC Generator 把手工创建的资源收编为模板管理。
6.2 限制
- 绑定 AWS:模板语法与资源类型均为 AWS 专有,多云或混合云战略下无法复用。
- 模板规模限制:模板正文直传 51,200 字节、经 S3 1 MB 的上限对超大型单体模板构成约束,需要拆分嵌套栈。
- 变更粒度与速度:栈内资源更新需按编排顺序等待,失败回滚可能带来较长窗口;细粒度变更不如通用编程式工具灵活。
- 模板语言表达力:YAML/JSON + 内置函数的抽象能力弱于通用编程语言,复杂逻辑(循环、条件组合)编写与调试成本较高。
七、同类选型对比
对比对象:Terraform(多云 IaC 事实标准)、Pulumi(通用编程语言 IaC)、OpenTofu(Terraform 的开源社区分支,Linux 基金会项目)。数据查询日期均为 2026-10-18,stars 取自 shields.io 徽章,最近发版取自 GitHub Releases feed。
| 维度 | AWS CloudFormation | Terraform(v1.17.0-rc2) | Pulumi(v3.270.0) | OpenTofu(v1.12.8) |
|---|---|---|---|---|
| 开源许可 | 闭源托管服务(AWS 官方) | BUSL-1.1(源码 LICENSE,非 OSI 开源) | Apache-2.0(仓库标注) | MPL-2.0(仓库标注) |
| GitHub stars / 最近发版 | 官方未公布 / 服务无版本号持续演进 | 约 50k / v1.17.0-rc2(2026-10-14) | 约 26k / v3.270.0(2026-10-16) | 约 31k / v1.12.8(2026-10-14) |
| 版本节奏 | 模板规范版本 2010-09-09 长期稳定;功能以服务演进方式发布 | 1.x 年度 minor + 月度补丁,RC 先行 | CLI 高频发版(v3.26x–v3.27x 连续) | 社区节奏,1.12.x 补丁活跃 |
| 兼容矩阵 | 仅 AWS;控制台/CLI/SDK/API 原生集成 | 多云 + 数千 Provider;HCL | 多云;TypeScript/Python/Go/C# 等通用语言 | 与 Terraform HCL 生态高度兼容,Provider 生态独立演进 |
| 典型角色 | AWS 单云治理与多账号基线 | 多云/混合云编排 | 工程团队用真代码写基础设施 | 追求 Terraform 语义但需开源许可的组织 |
选型建议:深耕单一 AWS 且重视原生治理(StackSets、变更集、审计),CloudFormation 是默认答案;需要多云或供应商中立,在 Terraform(注意 BUSL 许可)与 OpenTofu(MPL-2.0 开源)之间按许可与生态取舍;工程团队希望用真实编程语言与软件工程实践管理基础设施,选 Pulumi。
八、参考链接
- 什么是 CloudFormation(User Guide Welcome):https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html
- 模板格式版本说明(2010-09-09):https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/format-version-structure.html
- 服务配额(模板大小与栈数量):https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
- StackSets 概念:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html
- create-stack 官方示例(AWS CLI 2.38.1 参考):https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html
- 产品主页:https://aws.amazon.com/cloudformation/