我使用Node 4.3 as a runtime运行AWS Lambda函数进行图像/视频处理。我正在使用节点aws-sdk从我的webapp代码调用我的函数。
问题是当函数需要很长时间才能执行(例如250秒)时,永远不会收到调用回调,尽管我可以在aws cloudwatch日志中清楚地看到函数正确执行。最重要的是,该函数至少重新运行两次(这可能与调用的maxRetries参数有关:因为它没有得到响应它重试)。
令我困惑的是,它适用于更快的功能,我的lambda功能永远不会超时。谁有这样的问题?它可以与新的4.3运行时相关吗?请注意,我省略了lock_t l; // defines a lock of your system
// thread 1:
lock(l);
counter += 1;
unlock(l);
// thread 2:
lock(l);
do_something(counter);
unlock(l);
或context.succeed()
,因为它不再需要,但我尝试了它并且它没有改变任何东西。
Lambda代码
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 CloudWatch Log
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
});
答案 0 :(得分:5)
如评论中所述,aws sdk有自己的超时配置设置,默认情况下设置为120秒(这是与lambda设置不同的超时设置)。
在当前情况下,当lambda运行更多此超时时,sdk将假定失败并触发重试。
将此配置设置为300秒应该可以解决问题。正如Daniel T在评论中所示,临时更改可以通过以下方式实现:var lambda = new AWS.Lambda({httpOptions {timeout:300000}});