根据 AWS文档 :
的 不基于流的事件源 强> :像S3,API网关等
的 同步调用 强> :如果您使用SDK或API网关调用了Lambda,如果发生异常,您将负责决定是否/何时/如何重试请求。
的 异步调用 强> :如果Lambda是通过异步调用(如S3)触发的,它将自动重试调用两次,重试之间会有延迟。如果您指定了死信队列,则失败的事件将发送到SQS / SNS。如果未指定DLQ,则将丢弃该事件。
的 基于流的事件源 强> :像DynamoDB和Kinesis。
有关基于流的事件源的文档不是很准确,但您可以阅读 这个帖子 在AWS论坛中,AWS员工回答了有关此问题的问题:
的 题 强> :
具体来说,当我的Lambda获得Kinesis事件并将数据写入另一个服务时...但是其他服务停止了一段时间(例如,几个小时)......我的Lambda将继续被调用(和以恒定的速度投掷错误? Lambda重试很好,因为我希望保证交付事件,但理想情况是在这种情况下,我也不希望在我的Lambda一直成功一次成功时收取高额费用
具体来说,当我的Lambda获得Kinesis事件并将数据写入另一个服务时...但是其他服务停止了一段时间(例如,几个小时)......我的Lambda将继续被调用(和以恒定的速度投掷错误?
Lambda重试很好,因为我希望保证交付事件,但理想情况是在这种情况下,我也不希望在我的Lambda一直成功一次成功时收取高额费用
的 回答 强> :
如果函数开始执行但由于下游依赖性而失败,那么您将在函数运行的持续时间内收费。如果您的功能失败,Lambda会以指数方式退出,最多约一分钟。您还可以在ShardIteratorAge增加时监视此情况,并在需要时执行暂停流处理的操作,直到您解决下游依赖关系