Amazon web services 使用lambda批处理s3对象

Amazon web services 使用lambda批处理s3对象,amazon-web-services,amazon-s3,aws-lambda,amazon-sqs,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Sqs,用例是每分钟将1000个非常小的文件上传到s3,所有传入的对象都将使用lambda进行处理并存储在一个单独的bucket中。 但是使用s3objectcreate作为触发器将导致许多lambda调用,需要注意并发性。我尝试每5-10分钟批处理一次新创建的对象。S3提供批处理操作,但每天/每周生成it报告。是否有可用的服务可以帮助我?根据,S3可以将“新对象创建事件”发布到以下目标: 亚马逊社交网站 亚马逊SQS AWS Lambda 就你而言,我会: 创建SQS 配置S3 Bucket以将S

用例是每分钟将1000个非常小的文件上传到s3,所有传入的对象都将使用lambda进行处理并存储在一个单独的bucket中。 但是使用s3objectcreate作为触发器将导致许多lambda调用,需要注意并发性。我尝试每5-10分钟批处理一次新创建的对象。S3提供批处理操作,但每天/每周生成it报告。是否有可用的服务可以帮助我?

根据,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不够,我可以要求AWS支持增加Lambda并发性。你考虑过吗?或者,将S3事件设置为SQS队列作为目标,然后以较慢的速度处理来自SQS的文件。是的,添加并发性是一个不错的选择,但这会增加操作的额外成本。处理每个文件最多需要2秒。所以我想增加超时时间,并充分利用每次调用的lambda。SQS队列似乎更有希望。