如何在对象上载时停止/控制由AWS S3触发的事件以调用AWS Lambda?

时间:2019-01-12 07:36:39

标签: java amazon-web-services amazon-s3 aws-lambda

我当前正在将文件上传到250 MB大小和100万条记录的AWS S3 Bucket(B1)。这将触发一个Lambda(L1-1.5GB,3分钟),该Lambda读取该文件并使用某些条件将记录分组,并在不同的存储桶(B2)上再次将约25K文件写入S3。

现在,在存储桶(B2)上配置的通知事件会向不同的Lambda(L2-512MB,2Mins,并发2)生成25K事件(请求)。该Lambda调用基于Java的微服务,该微服务在处理后进入DB,每次调用大约需要1-2秒。

这里的问题是,一旦触发第二个Lambda(L2),就无法停止它。它运行了几个小时,并且直到完全处理完所有事件为止,并且没有收到相同lambda的任何其他事件,而且我无法控制已触发的S3事件。

有人可以解释一下在Amazon S3上处理文件上载(架构)时在S3上触发的事件以及如何对触发的S3事件进行细粒度控制吗?

我可以在AWS Lambda方面做些什么来阻止已经触发的S3事件吗?

1 个答案:

答案 0 :(得分:0)

当您一次写入25K对象时,我认为在B2上设置通知事件不是最佳选择。我认为可以简化流程。

    Lambda L1中写入25K对象的
  • B2可以创建要写入的对象键数组,并将其放入B2中。确保将其写入单独的文件夹中,并在该文件夹上而不是在写入25K文件的位置中设置通知事件。

  • L2将在您写入包含25K对象键的文件时触发,该文件可以传递给microservice

使用SNS的另一种选择

    Lambda L1中写入25K对象的
  • B2可以创建要写入的对象密钥数组,并将其发布到SNS主题。 SNS邮件大小为256 KB,足以满足您的用例

  • mircoservice可以订阅SNS Topic以接收对象密钥并在数据库中进行输入