我正在使用AWS控制台的测试功能:
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')的消息......
知道如何获取消息吗?
答案 0 :(得分:5)
正如Eric所说,目前Lambda并没有提供REST端点来运行该函数并返回其结果,但可能在将来。
现在,您最好的选择是使用像lambdaws这样的库,它为您包装函数部署和执行,并通过SQS队列处理返回结果。如果您想通过滚动自己的解决方案来获得更多控制权,那么这个过程非常简单:
答案 1 :(得分:2)
您正在调用invokeAsync,因此您的Lambda函数是异步运行的。这意味着您获得成功意味着您的功能成功启动,而不是在完成后。
在撰写本文时,AWS Lambda尚未提供同步调用函数的方法,将函数中的信息直接返回给调用者。但是,这似乎是一个常见的请求,亚马逊公开声明他们正在考虑这个功能。