【问题标题】:Best solution to retry AWS lambda function when it got timeout超时重试AWS lambda函数的最佳解决方案
【发布时间】:2019-06-27 01:05:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudwatch


    【解决方案1】:

    您的 lambda 已重试,因为来自 cloudwatch 事件的触发器是异步的。 (请参阅下面的文档) 我会为你的 lambda 设置一个 DLQ,然后从那里重新处理。

    来自文档 (aws lambda event sources)

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

    还有:(aws lambda retry behaviour

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

    【讨论】:

    • 您的 lambda 已经重试,因为来自 cloudwatch 事件的触发器是异步的 => 这真的很奇怪,我不知道为什么,但有一天,我无法得到任何结果,因为我的函数在执行。 ==================================================== =============================== 我会为你的 lambda 设置一个 DLQ,然后从那里重新处理。 => 我会试一试,很快就会反馈给你
    【解决方案2】:

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

    StepFunction 可以调用您的 lambda,并在需要时使用可配置的指数回退来处理失败时的重试逻辑。

    这是一个 StepFunction 的示例

    {
      "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
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

      虽然已经给出了答案,但在这篇文章中我解释了这个问题并分享了一个处理 lambdas 的步进函数的例子。

      Lambdas with step function

      【讨论】:

        猜你喜欢
        • 2014-09-18
        • 2022-01-07
        • 1970-01-01
        • 2017-06-26
        • 2016-11-14
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多