为 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 可能会限制您的消息。
当您账户的并发配额设置为默认值 1000 时,Amazon SQS 事件源映射可以扩展为调用最高此值的函数实例,除非您指定最大并发量。
如果您账户的默认并发配额有所增加,Lambda 可能无法调用最高达到新配额的并发函数实例。默认情况下,Lambda 可以扩展为针对 Amazon SQS 事件源映射调用最高 1250 个并发函数实例。如果这不足以满足您的应用场景,请联系 AWS 支持人员,讨论如何提高您账户的 Amazon SQS 事件源映射并发度。
注意
对于 FIFO 队列,并发调用的上限为消息组 ID 的数量 (messageGroupId
) 或最大并发设置,以较低者为准。例如,如果您有六个消息组 ID 并且最大并发设置为 10,则函数最多可以进行六次并发调用。
您可以在新的和现有的 Amazon SQS 事件源映射上配置最大并发。
使用 Lambda 控制台配置最大并发
打开 Lamba 控制台的函数页面
。 -
选择一个函数的名称。
-
在 Function overview(函数概览)下,选择 SQS。此操作将打开 Configuration(配置)选项卡。
-
选择 Amazon SQS 触发器,然后选择 Edit(编辑)。
-
对于 Maximum concurrency(最大并发),输入 2 到 1,000 之间的数字。要关闭最大并发,将该框保留为空。
-
选择保存。
使用 AWS Command Line Interface(AWS 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 配置最大并发
将 CreateEventSourceMapping 或 UpdateEventSourceMapping 操作与 ScalingConfig 对象结合使用。