用途
CloudFormation 技能用于使用 AWS 原生的基础设施即代码(IaC)方式部署 AWS 资源。它适合以下场景:
- 使用 AWS 原生 IaC 部署 AWS 资源
- 创建可重复、参数化的基础设施模板
- 使用同一模板管理多环境部署(dev、staging、prod)
- 通过变更集和回滚保护实现安全部署
- 检测并修复配置漂移
- 将大型基础设施组织为嵌套堆栈
- 在堆栈之间导出/导入值
前置条件
- 已安装并配置 AWS CLI v2
- IAM 权限:cloudformation:*,以及模板中所有资源所需的权限
- (可选)安装 cfn-lint 用于模板校验(pip install cfn-lint)
- 用于存储大于 51,200 字节模板的 S3 存储桶
主要能力
模板结构
模板支持 AWSTemplateFormatVersion、Description、Metadata(含 AWS::CloudFormation::Interface 参数分组)、Parameters、Conditions、Mappings、Resources、Outputs 等部分。示例中展示了参数(Environment、InstanceType、VpcId、SubnetIds)、条件(IsProd、CreateReadReplica)、映射(RegionAMI)、资源(SecurityGroup、LaunchTemplate、AutoScalingGroup、TargetGroup)以及输出(带 Export 名称)。
堆栈操作
提供 validate-template 校验模板、cfn-lint 检查、create-stack 创建堆栈(支持参数、capabilities、标签、终止保护、失败回滚)、wait 等待创建完成、describe-stacks 查看状态与输出、list-stack-resources 列出资源、delete-stack 删除堆栈等命令。
变更集(安全更新)
通过 create-change-set 预览变更、describe-change-set 审查计划变更(含 Action、Resource、Type、Replacement)、execute-change-set 应用变更、wait 等待更新完成、delete-change-set 删除未应用的变更集。
漂移检测
使用 detect-stack-drift 启动检测、describe-stack-drift-detection-status 查看状态、describe-stack-resource-drifts 查看漂移资源(支持 MODIFIED、DELETED 过滤)、detect-stack-resource-drift 针对特定资源检测。
嵌套堆栈
父模板通过 AWS::CloudFormation::Stack 引用子模板(TemplateURL),使用 DependsOn 控制依赖顺序,通过 !GetAtt 获取子堆栈输出。使用 aws cloudformation package 打包本地引用到 S3,再用 deploy 部署打包后的模板(需 CAPABILITY_AUTO_EXPAND)。
内置函数参考
涵盖 Ref、GetAtt、Sub、Join、Select、Split、If、Equals、ImportValue、Cidr、GetAZs 等内置函数的使用示例。
堆栈策略
通过 set-stack-policy 应用堆栈策略,可阻止对特定资源(如 Database)的替换或删除操作。
事件与调试
提供 describe-stack-events 查看失败事件、continue-update-rollback 继续卡住的回滚(可跳过资源)、cancel-update-stack 取消进行中的更新、get-template 获取现有堆栈模板。
使用方式
该技能以参考文档形式提供,包含可直接使用的 AWS CLI 命令和 YAML 模板示例。用户需先满足前置条件(AWS CLI v2、IAM 权限、可选 cfn-lint、S3 存储桶),然后按照模板结构编写模板,通过堆栈操作命令进行部署和管理。安全更新建议使用变更集预览,定期执行漂移检测以发现手动变更。
适用场景
- AWS 原生 IaC 部署
- 多环境参数化部署
- 安全更新与回滚保护
- 配置漂移检测与修复
- 大型基础设施的嵌套堆栈组织
- 跨堆栈值导出/导入
限制
- 需要 AWS CLI v2 和相应 IAM 权限
- 大于 51,200 字节的模板需要 S3 存储桶
- 漂移检测仅能发现手动变更,需重新应用模板或更新模板以匹配当前状态
- 嵌套堆栈需要正确的 TemplateURL 和 S3 访问权限
- 导出名称必须唯一,否则会报错
- 删除堆栈时若资源被外部依赖引用会失败
故障排查
文档提供了常见问题、原因和修复方法的对照表,涵盖 IAM 资源创建失败(缺少 CAPABILITY_IAM)、堆栈卡在 UPDATE_ROLLBACK_FAILED、嵌套堆栈失败、循环依赖、漂移检测、变更集无变更、模板校验错误、导出名称已存在、删除失败等场景。
相关技能
- terraform-aws:使用 Terraform 的替代 IaC
- aws-iam:模板中的 IAM 资源
- aws-vpc:网络基础设施模板
- aws-ec2:模板中的计算资源
- aws-s3:模板中的存储资源