AWS Lambda获取上下文消息

时间:2015-01-12 00:11:57

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

我正在使用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')的消息......

知道如何获取消息吗?

2 个答案:

答案 0 :(得分:5)

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

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

  1. 创建SQS队列
  2. 让您的Lambda函数将其结果写入此队列
  3. 在您的客户端中,轮询队列以获得结果

答案 1 :(得分:2)

您正在调用invokeAsync,因此您的Lambda函数是异步运行的。这意味着您获得成功意味着您的功能成功启动,而不是在完成后。

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