我正在为Node 4.3 as a runtime运行用于图像/视频处理的AWS Lambda函数。我使用节点aws-sdk从我的webapp代码调用我的函数。AWS Lambda调用函数并不总是返回
问题是,当函数花费很长时间执行(例如250秒)时,调用回调从不会被接收到,尽管我可以在aws cloudwatch日志中清楚地看到该函数正确执行。除此之外,函数至少再次重新运行两次(这可能与调用中的maxRetries参数有关:因为它没有得到响应,所以重试)。
让我困惑的是,它适用于更快速的函数,而且我的lambda函数永远不会超时。任何人有这样的问题?它可以与新的4.3运行时相关吗?请注意,我省略了context.succeed()
或context.fail()
,因为它不再是必需的,但我试过了,它不会改变任何事情。
LAMBDA代码
...
var handler = function (event, context, callback) {
// video/image processing code
//
// callback function
..., function(err, result) {
if (err) {
console.log("Error", err, err.stack);
callback(err);
} else {
console.log("Done");
callback(null, result);
}
}
};
LAMBDA调用
var lambda = new AWS.Lambda;
var myEventObject = {...};
var payload = JSON.stringify('myEventObject');
var params = {
FunctionName: 'myLambdaFunction'
InvocationType: 'RequestResponse',
LogType: 'None',
Payload: payload
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
LAMBDA CloudWatch的登录
REPORT RequestId: xxx Duration: 206757.82 ms Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB
我怀疑sdk的超时配置是240秒,这可能会解释你得到一个重试。你可以尝试在你的cli中改变这个配置吗? – Tom
否超时配置设置为最大值:300秒。如果超过300秒,功能会超时,我可以在CloudWatch日志中看到它。如果我将超时设置为较低的值(例如30秒),则该函数返回超时错误,并捕获回调错误。 –
请注意,我不是在谈论lambda的超时,而是从sdk配置的那个,你呢? – Tom