Amazon web services 如何检测I';我在AWS Lambda环境中运行?

Amazon web services 如何检测I';我在AWS Lambda环境中运行?,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我想检测我的代码是否在AWS Lambda环境中执行。有没有一个好的、有文档记录的方法来做到这一点 目前,我依赖于环境变量LAMBDA_TASK_ROOT的存在,这在博客文章中被描述为感觉不对。处理这个问题的最好方法是自己跟踪它。特别是,可以在lambda入口点之后设置全局变量或环境变量。例如,在node.js中: exports.handler = function(event, context, callback) { process.env['LAMBDA_ENV'] = 'tru

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


目前,我依赖于环境变量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
}
这一发现归功于我们


编辑:官方AWS源代码(有更多的环境变量)

如果您使用的是Lambda环境伪造软件,比如优秀的软件包,那么检查Lambda_任务_根目录就不起作用

改用这个:

const isLambda=Boolean(process.env['AWS\u LAMBDA\u FUNCTION\u NAME']);

如果要检测代码是在本地Lambda(aws sam cli)中运行还是在真实Lambda中运行,有以下选项


当使用无服务器框架在本地调用函数时,您可以检查
是否为本地
环境变量:

const isRunningLocally = () => process.env.IS_LOCAL === 'true'
我实际上使用

const isAWSLambda=process.env.PWD?.startsWith(
“/var/task”
);

我建议也可以使用Docker容器。有一个Lambda环境变量列表(),但其中许多变量不一定与该上下文相关。然而,AWS_LAMBDA_函数名称似乎是通用的。我可以确认,即使在基于Docker的处理程序中,变量也已公开/定义。

您只想知道代码是否已运行?你需要通知吗?你想一直知道,还是只是检查它是否运行过?你当前的解决方案就是我要做的。为什么感觉不对?我会根据环境更改配置。因为环境变量没有正式的文档记录,可能会在不公布的情况下更改,所以感觉很痛苦。@sumek它有正式的文档记录,我喜欢这个解决方案。谢谢使用这种方法无法区分活动AWS Lambda环境和本地环境。也许这是实际需要的…?:P伪造者故意不应该设置所有这些值,这样你就可以检测到你是否真的在lambda,嗯?:)@Farley确切地说,本地环境不是AWS Lambda环境。
const isHostedOnAWS=!!(process.env.LAMBDA_TASK_ROOT|process.env.AWS_EXECUTION_env)
就像一个魔咒,不依赖第三方插件。好把戏,谢谢!这对我不起作用,
是本地的
env var是
false
,即使我使用
离线运行
const isRunningLocally = () => process.env.IS_LOCAL === 'true'