【发布时间】:2016-08-12 09:49:11
【问题描述】:
我正在运行一个在 AWS Lambda 上执行长时间操作的 Meteor(节点 4.4.7)应用程序。我从我的代码中调用 lambda 函数并等待响应,然后再继续下一次调用。我将超时设置为 300000 毫秒,如 former question 中所述(在 Lambda 和我的代码中的 AWS.Lambda 对象中)。
我的问题是,有时AWS.Lambda 超时值会重置为默认值 120000ms。由于我的 Lambda 函数需要更多时间来执行(但仍少于最大 300 秒),我没有收到响应。此外,我看到我的函数根据默认的maxRetries 值被调用了 3 次,即使我将其设置为 1。
我不知道重现它的步骤。似乎是随机的。它通常在运行我的应用程序几天后发生。如果我检查我的 AWS.Lambda 对象的属性,它仍然具有 300000 毫秒超时值,尽管它的行为就像它具有默认的 120000 毫秒值。一旦发生这种情况,所有后续调用请求都会出现同样的问题,我必须重新启动应用程序才能使其再次工作。
请注意,在 Lambda 日志中,我看到函数正在正确执行。 Duration 120 秒。
示例代码:
var options = {
maxRetries: 1,
httpOptions: {
timeout: 300000
}
};
var lambda = new AWS.Lambda(options);
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
});
在我尝试过的事情中:为每个调用创建一个new AWS.Lambda()。
【问题讨论】:
标签: javascript node.js aws-sdk aws-lambda