gpt4 book ai didi

javascript - AWS Lambda 调用函数 (js sdk) : timeout resets to default

转载 作者:搜寻专家 更新时间:2023-10-31 23:20:27 24 4
gpt4 key购买 nike

我正在运行一个在 AWS Lambda 上执行长时间操作的 Meteor (Node 4.4.7) 应用程序。我从我的代码中调用 lambda 函数并等待响应,然后再继续下一次调用。我将超时设置为 300000 毫秒,如 former question 中所述(在我的代码中的 Lambda 和 AWS.Lambda 对象中)。

我的问题是,有时 AWS.Lambda 超时值会重置为默认值 120000 毫秒。由于我的 Lambda 函数需要更多时间来执行(但仍少于最大 300 秒),我没有收到响应。此外,我看到我的函数根据默认 maxRetries 值被调用了 3 次,即使我将它设置为 1。

我不知道重现它的步骤。这似乎是随机的。它通常在运行我的应用程序几天后发生。如果我检查我的 AWS.Lambda 对象的属性,它仍然具有 300000ms 的超时值,尽管它的行为就像它具有默认的 120000ms 值。一旦发生这种情况,所有后续调用请求都会遇到同样的问题,我必须重新启动应用程序才能使其再次运行。

请注意,在 Lambda 日志中,我看到函数正在正确执行。 Duration < 120s 在我的代码中返回。 Duration > 120s 重试。

示例代码:

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()

最佳答案

根据SDK documentation ,AWS.Lambda 中的 httpOptions.timeout 键不是函数超时 - 它是套接字超时。这是有道理的,因为 Lambda 函数的默认超时是 3 秒,而不是 2 分钟。

您可以使用 updateConfiguration 更改代码中的函数超时方法。或者,如果您使用无服务器框架来部署 Lambda 函数,则可以在 serverless.yml 中设置超时。当然,您始终可以在 AWS 控制台中设置超时(当我使用无服务器/CloudFormation 进行部署时,控制台中设置的配置被清除了,但我不知道您是如何部署的——它如果您只是阅读 S3 代码或上传 ZIP 文件,应该不是问题。

关于javascript - AWS Lambda 调用函数 (js sdk) : timeout resets to default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com