aws lambda错误处理

问题描述:

我试图从外部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)将不正确,因此我怀疑这种方法是错误的 –

使用context.fail()(ERR),以获得处理故障

+0

'context.fail()'是旧的,不赞成使用的方法。 '回调(err)'是新推荐的方法。 –

+0

并使用context.fail带来相同的结果。 InvocationError始终为空 –

我可以用一种变通方法,如有效载荷测试获得:

//如果(invocationError){

如果(data.FunctionError){< == NULL如果没有错误,“已处理”,如果返回错误

这在技术上的作品,但每一个从它的代码不同snipplet我找到了解决。

+0

这就是我找到的。 data.FunctionError存在于错误结果中,但错误对象为空。不太确定该怎么做。 – Adam