2016-07-15 59 views
2

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

目前我取决于Exploring The AWS Lambda Runtime Environment博客文章中描述的感觉错误的环境变量LAMBDA_TASK_ROOT的存在。

+0

你只是想知道如果代码跑?你需要通知吗?你想知道所有的时间,或只是检查它运行的地方? –

+0

您目前的解决方案就是我会做的。为什么感觉不对? –

+0

我根据环境更改配置。 感觉这是因为环境变量没有正式记录并且可能会在没有公告的情况下改变。 – sumek

回答

3

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

exports.handler = function(event, context, callback) { 
    process.env['LAMBDA_ENV'] = 'true'; 
    ... 
}; 
+0

我喜欢这个解决方案。谢谢! – sumek

4

有一个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源(具有更多的env瓦尔)https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html

+0

'const isHostedOnAWS = !!(process.env.LAMBDA_TASK_ROOT || process.env.AWS_EXECUTION_ENV);'像魅力一样工作,不依赖于第三方插件。好戏,谢谢! – Vadorequest

1

如果正在使用Lambda环境骗子,如优良lambda-local包,检查对例如LAMBDA_TASK_ROOT不起作用。

使用这个代替:

const isLambda = Boolean(process.env['AWS_LAMBDA_FUNCTION_NAME']); 
+0

也许也许这实际上是想要的...? :P faker的故意不应该设置所有这些值,所以你可以检测你是否真的在拉姆达,呃? :) – Farley

相关问题