【问题标题】:How to raise aws lambda retries upon handled exceptions in the code?如何在代码中处理异常时引发 aws lambda 重试?
【发布时间】:2021-08-21 12:19:11
【问题描述】:

我在 C# 中有一个 lambda 函数。此 lambda 函数连接到 SQL 服务器实例以执行一些操作。发生的情况是,有时我在代码中遇到 SQL 异常。但是,此 sql 异常不计入 lambda 重试(在我的情况下设置为 2 次重试)。我的意思是在这种情况下,lambda 只是捕获异常,终止,并且不再尝试执行。

我想更改流程,以便每当我遇到此类异常时,lambda 都会失败并根据我在配置中定义的“重试尝试次数”重试。

你能帮帮我吗?

谢谢。

【问题讨论】:

    标签: c# amazon-web-services exception aws-lambda


    【解决方案1】:

    您的 Lambda 函数是如何被调用的?如果是某些事件触发了您的 Lambda,例如 EventBridge 事件或 S3 对象事件,您通常可以在该配置中定义重试计数。

    https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html

    【讨论】:

    • 设置重试次数没有任何问题。问题是,例如,如果我的代码中有 sql 异常,那么 lambda 不会失败(因此不会激活重试)。当我有程序异常时,我需要 lambda 失败。
    • 得到SQL异常后能否返回运行时错误? docs.aws.amazon.com/lambda/latest/dg/csharp-exceptions.html
    • 我的代码中有 try catch 语句,这个 sql 异常被 catch 块捕获。我还可以在 cloudwatch 中查看异常详细信息。但是,lambda 在收到此类异常后不会尝试再次执行(重试尝试)。我对重试没有任何问题,例如当 lambda 超时时。
    • 因为您捕获了异常,它由您的 Lambda 函数安静地处理。在我之前的评论中,我建议在捕获异常后,您可以创建一个 return 语句来显式返回错误。我希望这样做可以通知 Lambda 函数触发器执行失败并开始重试。
    • 删除 try/catch.. 如果异常冒泡到顶部,lambda 将记录该异常,并将函数标记为失败并可能被重试
    【解决方案2】:

    您的 lambda 函数必须针对您希望 lambda 对其执行重试的应用程序错误抛出异常(您可以捕获异常、记录错误并重新抛出异常)。这会让您的 lambda 函数知道代码中的异常,并根据您的配置提示重试。

    https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2019-03-02
      • 2013-02-05
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多