保证回调后的aws lambda执行?

时间:2017-03-23 17:28:40

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

我通过API GW调用的node4 lambda函数生成一系列缓慢的API调用。 为了不让用户等到一切都完成,我计划让代码看起来像这样:

function(event, context, callback) {
  ...
  // Return users API GW call now
  callback(null, data);
  // Do the heavy lifting afterwards.
  longApiCall().then(otherLongApiCalls)
}

但现在我在AWS docs读到了: "回调将等到Node.js运行时事件循环为空,然后冻结进程并将结果返回给调用者"

这是否意味着API GW在longApiCalls完成之前或之后返回响应数据?

如果之后,是否有建议的方式如何及早返回"一切都结束之前?

2 个答案:

答案 0 :(得分:20)

在当前配置中,API网关将等待Lambda函数执行完毕后再发送响应。您的选择是:

  1. 将API Gateway端点的集成类型更改为 AWS Service ,并让API Gateway异步调用Lambda函数。记录在案here
  2. 让API网关调用的Lambda函数不做任何事情,只是异步调用另一个Lambda函数然后返回。
  3. 拥有API网关或API网关调用的Lambda函数,向SNS主题发送消息。然后让SNS主题触发处理长API调用的Lambda函数。这会使你的微服务分离一点。
  4. 拥有API网关或API网关调用的Lambda函数,触发AWS Step Function,配置为通过一个或多个Lambda函数处理长API调用。如果长API调用存在运行单个Lambda函数的执行时间限制为5分钟的风险,我会建议这种方法。

答案 1 :(得分:0)

选项5.让你的lambda函数将一条消息队列到SQS并从另一个lambda或ec2轮询队列,或者你想要进行繁重的工作。