我有一个 AWS SQS 队列,我将使用 Lambda 函数触发器对其进行设置,以便为添加到队列中的每个项目运行 Lambda 函数以执行一些处理工作。
处理的一个步骤是访问 API 端点,为添加到队列中的每个项目取回一些数据,然后将其存储在 DynamoDB 表中。为了管理成本并保持对此流程的控制,我希望限制在特定时间段内调用此 Lambda 函数的次数。
例如,我希望该函数每天最多运行 100 次,以免压垮 DynamoDB 表容量或 API 端点。最好对其进行限制,使其一次最多只能运行 5 个并发操作,再次运行之间有 1 秒的延迟。这种类型的控制允许我直接将函数映射到 DynamoDB 表限制,以确保我不会超出容量,并遵守任何 API 速率限制。
我调查过AWS Lambda 管理并发 https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#per-function-concurrency。特别是“函数级并发执行限制”部分。但是本节似乎没有解决每天 100 次的限制,或者运行下一个函数之间的 1 秒延迟。
我还知道我可以在另一边限制它,通过限制一次(或每天)放入队列中的项目数量。但由于我如何规划这个系统,这会增加很多我想尽量避免的复杂性。
有没有办法使用AWS SQS和Lambda来实现这一点并限制这些Lambda函数?
我认为没有办法将使用 SQS 作为事件源时的 Lambda 调用数量限制为每天 100 次。
另一种方法是让计划事件触发 Lambda,该 Lambda 轮询 SQS 队列。虽然这可能会增加从 SQS 到 DynamoDB 的数据之间的延迟,但您可以更好地控制写入 DynamoDB 的数量和速率。
要管理 100 计数,您可以在外部保存每日写入计数状态(例如 S3),或者将 100 除以计划调用数,例如10 次调用 Lambda,在处理 10 条消息后停止。无论哪种方式,您都需要确保 Lambda 在处理消息的过程中不会超时。
由于 Lambda 的单次调用将对 DynamoDB 进行多次写入,因此您可以管理每秒进行的写入次数,或构建重试次数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)