2017-10-05 64 views
0

我正在尝试构建一个系统,该系统将每年在S3对象上每次运行一次lambda函数。假设桶中有数以百万计的对象,所以lambda函数每天将运行固定的次数,但它能够区分哪些对象已经被处理,哪些对象没有被处理。我在如何构建该逻辑方面遇到问题。有没有人有什么建议,最好的办法是什么?任何建议表示赞赏。在桶中的每个S3对象中运行lambda

+0

您能否更详细地描述问题,但不能从解决方案的角度来看?听起来您需要一个后备存储(DynamoDB,RDS等)来跟踪已处理和尚未处理的内容,但同样需要更多信息。 – stdunbar

+1

每个对象的处理有多密集(需要多长时间)?每个S3对象有多大?你是否在使用其他的对象,或者你是否愿意将它们保存在其他地方(例如在数据库中)? “每年一次”意味着什么?必须在特定的日期,即365天后完成,还是可以在更早/更晚的时间完成?如果您提供有关您实际情况的更多详情,我们更可能为您提供适当的答案。您可以随时编辑您的问题以添加更多详细信息。 –

回答

0

下面是一个想法:在RDBMS(或DynamoDB)中维护一个S3对象列表,其中每个记录具有S3密钥加上下一个处理日期。每天安排一次Lambda函数,以便查询数据库以查找计划今天(或更早)处理的对象。鉴于您拥有数以百万计的对象,平均每天有超过3000个对象,因此您可能无法在单个Lambda超时内处理它们,因此您可以将对象分散到要处理的更多Lambda函数中与要处理的对象的子集(或每个Lambda甚至一个对象)。在Lambda处理完一个对象后,Lambda将重新写入DB中的相关记录,以表明下一个处理日期是今天加上一年。

要维护数据库中的S3对象列表,还可以使用对正在上载或删除的S3对象起反应的Lambda函数。