我们有一个带S3 ObjectCreated
触发器的lambda。将文件上传到我们帐户中的某个S3存储桶和目录时,lambda使用boto3
(Python AWS SDK)下载文件,对内容进行分块,然后将这些块放入不同存储桶中的许多较小的S3文件中通过并行处理使用boto3
的{{1}}函数(Python Lambda函数中并行处理的策略概述为here)。
平均处理时间约为2分30秒。但是,S3响应时间比总体预期要高得多,并且不可避免地会由于超时错误而导致一两个lambda失败。故障率非常低,并且将超时设置为5分钟,我们无法弄清为什么在大多数lambda执行仅花费2:30时会遇到偶发性的Timeout故障。
我们正在利用每个lambda上可能的最大内存,并且我们已将lambda的并发设置为30,以限制执行不超过S3 PUT对象限制。
我们认为这不是代码性能问题,因为大多数执行都在超时限制内,并且我们倾向于认为它与AWS有关。我们还无法确定如何增加对S3的可靠,及时的大批量PUT请求。
S3或Lambda是否有其他有用的配置设置?还是有更好的方法使用upload_file
来减少总体处理时间并消除偶发故障?