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

时间:2015-09-25 10:47:08

标签: amazon-web-services aws-lambda invoke

我有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()

的执行

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

2 个答案:

答案 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工作的结果。