You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:13