Amazon web services 如何检测I';我在AWS Lambda环境中运行?
我想检测我的代码是否在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
目前,我依赖于环境变量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'