2015-01-12 30 views
3

我使用从AWS控制台测试功能:AWS LAMBDA获取上下文信息

console.log('Loading event'); 

exports.handler = function(event, context) { 
    console.log('value1 = ' + event.key1); 
    console.log('value2 = ' + event.key2); 
    console.log('value3 = ' + event.key3); 
    context.done(null, 'Hello World'); // SUCCESS with message 
}; 

,并呼吁它的NodeJS如下:

var params = { 
    FunctionName: 'MY_FUNCTION_NAME', /* required */ 
    InvokeArgs: JSON.stringify({ 
    "key1": "value1", 
    "key2": "value2", 
    "key3": "value3" 
    }) 
}; 

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

,一切工作正常:

//Console Output 
{ Status: 202 } 

但我期待从context.done(null,'Message')接收消息以及...

任何想法如何获取消息?

回答

4

正如Eric所说,目前Lambda不提供REST端点来运行该功能并返回其结果,但可能在将来。

现在,您最好的选择是使用像lambdaws这样的库,它为您包装函数的部署和执行,并通过SQS队列处理返回的结果。如果您想通过滚动自己的解决方案更多的控制权,这个过程很简单:

  1. 创建SQS队列
  2. 让你的lambda函数写其结果到这个队列
  3. 在您的客户端,轮询排队结果
1

您正在调用invokeAsync,因此您的Lambda函数是异步运行的。这意味着你的成功意味着你的功能成功返回开始,而不是在它完成之后。

在撰写本文时,AWS Lambda尚未提供同步调用某个函数的方法,它将函数中的信息直接返回给调用者。不过,这似乎是一个常见的要求,亚马逊已公开表示他们正在考虑该功能。