CloudFormation报错:嵌套栈创建失败及关联资源创建异常咨询
排查AWS CloudFormation嵌套栈创建失败的步骤
我来帮你捋捋这个嵌套栈的问题,这种多层栈的报错得从最底层的具体错误往上挖,咱们一步步拆解:
一、先抓最关键的Policy报错细节
你提到有个嵌套栈报了Policy contains a...的错误,这绝对是突破口!CloudFormation关于IAM策略的报错通常会明确指出问题点,比如语法错误、资源ARN格式不对、权限动作拼写错,或者策略大小超限。
- 立刻去AWS控制台的CloudFormation页面,找到那个报Policy错的嵌套栈,点开**事件(Events)**标签,定位到对应的资源(大概率是某个IAM角色的内联策略/托管策略),把完整报错信息抄下来。常见的场景包括:
Policy contains a statement with one or more invalid actions:检查策略里的AWS服务动作拼写,比如是不是把lambda:InvokeFunction写成了lambda:invokeInvalid resource ARN:核对策略里的ARN格式,比如是不是少了区域、账号ID,或者资源名称写错Policy document exceeds maximum allowed size:如果是内联策略,把它改成AWS::IAM::ManagedPolicy托管策略,再关联到角色上就行
二、排查AlignmentLambdaFunction嵌套栈的三个失败资源
这三个资源是Lambda函数和IAM执行角色,它们创建失败通常和权限、配置细节有关:
1. 两个IAM执行角色(HaploLambdaExecutionRole、AlignmentLambdaExecutionRole)
- 先看角色的创建失败原因:
- 信任策略(
AssumeRolePolicyDocument)是不是写错了?Lambda服务的信任主体必须是lambda.amazonaws.com,别搞混其他服务的主体 - 角色关联的策略是不是有上面提到的语法/权限问题?比如动作或资源配置错误
- 有没有设置错误的权限边界(PermissionsBoundary)?如果加了权限边界,得确保边界允许角色需要的所有操作
- 信任策略(
2. CloudspanLambdaFunction
Lambda创建失败的常见坑:
- 执行角色不存在或权限不足:比如角色没有函数需要的业务权限(比如访问S3、DynamoDB的权限);另外,创建Lambda的CloudFormation服务角色(如果父栈指定了
--role-arn)得有lambda:CreateFunction的权限 - 代码包问题:S3路径不对、代码包不存在,或者压缩包大小超过Lambda的50MB上限
- 运行时配置错误:比如指定了已弃用的运行时(比如
python3.7),或者Handler路径写错(比如把lambda_function.handler写成lambda.handler)
三、检查嵌套栈的权限传递
父栈创建嵌套栈时,权限是核心问题:
- 如果父栈用了服务角色(
aws cloudformation create-stack时指定了--role-arn),得确保这个角色有cloudformation:CreateStack权限去创建嵌套栈,同时拥有嵌套栈里所有资源的创建权限(比如iam:CreateRole、iam:PutRolePolicy、lambda:CreateFunction等) - 嵌套栈默认会继承父栈的服务角色,除非你在子模板的资源里单独指定了
RoleARN,所以要确认这个角色的权限覆盖了所有需要的操作
四、验证模板语法和参数引用
有时候参数传递或模板语法错误会导致资源配置失效:
- 检查父栈传给嵌套栈的参数是不是正确,比如有没有把错误的ARN、名称传给子模板
- 用
aws cloudformation validate-template命令分别验证每个子模板的语法,比如YAML的缩进问题、JSON的括号不匹配,这些低级错误很容易被忽略
举个典型例子:如果你的IAM策略里写了"Action": ["lambda:*"]但实际只需要特定动作,或者把S3资源ARN写成arn:aws:s3:my-bucket/*(少了::),都会直接触发Policy报错。
最后提醒:一定要先把那个Policy的完整报错信息找出来,它是最直接的线索,顺着这个线索排查完对应的资源,再处理其他失败的资源就清晰多了。
内容的提问来源于stack exchange,提问作者claudiadast
相关产品推荐
相关产品推荐

