SAM模板中!Sub使用!Ref时参数报错,如何解决?
解决SAM模板中Fn::Sub(!Sub)的语法错误
错误原因
你当前的!Sub写法不符合AWS CloudFormation/SAM的语法规范:!Sub的数组格式只允许两个元素——第一个是待替换的字符串模板,第二个是包含所有变量映射的单个对象,而你把ServiceName和stage分成了两个独立的数组元素,这就触发了参数格式错误。
修复方案
有两种可行的修复方式:
方式一:合并变量映射为单个对象
把变量的键值对放在同一个对象里,作为数组的第二个元素:
NOTIFICATION_ARN: !Sub - 'arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${stage}-${ServiceName}' - { ServiceName: !Ref ServiceName, stage: !Ref Stage }
方式二:简化写法(无需单独映射)
因为Stage和ServiceName都是模板中定义的参数,!Sub会自动识别模板内的参数/资源名称,所以可以直接在字符串中使用它们的原名(注意大小写匹配),省略单独的映射对象:
NOTIFICATION_ARN: !Sub 'arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${Stage}-${ServiceName}'
(如果你的业务逻辑必须用小写的stage作为ARN中的部分,就用方式一;如果直接用参数原名Stage也符合需求,方式二更简洁)
内容的提问来源于stack exchange,提问作者Dcook
相关产品推荐
相关产品推荐

