SuperAPI AI 工具集

cloudformation

部署与运维

查看项目

更新于 10-15 11:56

技能介绍

用途

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:模板中的存储资源