为 SQS 事件源映射配置扩展行为 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 SQS 事件源映射配置扩展行为

对于标准队列,Lambda 使用长轮询来轮询一个队列,直到它变为活动状态。当消息可用时,Lambda 会通过函数的五次并发调用开始一次处理五个批次。如果仍有消息可用,则 Lambda 增加批量读取的进程数,最多每分钟增加 300 个实例。事件源映射可以同时处理的最大批处理数量为 1,000。

对于 FIFO 队列,Lambda 按照接收消息的顺序向函数发送消息。向 FIFO 队列发送消息时,需要指定消息组 ID。Amazon SQS 确保同一组中的消息按顺序传递到 Lambda。当 Lambda 按批次读取消息时,每个批次可能包含来自多个消息组的消息,但消息的顺序保持不变。如果函数返回错误,函数会对受影响的消息尝试所有重试,然后 Lambda 才会接收来自同一个组的其他消息。

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

您可以使用最大并发设置来控制 SQS 事件源的扩展行为。最大并发设置限制了 Amazon SQS 事件源可以调用的函数的并发实例数。最大并发属于事件源级别的设置。如果您将多个 Amazon SQS 事件源映射到一个函数,则每个事件源均可进行单独的最大并发设置。您可以使用最大并发,从而防止某个队列使用函数的所有预留并发账户的其余并发限额。在 Amazon SQS 事件源上配置最大并发不收取任何费用。

重要的是,最大并发和预留并发为两个独立的设置。不要将最大并发设置为高于函数的预留并发。配置最大并发后,请确保您的函数的预留并发大于或等于该函数上所有 Amazon SQS 事件源的最大总并发数。否则,Lambda 可能会限制您的消息。

如果未设置最大并发,Lambda 可以将您的 Amazon SQS 事件源纵向扩展到您账户的总并发配额(默认为 1000)。

注意

对于 FIFO 队列,并发调用的上限为消息组 ID 的数量 (messageGroupId) 或最大并发设置,以较低者为准。例如,如果您有六个消息组 ID 并且最大并发设置为 10,则函数最多可以进行六次并发调用。

您可以在新的和现有的 Amazon SQS 事件源映射上配置最大并发。

使用 Lambda 控制台配置最大并发
  1. 打开 Lamba 控制台的函数页面

  2. 选择一个函数的名称。

  3. Function overview(函数概览)下,选择 SQS。此操作将打开 Configuration(配置)选项卡。

  4. 选择 Amazon SQS 触发器,然后选择 Edit(编辑)。

  5. 对于 Maximum concurrency(最大并发),输入 2 到 1,000 之间的数字。要关闭最大并发,将该框保留为空。

  6. 选择保存

使用 Amazon Command Line Interface(Amazon CLI)配置最大并发

使用带 --scaling-config 选项的 update-event-source-mapping 命令。例如:

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --scaling-config '{"MaximumConcurrency":5}'

要关闭最大并发,请为 --scaling-config 输入一个空值:

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --scaling-config "{}"
使用 Lambda API 配置最大并发

CreateEventSourceMappingUpdateEventSourceMapping 操作与 ScalingConfig 对象结合使用。