代码之家  ›  专栏  ›  技术社区  ›  RSingh

由cloudwatch事件触发时的Aws lambda重试行为

  •  12
  • RSingh  · 技术社区  · 7 年前

    我创建了一个lambda函数,它是通过cloudwatch事件cron触发的。 测试时,我发现lambda retry在超时情况下不起作用。 我想了解预期的行为是什么。如果超时,是否应该重试?

    P、 我已经看过aws网站上的文件了,但还是搞不清楚 https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html

    3 回复  |  直到 7 年前
        1
  •  18
  •   RSingh    7 年前

    找到了aws文档,

    “给定事件源的错误处理取决于Lambda的调用方式。 Amazon CloudWatch事件配置为异步调用Lambda函数 ."

    " 异步调用 异步事件在用于调用Lambda函数之前会排队。如果AWS Lambda无法完全处理该事件,它将自动重试调用两次,两次重试之间会有延迟。"

    因此,在这种情况下应该进行重试。不确定我的lambda函数出了什么问题,我只是删除并再次创建,这次重试成功了。

        2
  •  1
  •   hansaplast    7 年前

    判断依据 the docs you linked to 如果lambda函数超时,它似乎会再次调用 超时是因为它正在等待另一个资源(即被网络阻止):

    函数在尝试到达端点时超时。

    由于cron事件不是基于流的(如果是同步或异步的,文档中似乎不清楚),因此将重试。

        3
  •  0
  •   Naijia Liu    3 年前

    CloudWatch事件调用Lambda函数 异步地 .

    对于异步调用,Lambda管理函数的异步事件队列,并尝试 对错误(包括超时)重试两次 . https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html

    因此,在默认配置下,您的函数应该重试,并出现超时错误。如果没有,可能还有以下其他原因:

    1. 该函数没有足够的并发性来运行,事件被限制。检查函数的保留并发设置。它应至少为1。
    2. 发生上述情况时,事件也可能会从队列中删除,而不发送给函数。检查函数的异步调用设置,确保它有足够的时间将事件保留在队列中,并且重试次数不为零。