AWS Lambda调用函数并不总是返回

Dan*_*l T 2 javascript node.js aws-sdk aws-lambda

我使用Node 4.3作为运行时运行AWS Lambda函数进行图像/视频处理.我正在使用节点aws-sdk从我的webapp代码调用我的函数.

问题是当函数需要很长时间执行(例如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);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

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
});
Run Code Online (Sandbox Code Playgroud)

Lambda CloudWatch Log

REPORT RequestId: xxx   Duration: 206757.82 ms  Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB 
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 5

如评论中所述,aws sdk有自己的超时配置设置,默认情况下设置为120秒(这是与lambda设置不同的超时设置).

在当前情况下,当lambda运行更多此超时时,sdk假定失败并触发重试.

将此配置设置为300秒应该可以解决问题.正如Daniel T在评论中所表示的那样,临时更改可以通过以下方式实现:var lambda = new AWS.Lambda({httpOptions {timeout:300000}});