如何检测我是否在AWS Lambda环境中运行?

时间:2016-07-15 10:25:29

标签: amazon-web-services aws-lambda

我想检测我的代码是否在AWS Lambda环境中执行。有没有一个好的,有记录的方法来做到这一点?

目前,我依赖于Exploring The AWS Lambda Runtime Environment博客文章中描述的环境变量LAMBDA_TASK_ROOT的存在,感觉不对。

7 个答案:

答案 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 的处理程序中,我也可以确认该变量已公开/定义。