如何在Lambda NodeJS中从serverless.yml获取服务名、函数名及环境名?
如何在Serverless函数中获取服务名、函数名及环境名?
嘿,我来帮你搞定这个问题!你的serverless.yml配置已经很清晰了,要在sample1里调用sample2并生成完整函数名(比如serverless-demo-app-dev-sample2),其实不需要手动硬编码,Serverless框架和AWS Lambda会自动给你的函数注入相关环境变量,直接读取就行。
直接通过环境变量获取所需值
Serverless框架会自动把服务、环境等核心信息注入到函数的环境变量中,你可以通过process.env直接读取:
- 服务名:
process.env.SERVICE_NAME—— 对应你serverless.yml里service字段的serverless-demo-app - 环境名(Stage):
process.env.STAGE或process.env.SERVERLESS_STAGE—— 默认是dev,如果部署时指定了其他stage(比如prod),这个值会自动更新 - 当前函数的完整名称:
process.env.AWS_LAMBDA_FUNCTION_NAME—— AWS Lambda自带的环境变量,会直接返回类似serverless-demo-app-dev-sample1这样的完整函数名
示例:在sample1中拼接sample2的完整函数名
下面是sample1/handler.js的示例代码,展示如何拼接出sample2的完整调用名称:
exports.handler = async (event) => { // 读取环境变量,加默认值避免意外情况 const serviceName = process.env.SERVICE_NAME; const stage = process.env.STAGE || 'dev'; const targetFunction = 'sample2'; // 拼接出完整的目标函数名 const fullFunctionName = `${serviceName}-${stage}-${targetFunction}`; // 这里就可以用fullFunctionName来调用sample2了,比如用AWS SDK的Lambda.invoke方法 console.log(`准备调用的函数:${fullFunctionName}`); return { statusCode: 200, body: JSON.stringify({ message: `目标函数名已生成`, targetFunction: fullFunctionName }) }; };
额外说明
这些环境变量都是Serverless框架自动注入的,不需要你在serverless.yml里额外配置。如果有自定义的环境变量需求,才需要在provider或functions节点下添加environment字段手动定义。
内容的提问来源于stack exchange,提问作者Chaitanya Joshi
相关产品推荐
相关产品推荐

