如何向sam local运行的Lambda函数注入环境变量
问题原因
sam local invoke 的 -n 参数指定的环境变量文件不会直接将键值对注入Lambda运行时,需要和SAM模板配置配合使用,这是配置未生效的核心原因。
两种解决方法
方法1:通过模板参数传递(适合需要同步部署到云端的场景)
- 第一步:修改你的
template.yaml文件,先声明参数再关联到Lambda环境变量
# 模板顶层新增Parameters段,定义要传入的参数 Parameters: PPPPPPPPPPPPPPPPPPPPP1: Type: String PPPPPPPPPPPPPPPPPPPPP2: Type: String PPPPPPPPPPPPPPPPPPPPP3: Type: String Resources: # 这里替换为你自己定义的Lambda函数逻辑ID YourLambdaFunction: Type: AWS::Serverless::Function Properties: # 原有配置(CodeUri、Handler、Runtime等)保持不变,新增以下环境变量配置 Environment: Variables: PPPPPPPPPPPPPPPPPPPPP1: !Ref PPPPPPPPPPPPPPPPPPPPP1 PPPPPPPPPPPPPPPPPPPPP2: !Ref PPPPPPPPPPPPPPPPPPPPP2 PPPPPPPPPPPPPPPPPPPPP3: !Ref PPPPPPPPPPPPPPPPPPPPP3
- 第二步:你当前的
test.json格式完全符合该方法要求,无需修改,直接执行原有启动命令即可生效。
方法2:直接注入环境变量(适合本地临时测试,无需修改模板参数)
- 第一步:修改
test.json结构,顶层键替换为你的Lambda函数在模板中的逻辑ID,嵌套EnvironmentVariables字段存放环境变量:
{ "YourLambdaFunction": { "EnvironmentVariables": { "PPPPPPPPPPPPPPPPPPPPP1": "PPPPPPPPPPPPPPPPPPPPP1", "PPPPPPPPPPPPPPPPPPPPP2": "PPPPPPPPPPPPPPPPPPPPP2", "PPPPPPPPPPPPPPPPPPPPP3": "PPPPPPPPPPPPPPPPPPPPP3" } } }
注意将上述YourLambdaFunction替换为你template.yaml中实际定义的Lambda资源逻辑ID
- 第二步:执行原有启动命令即可,环境变量会直接注入Lambda运行时。
内容的提问来源于stack exchange,提问作者Itay Moav -Malimovka
相关产品推荐
相关产品推荐

