我有一个AWS SQS队列,我将使用Lambda函数触发器进行设置,以便为添加到队列中的每个项目运行Lambda函数,以执行一些处理工作。
处理的第一步将是击中API端点,以获取添加到队列中的每个项目的一些数据,然后将其存储在DynamoDB表中。为了控制成本并控制该过程,我想限制在一定时间内调用Lambda函数的次数。
例如,我希望该函数每天最多运行100次,以免淹没DynamoDB表容量或API端点。最好将它限制在一个位置,使其最多只能同时运行5个并发操作,并且在再次运行之间会有1秒的延迟。这种类型的控件将使我能够直接将函数映射到DynamoDB表限制,以确保我不会超过容量,并且遵守任何API速率限制。
我调查了AWS Lambda Managing Concurrency。特别是“功能级别并发执行限制”部分。但是本节似乎没有解决每天100次的限制,也没有解决运行下一个功能之间的1秒延迟。
我也知道我可以通过限制一次(或每天)放入队列的项目数来限制它。但是由于我打算如何设计此系统,这会增加很多我想避免的复杂性。
是否可以使用AWS SQS和Lambda来实现这一目标并限制这些Lambda函数?
答案 0 :(得分:3)
当使用SQS作为事件源时,我认为没有办法将Lambda调用的次数限制为每天100次。
另一种方法是让调度事件触发Lambda,该Lambda轮询SQS队列。虽然这可能会增加从SQS到DynamoDB的数据之间的延迟,但是您将对DynamoDB的写入次数和写入速率有更多的控制。
要管理100个计数,您可以在外部保持每日写入计数状态(例如S3),也可以将100除以计划调用的次数,例如Lambda的10次调用在处理10条消息后停止。无论哪种方式,您都需要确保Lambda不会在处理邮件的途中超时。
由于一次Lambda调用将对DynamoDB进行多次写入,因此您可以管理每秒进行多少次写入或建立重试。