Amazon web services 当AWS lambda函数超时时重试该函数的最佳解决方案

Amazon web services 当AWS lambda函数超时时重试该函数的最佳解决方案,amazon-web-services,aws-lambda,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Amazon Cloudwatch,我有一个严肃的问题,我需要你的帮助。我花了很多时间在网上找不到任何解决办法 我制作了一个机器人来获取数据,这是一项非常繁重的任务,因为我需要设置一个刮板,然后它通过许多步骤(登录、注销、单击、提交按钮等)从网页中提取数据,在得到这个结果后,它将发布到API以生成报告 我使用Cloudwatch事件使lambda函数在每天的特定时间运行 问题是,虽然我将lambda函数设置为其最大设置(3GB内存,15分钟超时,指标在2019年1月),但有时我的lambda函数在执行时失败(可能是刮取任务需要太多

我有一个严肃的问题,我需要你的帮助。我花了很多时间在网上找不到任何解决办法

我制作了一个机器人来获取数据,这是一项非常繁重的任务,因为我需要设置一个刮板,然后它通过许多步骤(登录、注销、单击、提交按钮等)从网页中提取数据,在得到这个结果后,它将发布到API以生成报告

我使用Cloudwatch事件使lambda函数在每天的特定时间运行

问题是,虽然我将lambda函数设置为其最大设置(3GB内存,15分钟超时,指标在2019年1月),但有时我的lambda函数在执行时失败(可能是刮取任务需要太多步骤,或者可能是我尝试刮取的网页不稳定),而且很少失败,我认为只有5%左右


但是我想知道是否有任何方法可以处理这种情况,我希望我的lambda函数可以在失败时自动重试,而无需手动执行。

您的lambda已经重试,因为cloudwatch事件的触发器是异步的。(见以下文件) 我会为你的lambda建立一个DLQ,然后从那里重新处理

从文件中()

给定事件源的错误处理取决于Lambda的调用方式。Amazon CloudWatch事件异步调用Lambda函数。有关如何重试错误的更多信息,请参阅AWS Lambda重试行为

及:()

异步调用–异步事件在用于调用Lambda函数之前排队。如果AWS Lambda无法完全处理事件,它将自动重试调用两次,两次重试之间会有延迟。如果已为函数指定死信队列,则失败事件将发送到指定的Amazon SQS队列或Amazon SNS主题。如果未指定死信队列(DLQ),该队列不是必需的,并且是默认设置,则该事件将被丢弃。有关更多信息,请参阅AWS Lambda函数死信队列


这是
StepFunction
的完美示例,您可以通过CloudWatch事件而不是lambda来安排它

StepFunction
可以调用lambda,并在出现故障时处理重试逻辑,如果需要,可以使用可配置的指数后退

下面是一个单步函数的示例

{
  "Comment": "Call lambda with retry",
  "StartAt": "Scraper",
  "States": {
    "Scraper": {
      "Type": "Task",
      "Resource": "<LAMBDA_ARN>",
      "Retry": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "IntervalSeconds": 20,
          "MaxAttempts": 5,
          "BackoffRate": 2
        }
      ],
      "End": true
    }
  }
}
{
“注释”:“通过重试调用lambda”,
“StartAt”:“Scraper”,
“国家”:{
“刮刀”:{
“类型”:“任务”,
“资源”:“,
“重试”:[
{
“ErrorEquals”:[
“所有国家”
],
“间隔秒”:20,
“最大尝试”:5,
“回扣率”:2
}
],
“结束”:正确
}
}
}

您的lambda已经重试,因为cloudwatch事件的触发器是异步的=>这真的很奇怪,我不知道为什么,但有一天,我无法得到任何结果,因为我的函数在执行时失败了。===================================================================================================================================================================================================================================================================================================================================================================================================我会为你的lambda设置一个DLQ,然后从那里进行谴责。=>我会尝试一下,很快会反馈给你