使用 lambda 批处理 s3 对象
batch processing s3 objects using lambda
用例是每分钟将 1000 个非常小的文件上传到 s3,并且所有传入的对象都将使用 lambda 处理并存储在单独的存储桶中。
但是使用 s3-object-create 作为触发器会产生很多 lambda 调用,需要注意并发性。我正在尝试每 5-10 分钟批处理一次新创建的对象。 S3 提供批处理操作,但生成报告 everyday/week。有没有可以帮助我的服务?
根据AWS documentation,S3 可以将“新对象创建事件”发布到以下目的地:
- 亚马逊社交网络
- 亚马逊 SQS
- AWS Lambda
在你的情况下我会:
- 创建 SQS。
- 配置 S3 Bucket 以将 S3 新对象事件发布到 SQS。
- 重新配置现有的 Lambda 以订阅 SQS。
- 为输入 SQS 事件配置批处理。
目前,SQS-Lambda 订阅的最大批量大小为 1000 个事件。但是由于您的 Lambda 需要大约 2 秒来处理单个事件,因此您应该从较小的时间开始,否则 Lambda 将超时,因为它无法处理所有事件。
因此,将 X 个项目上传到 S3 将产生 X / Y
个事件,其中 Y 是 SQS 的最大批量大小。对于 1000 个 S3 项目和 100 个批量大小,它只会调用大约 10 个并发 Lambda 执行。
上面提到的 AWS 文档解释了如何将 S3 事件发布到 SQS。这里就不多说了,更多的是实现细节。
执行时间
但是您可能 运行 遇到处理速度太慢的问题,因为 Lambda 可能会在循环中一个接一个地处理事件。
解决方法是使用异步处理,具体实施取决于您使用 Lambda 的 运行时间,对于 Node.js 来说,这很容易实现。
此外,如果您想以其他方式加快处理速度,只需减少最大批处理大小并增加 Lambda 内存配置,这样单次执行将处理较少数量的事件,并且可以访问更多 CPU单位。
用例是每分钟将 1000 个非常小的文件上传到 s3,并且所有传入的对象都将使用 lambda 处理并存储在单独的存储桶中。 但是使用 s3-object-create 作为触发器会产生很多 lambda 调用,需要注意并发性。我正在尝试每 5-10 分钟批处理一次新创建的对象。 S3 提供批处理操作,但生成报告 everyday/week。有没有可以帮助我的服务?
根据AWS documentation,S3 可以将“新对象创建事件”发布到以下目的地:
- 亚马逊社交网络
- 亚马逊 SQS
- AWS Lambda
在你的情况下我会:
- 创建 SQS。
- 配置 S3 Bucket 以将 S3 新对象事件发布到 SQS。
- 重新配置现有的 Lambda 以订阅 SQS。
- 为输入 SQS 事件配置批处理。
目前,SQS-Lambda 订阅的最大批量大小为 1000 个事件。但是由于您的 Lambda 需要大约 2 秒来处理单个事件,因此您应该从较小的时间开始,否则 Lambda 将超时,因为它无法处理所有事件。
因此,将 X 个项目上传到 S3 将产生 X / Y
个事件,其中 Y 是 SQS 的最大批量大小。对于 1000 个 S3 项目和 100 个批量大小,它只会调用大约 10 个并发 Lambda 执行。
上面提到的 AWS 文档解释了如何将 S3 事件发布到 SQS。这里就不多说了,更多的是实现细节。
执行时间
但是您可能 运行 遇到处理速度太慢的问题,因为 Lambda 可能会在循环中一个接一个地处理事件。
解决方法是使用异步处理,具体实施取决于您使用 Lambda 的 运行时间,对于 Node.js 来说,这很容易实现。
此外,如果您想以其他方式加快处理速度,只需减少最大批处理大小并增加 Lambda 内存配置,这样单次执行将处理较少数量的事件,并且可以访问更多 CPU单位。