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.
我有一个 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.