Lambda 如何处理异步调用的错误和重试
Lambda 管理函数的异步事件队列以及在出错时重试的尝试次数。如果函数返回错误,Lambda 默认会尝试再运行两次,前两次尝试之间等待一分钟,第二次与第三次尝试之间等待两分钟。函数错误包括函数代码返回的错误,以及函数运行时返回的错误,例如超时。
如果该函数没有足够的并发性可用于处理所有事件,则其他请求将受到限制。对于节流错误(429)和系统错误(500 系列),Lambda 会将事件返回到队列并尝试再次运行该函数,默认最长运行 6 小时。在第一次尝试后,重试间隔从 1 秒以指数级增加到最多 5 分钟。如果队列包含多个条目,Lambda 将增加重试间隔并降低从队列中读取事件的速率。
即使您的函数没有返回错误,它也可能多次从 Lambda 接收相同的事件,因为队列本身具有最终一致性。如果函数无法跟上传入事件,则也可能从队列中删除事件而不将其发送到函数。确保您的函数代码正常处理重复事件,并且您有足够的并发可用于处理所有调用。
当队列很长时,新事件可能会在 Lambda 有机会将它们发送到您的函数之前过期。当事件过期或所有处理尝试都失败时,Lambda 将放弃该事件。您可为函数配置错误处理以减少 Lambda 执行的重试次数,或者更快地放弃未处理的事件。
您还可以配置 Lambda 以将调用记录发送至其他服务。要了解更多信息,请参阅获取 Lambda 异步调用记录。