2017-03-08 148 views
2

我試圖從外部node.js應用程序(即不在AWS上)調用lambda函數。 我使用AWS文檔中的代碼示例,它適用於名義情況。 但是,在發生錯誤的情況下,它不會被我的調用函數正確處理。aws lambda錯誤處理

我的調用代碼如下:

//AWS.config before 
 
    
 
    var pullParams = { 
 
     FunctionName : 'myFunctionName', 
 
     InvocationType : 'RequestResponse', 
 
     LogType : 'None', 
 
     Payload : JSON.stringify({ 
 
      "myParam" : params 
 
     }) 
 
    } 
 

 
    var lambda = new AWS.Lambda(); 
 

 
    lambda.invoke(pullParams, function(invocationError, data) { 
 
     console.log("error value: " + invocationError) 
 
     if (invocationError) { 
 
      console.log("Error invoking AWS " + invocationError); 
 
      //process error 
 
     } else { 
 
      //process payload 
 
     } 
 
    });

在我的lambda表達式,我提出一個錯誤,如果沒有提供PARAMS和提供錯誤消息

exports.handler = (event, context, callback) => { 
 

 
    var params = event.myParam 
 

 
    if (!params){ 
 
     var error = new Error("Appropriate error message"); 
 
     callback(error) 
 
    } 
 
    else{ 
 
     //do normal processing and create payload 
 
     callback(null, "Payload") 
 
    } 
 
}

但是,測試「invocationError」始終爲空,即使我沒有提供輸入參數。它總是處理有效負載(當我登錄時,我可以看到我的錯誤消息)。

我在這裏錯過了什麼?而不是回調

+0

我的問題是......當它調用失敗時,'err'是否被設置,而不是當你返回錯誤響應?這似乎是你所看到的行爲。我還沒有使用javascript sdk來調用lambda函數,所以我不確定它的用途。 [文檔](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property)有些不清楚 –

+1

看看[這裏]的文檔(http:// docs。 aws.amazon.com/lambda/latest/dg/API_Invoke.html)似乎支持從函數返回一個錯誤的想法不會導致錯誤被設置和一個錯誤狀態碼,並且錯誤是你提供將在有效載荷中。 –

+1

的確如此;這並不一定是一種不好的做事方式;但代碼示例如[link](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda-function-full.html)將不正確,因此我懷疑這種方法是錯誤的 –

回答

-1

使用context.fail()(ERR),以獲得處理故障

+0

'context.fail()'是舊的,不贊成使用的方法。 '回調(err)'是新推薦的方法。 –

+0

並使用context.fail帶來相同的結果。 InvocationError始終爲空 –

0

我可以用一種變通方法,如有效載荷測試獲得:

//如果(invocationError){

如果(data.FunctionError){< == NULL如果沒有錯誤,「已處理」,如果返回錯誤

這在技術上的作品,但每一個從它的代碼不同snipplet我找到了解決。

+0

這就是我找到的。 data.FunctionError存在於錯誤結果中,但錯誤對象爲空。不太確定該怎麼做。 – Adam