如何获取单个 s3 文件创建事件

Kyl*_*ton 5 amazon-s3 amazon-sns aws-lambda

我有几个亚马逊 s3 存储桶,不同的客户端通常使用 sftp 将文件上传到这些存储桶。由于不同的客户端以不同的方式访问存储桶,我无法准确预测他们将如何上传文件。我希望在新文件到达时收到通知,因此当任何 s3 对象创建甚至被触发时,我都会将存储桶写入 SNS 主题。但是,对于某些客户端,这会为每个文件创建产生 3 个不同的事件:

  1. ObjectCreated:Put文件大小为 0的事件
  2. ObjectCreated:Copy具有完整文件大小的事件
  3. ObjectCreated:CompleteMultiPartUpload,也有完整的文件大小。

我有一个 lambda 函数监听这个事件,我希望它每个文件只执行一次。有什么可以区分这些重复事件吗?

我不想让 s3 存储桶只写Copyor CompleteMultiPartUploads,因为我担心有些客户端只会触发其中一个(除非有一些保证每个 s3 文件创建都会触发这些触发器,但我没有在任何地方的文档中都看到过)。

我真的不想用我的 lambda 将接收到的文件记录到数据库中,因为这会使检测客户端何时合法地重新上传同名文件变得具有挑战性。

我确定我的 lambda 工作正常,这些是不同的事件,而不是重试

小智 1

对于一个文件,您应该只会收到一个通知。但无论如何,对于s3文件事件触发器,你可以使用optionAll object create events选项。这将为每个文件发送一个事件。