我想检测我的代码是否在AWS Lambda环境中执行。有没有一个好的,有记录的方法来做到这一点?
目前,我依赖于Exploring The AWS Lambda Runtime Environment博客文章中描述的环境变量LAMBDA_TASK_ROOT的存在,感觉不对。
答案 0 :(得分:10)
您可以检查process.env属性:
const isLambda = !!(process.env.LAMBDA_TASK_ROOT || false);
if (isLambda) {
// You're on AWS Lambda
} else {
// Local or elsewhere
}
感谢watson/is-lambda发现。
编辑:官方AWS来源(包含更多环境)https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
答案 1 :(得分:5)
处理此问题的最佳方法是自行跟踪。特别是,您可以在lambda入口点之后设置全局变量或环境变量。例如,在node.js中:
timeofPostingToTheServer
答案 2 :(得分:0)
如果您使用的是Lambda环境保护程序,例如优秀的lambda-local软件包,请检查LAMBDA_TASK_ROOT不起作用。
请改用:
const isLambda = Boolean(process.env['AWS_LAMBDA_FUNCTION_NAME']);
答案 3 :(得分:0)
如果您想检测代码是否在本地Lambda(aws-sam-cli)或实际Lambda中运行,请使用AWS_SAM_LOCAL
environment variable。
function isRunningLocalLambda() {
return process.env.AWS_SAM_LOCAL === 'true';
}
答案 4 :(得分:0)
在使用无服务器框架在本地调用函数时,可以使用检查IS_LOCAL
环境变量:
const isRunningLocally = () => process.env.IS_LOCAL === 'true'
答案 5 :(得分:0)
我实际使用
const isAWSLambda = process.env.PWD?.startsWith(
"/var/task"
);
答案 6 :(得分:0)
我也建议一些可能对从 Docker 容器工作有弹性的东西。有一个 Lambda 环境变量列表 (https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html),但其中许多不一定与该上下文相关。但是,AWS_LAMBDA_FUNCTION_NAME 似乎是通用的。即使在基于 Docker 的处理程序中,我也可以确认该变量已公开/定义。