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

sum*_*mek 5 amazon-web-services aws-lambda

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

目前我依赖于环境变量LAMBDA_TASK_ROOT的存在,这在探索AWS Lambda Runtime Environment博客文章中有所描述.

Jos*_*son 13

您可以检查process.env属性:

const isLambda = !!(process.env.LAMBDA_TASK_ROOT || false);

if (isLambda) {
  // You're on AWS Lambda
} else {
  // Local or elsewhere
}
Run Code Online (Sandbox Code Playgroud)

感谢沃森/ IS-拉姆达的发现.

编辑:官方AWS源(包含更多env vars)https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html

  • `const isHostedOnAWS = !!(process.env.LAMBDA_TASK_ROOT || process.env.AWS_EXECUTION_ENV);`就像一个超级按钮,并不依赖第三方插件。好招,谢谢! (3认同)
  • 如果不明显,则相反: ```const IS_LOCAL = !process.env.LAMBDA_TASK_ROOT;``` (2认同)

all*_*ejo 6

如果您想检测您的代码是在本地 Lambda (aws-sam-cli) 还是真正的 Lambda 中运行,则可以使用AWS_SAM_LOCAL环境变量

function isRunningLocalLambda() {
    return process.env.AWS_SAM_LOCAL === 'true';
}
Run Code Online (Sandbox Code Playgroud)


ata*_*lor 5

处理此问题的最佳方法是自己进行跟踪。特别是,您可以在lambda入口点之后设置全局变量或环境变量。例如,在node.js中:

exports.handler = function(event, context, callback) {
    process.env['LAMBDA_ENV'] = 'true';
    ...
};
Run Code Online (Sandbox Code Playgroud)

  • 使用这种方法,无法区分实时AWS Lambda环境还是本地环境。 (3认同)