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

伪参数插件弃用后Serverless栈名等CloudFormation伪参数引用方法

Serverless Framework 原生使用 CloudFormation 伪参数指南

自serverless-pseudo-parameters插件弃用后,所有伪参数能力已经被框架原生支持,不需要安装额外插件,按照以下规则使用即可:

常见报错原因

你之前遇到的'null' values are not allowed in templates错误和框架支持无关,是YAML缩进错误导致的:你写的Ref: "AWS::StackName"和Stack键是同级关系,相当于Stack对应的值为null,CloudFormation模板校验自然不通过。

两类使用场景

1. 支持Serverless变量语法直接调用的参数

这类参数可以在serverless.yml任意位置直接用${aws:xxx}格式引用,框架会在生成CloudFormation模板阶段直接替换为对应值:

  • ${aws:accountId}:当前部署账号的ID
  • ${aws:region}:当前部署的AWS区域

2. 其余CloudFormation伪参数用法

对于${aws:xxx}语法不支持的伪参数(包括AWS::StackName、AWS::Partition、AWS::URLSuffix、AWS::StackId等),直接在Resources、Outputs等CloudFormation原生配置块里写标准CloudFormation语法即可,框架不会篡改这部分内容,会原封不动传给CloudFormation生效:

  • 最简写法:直接在Fn::Sub里调用伪参数,不需要额外写变量映射,Fn::Sub原生支持识别${AWS::xxx}格式的伪参数:
# 你的示例代码最简正确写法
Fn::Sub: "${AWS::StackName}-someOutputResourceName"
  • 如果需要自定义变量别名映射,注意YAML缩进层级,Ref必须是对应变量键的子属性:
Fn::Sub:
  - "${Stack}-someOutputResourceName"
  - Stack:
      Ref: "AWS::StackName" # 这里要缩进两层,属于Stack的值
  • 也可以直接用Ref语法单独引用伪参数:
ResourceName:
  Ref: "AWS::StackName"

注意事项

  • Serverless变量解析阶段早于CloudFormation部署,不要在非CloudFormation原生配置块(比如插件配置、服务自定义配置块)里写${AWS::xxx}格式的内容,框架会把它当成自身变量解析,识别不到就会报错。
  • 如果在Serverless解析阶段就需要获取栈名,在你没有自定义栈名的前提下,直接用${self:service}-${self:stage}就能得到和AWS::StackName完全一致的值,不需要调用CloudFormation伪参数。
  • 常用的ARN拼接场景可以直接用Fn::Sub简化,自动适配不同AWS分区:
# 自动适配标准区、中国区、GovCloud的ARN格式
Fn::Sub: "arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:my-func"

内容的提问来源于stack exchange,提问作者Mekki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:24:12