用例是,每分钟都会将1000 s非常小的文件上传到s3,所有传入的对象都将使用lambda处理并存储在一个单独的桶中。但是使用S3对象创建作为触发器将使许多lambda调用和并发需要得到处理。我试图每5-10分钟对新创建的对象进行批处理。S3提供批处理操作,但它每天/每周生成报告。有什么服务可以帮助我吗?
发布于 2021-02-05 10:12:59
根据AWS文件,S3可以将“新建对象创建的事件”发布到以下目的地:
就你而言,我会:
目前,SQS订阅的最大批大小是1000个事件。但是由于Lambda需要大约2秒来处理单个事件,那么您应该从更小的事件开始,否则Lambda就会超时,因为它无法处理所有事件。
由于这一点,将X项上载到S3将产生X / Y事件,其中Y是SQS的最大批处理大小。对于1000个S3项和100个批处理大小,它将只调用大约10个并发的Lambda执行。
上面提到的AWS文档解释了如何将S3事件发布到SQS。我不会在这里解释它,因为它更多地是关于实现细节。
执行时间
然而,您可能会遇到一个问题,处理太慢,因为Lambda将处理一个循环中一个接一个的事件。
解决方法是使用异步处理和实现,这取决于您为Lambda使用的运行时,对于Node.js,这将非常容易实现。
另外,如果您想以其他方式加速处理,只需减少最大批处理大小并增加Lambda内存配置,那么单次执行将处理较少数量的事件,并且可以访问更多的CPU单元。
https://stackoverflow.com/questions/66058822
复制相似问题