AWS Lambda调用函数没有'不要总是回来

AWS Lambda invoke function doesn't always return

本文关键字:回来 调用 Lambda 函数 AWS      更新时间:2023-09-26

我正在运行一个用于图像/视频处理的AWS Lambda函数,将Node 4.3作为运行时。我正在使用节点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);
        }
    }
};

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 

如注释中所述,aws-sdk有自己的超时配置设置,默认设置为120秒(这是一个与lambda不同的超时设置)。

在当前的情况下,当lambda运行更多的超时时,sdk会假设失败并重试。

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