2016-04-15 39 views
2

我正在爲Node 4.3 as a runtime運行用於圖像/視頻處理的AWS Lambda函數。我使用節點aws-sdk從我的webapp代碼調用我的函數。AWS Lambda調用函數並不總是返回

問題是,當函數花費很長時間執行(例如250秒)時,調用回調從不會被接收到,儘管我可以在aws cloudwatch日誌中清楚地看到該函數正確執行。除此之外,函數至少再次重新運行兩次(這可能與調用中的maxRetries參數有關:因爲它沒有得到響應,所以重試)。

讓我困惑的是,它適用於更快速的函數,而且我的lambda函數永遠不會超時。任何人有這樣的問題?它可以與新的4.3運行時相關嗎?請注意,我省略了context.succeed()context.fail(),因爲它不再是必需的,但我試過了,它不會改變任何事情。

LAMBDA代碼

... 
var handler = function (event, context, callback) { 
    // video/image processing code 
    // 
    // callback function 
    ..., function(err, result) { 
     if (err) { 
      console.log("Error", err, err.stack); 
      callback(err); 
     } else { 
      console.log("Done"); 
      callback(null, result); 
     } 
    } 
}; 

LAMBDA調用

var lambda = new AWS.Lambda; 

var myEventObject = {...}; 
var payload = JSON.stringify('myEventObject'); 

var params = { 
    FunctionName: 'myLambdaFunction' 
    InvocationType: 'RequestResponse', 
    LogType: 'None', 
    Payload: payload 
}; 

lambda.invoke(params, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

LAMBDA CloudWatch的登錄

REPORT RequestId: xxx Duration: 206757.82 ms Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB 
+0

我懷疑sdk的超時配置是240秒,這可能會解釋你得到一個重試。你可以嘗試在你的cli中改變這個配置嗎? – Tom

+0

否超時配置設置爲最大值:300秒。如果超過300秒,功能會超時,我可以在CloudWatch日誌中看到它。如果我將超時設置爲較低的值(例如30秒),則該函數返回超時錯誤,並捕獲回調錯誤。 –

+2

請注意,我不是在談論lambda的超時,而是從sdk配置的那個,你呢? – Tom

回答

4

一個s在註釋中聲明,aws sdk擁有自己的超時配置設置,即默認設置爲120秒(這是一個不同於lambda的超時設置)。

在當前情況下,由於lambda運行更多此超時,sdk假設失敗並觸發重試。

將此配置設置爲300秒應解決問題。正如Daniel T在評論中顯示的那樣,可以通過這種方式臨時改變它:var lambda = new AWS.Lambda({httpOptions {timeout:300000}});