使用AWS CloudFormation部署双AZ公私VPC及栈回滚问题排查
架构合理性说明
你描述的「公网7层负载均衡转发流量到私有子网Fargate实例、私有子网通过NAT网关访问公网」确实是AWS上非常通用的无服务器Web服务标准架构,符合安全和高可用最佳实践,架构本身没有问题。
快速定位栈回滚原因的方法
CloudFormation栈创建失败回滚时,所有错误都会被记录在事件日志中,你可以通过以下两种方式快速定位:
- 控制台查询:打开AWS CloudFormation控制台,找到
dev-network栈,进入「事件」标签,按时间倒序排序,找到状态为CREATE_FAILED的条目,对应的「状态原因」会直接给出失败的具体原因。 - CLI查询:执行以下命令直接筛选失败事件:
aws cloudformation describe-stack-events --stack-name dev-network --query 'StackEvents[?ResourceStatus==`CREATE_FAILED`]'
你当前模板的问题及修复
你提供的模板存在HTML转义字符错误,在NoIngressSecurityGroup资源的属性定义中:
GroupName: "no-ingress-sg" GroupDescription: "Security group with no ingress rule"
"是HTML格式的双引号转义编码,CloudFormation的YAML解析器无法识别该转义,会将"直接作为字符串的一部分处理,而EC2安全组的名称不允许包含&这类特殊字符,直接触发资源创建失败,进而导致整栈回滚。
修复方案:将两处"替换为正常的双引号,或者直接去掉引号(YAML中纯字符串不需要额外加引号)即可:
NoIngressSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupName: "no-ingress-sg" GroupDescription: "Security group with no ingress rule" VpcId: !Ref VPC
模板优化建议
- 成本优化:如果业务对AZ级容灾要求不高,可以只保留1个NAT网关,同时关联两个私有子网的路由表,可降低一半的NAT网关使用成本。
- 标签优化:给NAT网关、EIP资源也增加Name和Env标签,方便后续资源分类管理。
- 体验优化:可添加
AWS::CloudFormation::Interface配置,在控制台部署时将参数按类别分组展示,操作更友好。
内容的提问来源于stack exchange,提问作者Zazaeil
相关产品推荐
相关产品推荐

