最好的解决办法,以重试AWS lambda函数当它得到超时

问题描述 投票:1回答:2

我有一个严重的问题,我需要你的帮助。花费了大量的时间后,我无法在网上找到任何解决方案。

我做了一个机器人拿到这实在是繁重的任务,因为我需要设置一个刮板数据,然后经过许多步骤,提取网页数据(登录,注销,点击提交按钮,...),并得到这个结果后,它会发布到一个API来作报告。

我用的CloudWatch事件,使我的lambda函数在一定时间内每天运行。

问题是,虽然我在它的最高设置为我设置lambda函数(3GB RAM,15分钟超时,该指标是2019年1月),但有时我的lambda函数在执行时失败(也许刮任务花费太很多步骤或可能我试图刮掉的网页并不稳定),它很少会失败的,大约只有5%,我认为。

但我想知道是否有任何的方法来应对这种情况,我想我的lambda函数可以自动重试,当它失败而不做手工。

amazon-web-services aws-lambda amazon-cloudwatch
2个回答
3
投票

这是你可以把它定于CloudWatch的事件,而不是一个拉姆达一个StepFunction完美的例子。

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

1
投票

你拉姆达已经重试,因为从CloudWatch的事件的触发是异步。 (请参见下面的文档),我会成立一个DLQ为您拉姆达,然后从那里再处理。

从文档(aws lambda event sources

错误处理一个给定事件来源取决于LAMBDA如何调用。亚马逊的CloudWatch活动异步调用的lambda函数。有关错误是如何重试的详细信息,请参阅AWS LAMBDA重试行为。

和:(aws lambda retry behaviour

异步调用 - 被用来调用lambda函数之前异步事件排队。如果AWS LAMBDA是无法完全处理该事件时,它会自动重试调用两次,重试之间的延迟。如果您已指定死信队列为你的函数,那么失败的事件被发送到指定的Amazon SQS队列或Amazon SNS主题。如果不指定死信队列(DLQ),这是不需要的,是默认设置,那么该事件将被丢弃。欲了解更多信息,请参阅AWS lambda函数死信队列。

© www.soinside.com 2019 - 2024. All rights reserved.