【问题标题】:AWS Lambda SQS Trigger Throttle/LimitAWS Lambda SQS 触发器限制/限制
【发布时间】:2018-07-06 15:33:34
【问题描述】:

我有一个 AWS SQS 队列,我将使用 Lambda 函数触发器进行设置,以便为添加到队列中的每个项目运行 Lambda 函数以执行一些处理工作。

处理的一个步骤是访问 API 端点以获取添加到队列中的每个项目的一些数据,然后将其存储在 DynamoDB 表中。为了管理成本并控制此过程,我希望限制在特定时间段内调用此 Lambda 函数的次数。

例如,我希望此函数每天最多运行 100 次,以免超出 DynamoDB 表容量或 API 端点。限制它也很好,它一次最多只能运行 5 个并发操作,再次运行之间有 1 秒的延迟。这种类型的控制将允许我直接将函数映射到 DynamoDB 表限制,以确保我不会超出容量,并遵守任何 API 速率限制。

我已经调查过AWS Lambda Managing Concurrency。特别是“功能级别并发执行限制”部分。但是本节似乎没有解决每天 100 次的限制,或者运行下一个函数之间的 1 秒延迟。

我也知道我可以通过限制一次(或每天)放入队列的项目数量来限制它。但由于我是如何规划这个系统的,这会增加很多我希望避免的复杂性。

有没有办法使用 AWS SQS 和 Lambda 来实现这一点并限制这些 Lambda 函数?

【问题讨论】:

  • 每条 SQS 消息都会触发一次 Lambda 函数。限制一天内可以执行的次数有什么好处?这可能会推迟处理很多天。消息一来就处理比较好。
  • OP 声明目标是“不 [to] 压倒 DynamoDB 表容量或 API 端点”
  • 嘿!我也有同样的问题。我有一个要以固定速率消耗的 SQS。我在这里发布了一个类似的问题(stackoverflow.com/questions/53172346/…),也许你可以用你的解决方案来回答?
  • @GonzaloSolera 下面只列出了一个答案。我不太清楚你的意思。

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


【解决方案1】:

我认为没有办法将使用 SQS 作为事件源时的 Lambda 调用次数限制为每天 100 次。

另一种方法是让计划的事件触发 Lambda,它会轮询 SQS 队列。虽然这可能会增加从 SQS 到 DynamoDB 的数据之间的延迟,但您可以更好地控制写入 DynamoDB 的数量和速率。

要管理 100 计数,您可以在外部(例如 S3)保持每日写入计数状态,或者将 100 除以计划调用的数量,例如处理 10 条消息后停止的 Lambda 调用 10 次。无论哪种方式,您都需要确保您的 Lambda 在处理消息的过程中不会超时。

由于 Lambda 的一次调用将对 DynamoDB 进行多次写入,因此您可以管理每秒写入的次数,或构建重试次数。

【讨论】:

    猜你喜欢
    • 2020-05-17
    • 2020-07-21
    • 2020-07-28
    • 2021-03-28
    • 2019-06-29
    • 2018-01-12
    • 1970-01-01
    • 2017-03-09
    • 2019-03-26
    相关资源
    最近更新 更多