【发布时间】:2016-08-07 11:58:51
【问题描述】:
我正在使用 Node 4.3 as a runtime 运行用于图像/视频处理的 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);
}
}
};
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 中更改此配置吗?
-
没有将超时配置设置为最大值:300 秒。如果超过 300 秒,功能就会超时,我可以在 cloudwatch 日志中看到它。如果我将超时设置为一个较低的值,比如 30 秒,该函数会返回一个超时错误,并且我会捕获回调错误。
-
请注意,我说的不是 lambda 的超时,而是来自 sdk 配置的超时,你也这样吗?
-
哦,对不起,我的错。在查看 aws 文档时,我确实错过了这个设置。它通过添加适当的选项来添加默认为120000:
var lambda = new AWS.Lambda({httpOptions{timeout: 300000}});987654328 @非常感谢您的 span> -
乐于提供帮助 :) 将此评论作为未来潜在读者的答案
标签: javascript node.js aws-sdk aws-lambda