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

AWS SAM CLI模板中能否用!Sub引用拼接同块其他环境变量?

不可以在Environment.Variables声明块内使用!Sub引用同一块中声明的其他环境变量,具体原因和解决方法如下:

根本原因

CloudFormation(SAM底层基于CloudFormation实现)的内置函数(如!Sub、!Ref等)的解析执行时机是模板部署阶段,而你在Environment.Variables下定义的所有环境变量,是部署完成后才会注入到Lambda运行时的配置项,两者的生效阶段完全错开。
你在!Sub中写的${ENV}会被CloudFormation判定为引用模板级的ENV参数/资源/导出值,找不到对应模板资源的情况下就会原样保留ENV字符串,最终拼接出/ENV/type/app1/的错误结果。

推荐解决方案

方案1:将环境标识提取为模板级参数

把环境名定义为模板参数,部署阶段!Sub就能直接读取到对应值,写法参考:

# 模板开头定义参数
Parameters:
  Env:
    Type: String
    Default: DEV
    AllowedValues: ["DEV", "PROD"]

# Lambda函数的环境变量配置
Environment:
  Variables:
    ENV: !Ref Env
    SSM_PS_APP1_PATH: !Sub "/${Env}/type/app1/"

如果是多环境部署,你可以在samconfig.toml中给不同环境配置对应的Env参数值,部署时自动传入不需要手动修改模板。

方案2:运行时在Lambda代码中拼接路径

如果不想调整模板结构,可以直接在Lambda代码里读取运行时的ENV环境变量,自行拼接Parameter Store的路径,这种方式不需要修改模板逻辑,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:03