我有AWS Lambda功能,需要~30秒。 当我将其连接到API网关时,由于5秒超时,它发送了504。所以我的easyCron工作失败了,不会再试一次(我只有一个免费的计划)
所以我需要一个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()
你知道如何解决这个问题吗?
答案 0 :(得分:5)
这是不正确的
InvocationType: 'RequestResponse'
你应该使用
InvocationType: 'Event'
来自http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax
默认情况下,Invoke API采用“RequestResponse”调用类型。您可以选择通过将“Event”指定为InvocationType来请求异步执行。
答案 1 :(得分:0)
您可以从SNS或S3 PutObject事件触发它,而不是直接调用您的30多秒Lambda函数。这将与您的API网关路由异步,因此它可以非常快速地返回。当然,那时你不会得到Lamdba工作的结果。