如何检测我是否在 AWS Lambda 环境中 运行?
How to detect if I'm running in AWS Lambda environment?
我想检测我的代码是否在 AWS Lambda 环境中执行。有没有好的、有记录的方法来做到这一点?
目前我依赖于 Exploring The AWS Lambda Runtime Environment 博客 post 中描述的环境变量 LAMBDA_TASK_ROOT 的存在,感觉不对。
处理此问题的最佳方法是自行跟踪。特别是,您可以在 lambda 入口点之后设置全局变量或环境变量。例如,在 node.js:
exports.handler = function(event, context, callback) {
process.env['LAMBDA_ENV'] = 'true';
...
};
有一个 process.env
属性 你可以检查:
const isLambda = !!process.env.LAMBDA_TASK_ROOT;
if (isLambda) {
// You're on AWS Lambda
} else {
// Local or elsewhere
}
发现归功于 watson/is-lambda。
编辑:官方 AWS 来源(具有更多环境变量)https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
如果您使用的是 Lambda 环境 faker,比如优秀的 lambda-local 包,请检查例如LAMBDA_TASK_ROOT 不起作用。
改用这个:
const isLambda = Boolean(process.env['AWS_LAMBDA_FUNCTION_NAME']);
如果您想检测您的代码是本地 Lambda (aws-sam-cli) 还是真正的 Lambda 中的 运行,可以使用 AWS_SAM_LOCAL
environment variable.
function isRunningLocalLambda() {
return process.env.AWS_SAM_LOCAL === 'true';
}
使用Serverless Framework在本地调用函数时,可以检查IS_LOCAL
环境变量:
const isRunningLocally = () => process.env.IS_LOCAL === 'true'
我真的用
const isAWSLambda = process.env.PWD?.startsWith(
"/var/task"
);
我会建议一些可能也可以在 Docker 容器中工作的东西。有一个 Lambda 环境变量列表 (https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html),但其中许多不一定与该上下文相关。但是,AWS_LAMBDA_FUNCTION_NAME 似乎是通用的。即使在基于 Docker 的处理程序中,我也可以确认变量是 exposed/defined。
我想检测我的代码是否在 AWS Lambda 环境中执行。有没有好的、有记录的方法来做到这一点?
目前我依赖于 Exploring The AWS Lambda Runtime Environment 博客 post 中描述的环境变量 LAMBDA_TASK_ROOT 的存在,感觉不对。
处理此问题的最佳方法是自行跟踪。特别是,您可以在 lambda 入口点之后设置全局变量或环境变量。例如,在 node.js:
exports.handler = function(event, context, callback) {
process.env['LAMBDA_ENV'] = 'true';
...
};
有一个 process.env
属性 你可以检查:
const isLambda = !!process.env.LAMBDA_TASK_ROOT;
if (isLambda) {
// You're on AWS Lambda
} else {
// Local or elsewhere
}
发现归功于 watson/is-lambda。
编辑:官方 AWS 来源(具有更多环境变量)https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
如果您使用的是 Lambda 环境 faker,比如优秀的 lambda-local 包,请检查例如LAMBDA_TASK_ROOT 不起作用。
改用这个:
const isLambda = Boolean(process.env['AWS_LAMBDA_FUNCTION_NAME']);
如果您想检测您的代码是本地 Lambda (aws-sam-cli) 还是真正的 Lambda 中的 运行,可以使用 AWS_SAM_LOCAL
environment variable.
function isRunningLocalLambda() {
return process.env.AWS_SAM_LOCAL === 'true';
}
使用Serverless Framework在本地调用函数时,可以检查IS_LOCAL
环境变量:
const isRunningLocally = () => process.env.IS_LOCAL === 'true'
我真的用
const isAWSLambda = process.env.PWD?.startsWith(
"/var/task"
);
我会建议一些可能也可以在 Docker 容器中工作的东西。有一个 Lambda 环境变量列表 (https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html),但其中许多不一定与该上下文相关。但是,AWS_LAMBDA_FUNCTION_NAME 似乎是通用的。即使在基于 Docker 的处理程序中,我也可以确认变量是 exposed/defined。