使用API​​网关与node.js同步执行两个或多个Lambda函数

时间:2018-01-22 10:47:12

标签: aws-lambda aws-api-gateway

我想通过API网关执行Lambda函数,在这个Lambda函数中,我调用了3个其他Lambda函数和8个扫描查询。这些过程的组合将完成我的业务逻辑以执行某些操作并找到我需要使用SNS向其发送通知的用户。问题是当我从第一个Lambda函数调用Lambda函数时,它不会等到内部Lambda函数继续执行代码。由于这个原因,我无法根据内部Lambda函数得到答案,并始终作为成功回应回调。

1 个答案:

答案 0 :(得分:0)

有一些代码示例会有所帮助,但是,我猜你可能没有正确调用你的lambda函数。 请参阅Invoke an AWS.Lambda function from within another lambda function

在您的情况下,我认为您可能正在调用lambda调用范围之外的context.succeed函数。

我认为你可能在做什么:

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  const lambdaResponse = lambda.invoke(lambdaParams)

  context.succeed(...)
};

我认为你应该做的事情:

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  lambda.invoke(lambdaParams, function(err, data) {
    if (err) {
      context.fail(err); // AWS recommends using the callback instead of context
    } else {
      context.succeed('Lambda_B said '+ data.Payload);
    }
  })
};

更新:2018年1月23日根据收到的关于通过AWS推荐的方式收到的评论

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  lambda.invoke(lambdaParams, function(err, data) {
      // if using API gateway, you may want to serialize the data (i 
      // think the error response too), which requires an object
      // containing either/all statusCode, body, header e.g: 
      // {statusCode: 200, header: {}, body: JSON.stringify(data)}
    if (err) {
      callback(err, null)
    } else {
      callback(null, data) 
    }
  })
};