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

1 分钟阅读
0

在使用 Amazon Simple Queue Service(Amazon SQS)队列作为事件源时,我希望我的 AWS Lambda 函数能有最佳并发。

解决方法

**注意:**当您将 Amazon SQS 队列配置为事件源时,Lambda 函数可以实现最佳纵向扩展,每分钟再增加 60 个实例。最大并发调用数为 1,000。如果您使用 FIFO 事件源映射,函数可以将并发横向缩减到活动消息组的数量。有关详细信息,请参阅扩展和处理

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

为防止大规模错误,Lambda 会在发生调用错误时限制函数扩展。在错误得到解决以后,Lambda 会继续扩展函数。有关详细信息,请参阅失败调用的回退策略

有关如何解决 Lambda 函数调用错误的最佳做法,请参阅解决 Lambda 中的问题如何解决 Lambda 函数故障?

为您的用例配置具有最佳并发的 Lambda 函数

预留并发

如果您在函数上配置了预留并发,Lambda 会在您的函数达到预留值时对其加以限制。确保为函数预留的并发量至少达到以下值:

  • 对于标准 Amazon SQS 队列: 1,000
  • 对于 FIFO 队列: 活动消息组的数量

未预留并发

如果您未在函数上配置预留并发,您的函数的默认未预留并发限额为 1,000。此默认限额也适用于同一 AWS 账户和 AWS 区域中的其他函数。如果您在函数的区域中至少有 1,000 个未预留并发,该函数会扩展,直到达到最大可用并发量。当您的账户的所有并发都在使用时,Lambda 会限制调用。

**注意:**Lambda 函数最初会根据容量暴增进行扩展。

如果您的预期流量到达的速度快于默认的容量暴增,您可以使用预配并发来确保函数可用。使用预配并发时,函数会继续扩展到预定义值。预配并发全部使用后,函数将使用账户的未预留并发池。

**重要事项:**要扩展其他并发调用,您的账户必须不能接近区域内扩展或暴增并发的服务限额。如果您有区域需要更高的并发量,请在服务限额控制台申请增加服务限额

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

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

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

如果此指标较低或为 0,说明您的函数无法扩展。

如果此指标较高且没有调用错误,请尝试增加事件通知的批处理大小。增加批处理大小,直到持续时间指标的增加速度超过批处理大小指标。有关详细信息,请参阅在 Lambda 控制台上监视函数

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

相关信息

将 Lambda 与 Amazon SQS 结合使用

管理 AWS Lambda 函数并发

为 Amazon SQS 事件源配置最大并发

AWS 官方
AWS 官方已更新 5 个月前