CloudFormation模板为Lambda配置现有IAM角色校验失败问题
报错根因
AWS::Lambda::Function的Role属性强制要求输入符合IAM角色规范的完整ARN,系统会对输入值做正则格式校验,只要格式不符合规则,不管角色是否真实存在都会抛出pattern校验失败错误。
需排查/调整的配置点
- 补全角色ARN的路径字段
多数情况下报错是因为ARN遗漏了角色路径:IAM角色创建时可指定路径(控制台默认创建的服务角色路径为/service-role/,未指定路径的自定义角色默认路径为/),完整ARN规则为arn:aws:iam::${账号ID}:role${路径}${角色名}。例如角色路径为/app-team/时,正确ARN为arn:aws:iam::123456789012:role/app-team/MyCustomRole,漏写路径会直接触发格式校验失败。 - 适配跨账户场景用动态ARN拼接写法
跨账户部署的场景不需要硬编码账号ID,可配合CloudFormation内置伪参数动态生成对应账户的ARN,同时支持参数传入路径和角色名,参考正确模板写法:"Parameters" : { "ExistingRoleName" : { "Type" : "String", "Default" : "MyCustomRole" }, "ExistingRolePath" : { "Type" : "String", "Default" : "/", "Description" : "IAM角色的路径,末尾无需加斜杠" } }, "Resources" : { "CustomLambdaFunction" : { "Type" : "AWS::Lambda::Function", "Properties" : { "MemorySize" : 128, "Role" : { "Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role${ExistingRolePath}/${ExistingRoleName}" } // 剩余Lambda配置项 } } } - 检查模板语法与分区配置
你贴出的第一版模板中Parameters块结束后缺少逗号,会导致模板解析异常,间接触发属性校验错误;如果部署到AWS中国区,需要将ARN中的aws替换为aws-cn,否则也会匹配不上格式规则。
内容的提问来源于stack exchange,提问作者nevosial
相关产品推荐
相关产品推荐

