CloudFormation模板Join函数参数错误问题求助
排查并解决CloudFormation模板的Mapping错误
我来帮你搞定这个CloudFormation模板的问题,错误的根源其实有两个关键点,咱们一步步拆解解决:
错误原因分析
- Mapping不支持数组值:你的
KensisAPIMap里用了YAML数组语法(- !Join [...]),但CloudFormation的Mapping要求每个键对应的值必须是字符串、数字这类简单类型,不能是数组。这个错误的数组结构被CloudFormation误解析,导致它判定你的!Join参数格式不符合要求,抛出了那个提示。 - 多余的!Join使用:比如
us-west-2下的devOne,!Sub已经能直接生成目标字符串,完全没必要再用!Join包裹,反而增加了模板复杂度。
修正后的模板片段
下面是调整后的Mappings部分,修复了数组问题并简化了冗余的拼接:
Mappings: DataAPIMap: us-west-2: DevOne: "09lvg5kd1l/*/PUT/*/*/*/v2" TestOne: "default" eu-central-1: devTwo: "sixv6a77sg/*/PUT/*/*/*/v2" TestTwo: "default" KensisAPIMap: us-west-2: devOne: !Sub '${AWS::Region}:${AWS::AccountId}:we4x5ulbsl/*/PUT/s' eu-central-1: devTwo: !Join ["", ['us-west-2', !Ref KensisActId ,':we4x5ulbsl/*/PUT/s']]
额外验证点
- 确认
KensisActId是一个有效的栈参数或资源引用,否则会触发新的错误。 - 现在你在策略中使用
!FindInMap[KensisAPIMap, !Ref "AWS::Region", !Ref envname]时,返回的是符合要求的字符串,能正常匹配API Gateway URI。
内容的提问来源于stack exchange,提问作者Dev Role
相关产品推荐
相关产品推荐

