为什么我使用 Amazon SQS 事件源的 Lambda 函数没有实现最优扩展?

上次更新时间:2021 年 6 月 21 日

配置了我的 Amazon Simple Queue Service (Amazon SQS) 队列,以调用我的 AWS Lambda 函数。现在,我的 Lambda 函数不会如预期扩展。如果我使用 Amazon SQS 队列作为事件源,我该如何确保我的函数扩展到最优的并发数?

解决方法

注意:在以最优状态运行时,Amazon SQS 队列配置为事件源的 Lambda 函数每分钟最多可以再扩展 60 个实例。最大并发调用可达到 1,000 次。如果您使用 FIFO 事件源映射,函数可以并发扩展到与活跃消息组相同的数量。有关更多信息,请参阅扩展和处理

找出并解决任何 Lambda 函数调用错误

为防止大规模错误,Lambda 会在发生调用错误时限制函数扩展。在错误得到解决以后,Lambda 会继续扩展函数。

如需了解关于如何找出并解决 Lambda 函数调用错误的最佳实践,见以下内容:

确认您的 Lambda 函数已经为您的使用案例配置最优并发数

预留并发数

如果已经在您的函数上配置预留并发数,那么您的函数会在它达到预留值时受到限制。最佳实践是,确保为您的函数预留的并发数至少为:

  • 对于标准 Amazon SQS 队列:1,000
  • 对于 FIFO 队列:至少和活跃消息组的数量相同或更多

预置并发数

如果您还未在您的函数上配置预留并发数,则您的函数的默认未预留并发数(预置并发数)配额为 1,000。此默认配额与同一 AWS 账户和区域中的其他函数共享。如果您的函数区域中至少有 1,000 个预置并发数,那么该函数将继续扩展,直至其达到最大并发数。当您的全部预置并发数都被使用时,调用会受到限制。

有关更多信息,请参阅管理 Lambda 函数的并发

重要提示:要扩展其他并发调用,您的账户必须不能接近区域内扩展或突发并发的服务配额。如果您在某个区域需要更高的并发数,请在 Service Quotas 控制台请求增加服务配额

确认您的 Amazon SQS 队列中有足够消息,以允许您的 Lambda 函数进行扩展

如果某 Amazon SQS 队列被配置为调用 Lambda 函数,则 Lambda 只会在队列中有消息时扩展调用。

要了解您的 Amazon SQS 队列中还有多少消息需要处理,请检查您的 ApproximateNumberOfMessagesVisible 指标

如果该指标的值较低或为 0,则您的函数不能扩展。

如果该指标的值较高而且未发生调用错误,试着增加您的事件通知上的批次大小。增加批次大小,直到持续时间指标增加的速度超过批次大小指标。有关更多信息,请参阅在 AWS Lambda 控制台中监控函数

注意:标准 Amazon SQS 队列的最大批次大小为 10,000 条记录。对于 FIFO 队列,最大批次大小为 10 条记录。有关更多信息,请参阅 Amazon SQS API 参考中的 ReceiveMessage


这篇文章对您有帮助吗?


您是否需要账单或技术支持?