2016-07-15 77 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

相關問題