如何使用AWS SDK for Java调用AWS Lambda函数时检索context.done()消息?

时间:2015-02-13 01:13:09

标签: node.js amazon-web-services aws-sdk aws-lambda

我正在使用AWS SDK for Java来调用之前上传的一些AWS Lambda函数。 invokeAsync方法返回一个invokeAsyncResult对象,它似乎只包含一组非常有限的属性和方法。特别是,对象中包含的唯一相关信息是HTTP状态代码(例如,202表示成功)。似乎没有任何方法可用于检索提供给Lambda Node.js context.done()方法的错误代码或消息。

因此,无法直接从Lambda函数调用中获取任何“返回值”。我必须让Lambda处理程序将一个对象放到S3来存储返回值的JSON表示,然后使用Java SDK代码在消费者端获取对象的内容。

有没有人知道如何直接从Lambda函数中获取一些有意义的“返回值”?

1 个答案:

答案 0 :(得分:2)

在您的代码中,您可以查看lambda调用的结果:

lambda.invoke(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else {
        console.log(data);           // successful response
        if (data.Payload != '{}') {
            var jdata = JSON.parse(data.Payload);
            console.log(jdata.something);
            successCallback(jdata);
        }
        else successCallback(null);
    }
}); 

在Lambda函数中,您可以使用以下内容:

dynamodb.getItem(params, function(err, data) {
   if (err) {
      console.log(err);
      context.fail(err);
   } else {
      console.log(data);
      context.succeed(data);
   }
}

你也可以用context.done()替换context.succeed()     context.succeed(null,data);

在我描述的情况下,data.Payload将是从DynamoDB检索的JSON字符串。