【发布时间】: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