【问题标题】:Process elements from an SQS queue sequentially using AWS Lambda使用 AWS Lambda 按顺序处理来自 SQS 队列的元素
【发布时间】:2026-01-21 14:05:01
【问题描述】:

我需要使用 AWS Lambda 按顺序处理 SQS 队列的元素。我需要按顺序处理元素,因为我不想在并行处理多个元素时影响数据库。请注意,此过程对时间不敏感。

我注意到 AWS Lambda 在消息可用时最多读取 5 个批次,然后并行调用 5 个 Lambda,我想避免这种情况。 Lambda 可以将该数量增加到多达 1000 个批次。 https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 当你说“sequentially”时,是指“一次一个”,还是也要求它们按原来的顺序排列?
  • 您只能使用 FIFO SQS 执行此操作。您不能并行控制 5 个 lambda。
  • @JohnRotenstein 一次一个,在这种情况下顺序并不重要。

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

您只需将--batch-size 参数指定为1。 实现预期结果的其他事项。

  • 确保您使用的是 FIFO SQS 队列
  • 使用 batch-size 获取 1 条消息
  • 为 SQS 本身配置死信队列 (DLQ),以便将多次尝试后无法处理的消息发送到 DLQ SQS

查看文档以获取事件源映射支持的每个参数的详细信息 https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html

【讨论】:

    【解决方案2】:

    看来您的要求是:

    • 随时处理单个消息
    • 无并行处理
    • 顺序不重要
    • 时间并不重要

    这可以通过在 AWS 函数上设置并发限制来实现,这会限制并行执行的数量。

    来自Set Concurrency Limits on Individual AWS Lambda Functions

    此功能允许您限制给定函数,如果它达到允许的最大并发执行数,您可以选择设置。当您想要限制 Lambda 调用的下游资源(例如数据库)的流量速率时,这很有用。

    由于顺序并不重要,您可以使用标准队列(而不是 FIFO 队列)。

    【讨论】:

    • 了解 Lambda 轮询器如何为此工作非常重要。将并发设置为 1,您最终可能会收到一些受限制的请求。如何处理这些限制取决于消息超时和 Lambda 超时。 youtube.com/watch?v=8zysQqxgj0I 谈论在 25 分钟标记附近是如何工作的。
    最近更新 更多