Amazon web services AWS Lambda S3事件无限循环

Amazon web services AWS Lambda S3事件无限循环,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我想在上传视频文件(.mp4)时使用S3事件发布到AWS Lambda,以便对其进行压缩。问题是视频文件的路径存储在RDS中,因此我希望压缩后路径保持不变。据我所知,替换文件将再次调用创建的对象事件,从而导致无限循环 有没有办法在不触发任何事件的情况下替换文件?我的选择是什么?你是对的,你不能完全区分。从中,支持以下事件: s3:ObjectCreated:Put–通过HTTP Put操作创建了一个对象 s3:ObjectCreated:Post–通过HTTP Post操作创建了一个对象 s3

我想在上传视频文件(.mp4)时使用S3事件发布到AWS Lambda,以便对其进行压缩。问题是视频文件的路径存储在RDS中,因此我希望压缩后路径保持不变。据我所知,替换文件将再次调用创建的
对象
事件,从而导致无限循环


有没有办法在不触发任何事件的情况下替换文件?我的选择是什么?

你是对的,你不能完全区分。从中,支持以下事件:

  • s3:ObjectCreated:Put
    –通过HTTP Put操作创建了一个对象
  • s3:ObjectCreated:Post
    –通过HTTP Post操作创建了一个对象
  • s3:ObjectCreated:Copy
    –通过s3复制操作创建了一个对象
  • s3:ObjectCreated:CompleteMultipartUpload
    –通过完成s3多部分上传创建对象
  • s3:ObjectCreated:
    –对象是由上面列出的事件类型之一创建的,或者是由将来添加的类似对象创建事件创建的
  • s3:ReducedRedundancyObjectLost
    –以减少冗余存储的s3对象已丢失
对于这类问题,我通常看到的架构是有两个S3存储桶

  • 1 S3 Bucket存储源材料而不进行任何修改,这将触发Lambda事件
  • 1 S3 Bucket存储来自压缩输出的已处理工件

通过这样做,您可以存储原始文件,并在需要时重新运行以进行自动更正。

对于此问题,有一个不合适的解决方案,但在任何地方都没有记录

Lambda函数中的
事件
参数包含一个
userIdentity
dict,其中包含
principalId
。对于因AWS Lambda而引发的事件(如上文提到的更新S3对象),此
principalId
包含末尾附加的Lambda函数的名称


因此,通过检查
principalId
可以推断事件是否来自Lambda,并相应地进行压缩。

我是否可以使用
ObjectCreated:Put
请求AWS Lambda,和
Post
用于正常上传到S3并触发S3事件?是的,您可以筛选以使用ObjectCreated:Post进行上传。默认情况下,post是通过浏览器发布的,而put是通过CLI发布的。