与AWS Lambda重试失败功能相关的成本?


猫南北
2025-02-27 09:37:16 (24天前)
  1. 我正在研究无服务器技术(特别是PythonDjangoZappa


AWS
</跨度>

LAMBDA
</跨度>
并且有关错误处理的一件事让我感到震惊。在Zappa文档中它说

默认情况下,

AWS
</跨度>

LAMBDA
</跨度>
如果抛出异常,将尝试重试基于事件(非API网关,例如CloudWatch)调用。

在里面

AWS
</跨度>

LAMBDA
</跨度>
文档,我读到:

根据事件来源,

AWS
</跨度>

LAMBDA
</跨度>
锟斤拷

2 条回复
  1. 0# Charizard | 2019-08-31 10-32



    根据

    AWS文档







    • 不基于流的事件源
      </强>
      :像S3,API网关等






      • 同步调用
        </强>
        :如果您使用SDK或API网关调用了Lambda,如果发生异常,您将负责决定是否/何时/如何重试请求。






      • 异步调用
        </强>
        :如果Lambda是通过异步调用(如S3)触发的,它将自动重试调用两次,重试之间会有延迟。如果您指定了死信队列,则失败的事件将发送到SQS / SNS。如果未指定DLQ,则将丢弃该事件。








    • 基于流的事件源
      </强>
      :像DynamoDB和Kinesis。




      • 如果Lambda函数失败,它将继续尝试直到数据到期(Kinesis最多7天)。它在指数退避后重试,两次重试之间的上限为1分钟。您将为所有重试付费,但您可以创建警报以在源脱机时触发和停止流。





    有关基于流的事件源的文档不是很准确,但您可以阅读

    这个帖子

    在AWS论坛中,AWS员工回答了有关此问题的问题:





    </强>




    具体来说,当我的Lambda获得Kinesis事件并将数据写入另一个服务时…但是其他服务停止了一段时间(例如,几个小时)……我的Lambda将继续被调用(和以恒定的速度投掷错误?



    Lambda重试很好,因为我希望保证交付事件,但理想情况是在这种情况下,我也不希望在我的Lambda一直成功一次成功时收取高额费用





    回答
    </强>




    如果函数开始执行但由于下游依赖性而失败,那么您将在函数运行的持续时间内收费。如果您的功能失败,Lambda会以指数方式退出,最多约一分钟。您还可以在ShardIteratorAge增加时监视此情况,并在需要时执行暂停流处理的操作,直到您解决下游依赖关系



登录 后才能参与评论