aws lambda:通过其他lambda函数调用函数

aws lambda: invoke function via other lambda function

我有一个 AWS Lambda 函数,需要大约 30 秒。 当我将它连接到 API 网关时,由于 5 秒超时,它正在发送 504。所以我的 easyCron Job 失败了,不会再试了(我只有一个免费计划)

所以我需要一个 API,它可以发送正确的 200 状态。 我的想法:

通过短期 lambda 调用长期 lambda。 策略允许调用。

这是代码

var AWS = require('aws-sdk'),

 params = {
  FunctionName: 'cctv',
  InvocationType: 'RequestResponse',
  LogType: 'Tail'
 },
 lambda;
AWS.config.update({region: 'us-east-1'});
lambda = new AWS.Lambda();

exports.handler = function (event, context) {
 'use strict';
 lambda.invoke(params, function (err, data) {
  if (err) {
   console.log(err, err.stack);
  }
  else {
   console.log(data);
  }
 });
 context.succeed('hey cron job, I think my lambda function is not called');

};

但我认为,context.succeed() 中止了 lambda.invoke()

的执行

你知道如何解决这个问题吗?

与其直接调用 30 多个第二个 Lambda 函数,不如从 SNS 或 S3 PutObject 事件中触发它。这将与您的 API 网关路由异步,因此它可以 return 非常快。当然,你当时不会有Lamdba作业的结果。

这是不正确的

InvocationType: 'RequestResponse'

你应该使用

InvocationType: 'Event'

来自http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax

By default, the Invoke API assumes "RequestResponse" invocation type. You can optionally request asynchronous execution by specifying "Event" as the InvocationType.