创建和配置 Amazon SQS 事件源映射
要使用 Lambda 处理 Amazon SQS 消息,请使用适当的设置配置您的队列,然后创建 Lambda 事件源映射。
配置队列以便用于 Lambda
如果您没有现有的 Amazon SQS 队列,则创建一个队列,用作 Lambda 函数的事件源。然后配置队列,让 Lambda 函数有足够的时间处理每批事件。
为使函数有时间处理每批记录,请将源队列的可见性超时设置为函数配置超时的至少六倍。这一额外的时间允许 Lambda 在您的函数处理之前的批次期间遇到限流时进行重试。
默认情况下,如果 Lambda 在处理某个批次期间的任何时候遇到错误,则该批次中的所有消息都会返回到队列。可见性超时后,Lambda 将再次看到这些消息。您可以将事件源映射配置为使用部分批次响应,以仅使失败的消息返回队列。此外,如果函数多次都未能处理某条消息,则 Amazon SQS 可以将其发送到某个死信队列。建议将源队列的重新驱动策略的 maxReceiveCount
设置为至少 5。这让 Lambda 在将失败的消息直接发送到死信队列之前有几次重试的机会。
设置 Lambda 执行角色权限
AWSLambdaSQSQueueExecutionRole Amazon 托管策略包含 Lambda 从您的 Amazon SQS 队列中读取所需的权限。您可以将此托管策略添加到您的函数的执行角色。
或者,如果您使用的是加密队列,则还需要为执行角色添加以下权限:
创建 SQS 事件源映射
创建事件源映射以指示 Lambda 将队列中的项目发送到 Lambda 函数。您可以创建多个事件源映射,以使用单个函数处理来自多个队列的项目。当 Lambda 调用目标函数时,事件可以包含多个项目(最多为可配置的最大批处理大小)。
要将您的函数配置为从 Amazon SQS 中读取,请将 AWSLambdaSQSQueueExecutionRole Amazon 托管策略附加到您的执行角色。然后,使用以下步骤从控制台创建 SQS 事件源映射。
要添加权限并创建触发器
打开 Lamba 控制台的函数页面
。 -
选择一个函数的名称。
-
选择 Configuration(配置)选项卡,然后选择 Permissions(权限)。
-
在角色名称下,选择至执行角色的链接。此角色将在 IAM 控制台中打开角色。
-
选择添加权限,然后选择附加策略。
-
在搜索字段中输入
AWSLambdaSQSQueueExecutionRole
。向执行角色添加此策略。这是一项 Amazon 托管策略,其中包含您的函数从 Amazon SQS 队列中读取所需的权限。有关此策略的更多信息,请参阅《Amazon Managed Policy Reference》中的 AWSLambdaSQSQueueExecutionRole。 -
在 Lambda 控制台中返回您的函数。在 Function overview(函数概览)下,选择 Add trigger(添加触发器)。
-
选择触发器类型。
-
配置必填选项,然后选择 Add(添加)。
Lambda 支持 Amazon SQS 事件源的以下配置选项:
- SQS 队列
-
要从中读取记录的 Amazon SQS 队列。
- 启用触发器
-
事件源映射的状态。Enable trigger(启用触发器)默认处于选中状态。
- 批次大小
-
每个批次中要发送给函数的最大记录数。对于标准队列,这最高可为 10,000 条记录。对于 FIFO 队列,最大值为 10。对于超过 10 的批处理大小,还必须将批处理时间(
MaximumBatchingWindowInSeconds
)设置为至少 1 秒。配置函数超时
,以允许有足够的时间来处理整个批次的项目。如果项目处理需要很长时间,请选择一个较小的批处理大小。大批量处理可以提高非常快速或拥有大量开销的工作负载的效率。如果您在函数上配置了预留并发,请将最小并发执行数设置为 5,以降低在 Lambda 调用函数时出现节流错误的几率。 Lambda 通过单个调用将批次中的所有记录传递给函数,前提是事件的总大小未超出同步调用的调用有效负载大小配额(6 MB)。Lambda 和 Amazon SQS 都会为每条记录生成元数据。这一额外的元数据将会计入总有效负载大小,并且可能导致批处理中发送的记录总数低于配置的批处理大小。Amazon SQS 发送的元数据字段的长度是可变的。有关 Amazon SQS 元数据字段的更多信息,请参阅《Amazon Simple Queue Service API 参考》中的 ReceiveMessage API 操作文档。
- Batch 时间
-
在调用函数之前收集记录的最长时间(以秒为单位)。它仅适用于标准队列。
如果您使用的批次时段大于 0 秒,则必须考虑队列可见性超时中增加的处理时间。我们建议将队列可见性超时设置为函数超时的六倍,加上
MaximumBatchingWindowInSeconds
的值。这使 Lambda 函数有时间处理每个批次的事件,并在出现节流错误时重试。当消息可用时,Lambda 开始批量处理消息。Lambda 通过五次并发调用您的函数开始一次处理五个批处理。如果仍有消息可用,则 Lambda 最多每分钟添加 300 个函数实例,最多为 1000 个函数实例。要了解函数扩展和并发的更多信息,请参阅 Lambda 函数扩展。
要处理更多消息,您可以优化 Lambda 函数以提高吞吐量。有关更多信息,请参阅了解 Amazon Lambda 如何使用 Amazon SQS 标准队列进行扩展
。 - 最大并发数量
-
事件源可调用的最大并发函数数量。有关更多信息,请参阅 为 Amazon SQS 事件源配置最大并发。
- 筛选条件
-
添加筛选条件以控制 Lambda 将哪些事件发送给函数进行处理。有关更多信息,请参阅 Lambda 事件筛选。