【问题标题】:AWS Lambda invoke function (js sdk): timeout resets to defaultAWS Lambda 调用函数 (js sdk):超时重置为默认值
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 正如原问题所说,Lambda函数超时不是默认值,而是已经设置为最大值,即300s。
    【解决方案2】:

    您需要在调用 lambda.invoke 的 lambda 上设置超时,而不是在 lambda.invoke 本身上设置超时(就像您对 options 所做的那样)。

    因此,如果您有调用LambdaBLambdaA,则LambdaA 的超时必须与LambdaB 的超时相同(或高于),否则LambdaA 可能会在 LambdaB 之前超时完成。

    我假设您提供的代码在 lambda 中运行。您需要在 that lambda 上设置超时。

    您用于创建 AWS.Lambda 的 options 可以在您在此处提供的代码中丢弃。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2020-02-24
      • 2017-07-22
      • 1970-01-01
      • 2017-10-03
      相关资源
      最近更新 更多