我目前在 S3 中有两个存储桶 - 我们将它们称为 photos
和 photos-thumbnails
。现在,当用户从我们的 iOS 应用程序上传图像时,我们直接将该照片上传到 photos
存储桶,这会触发 lambda 函数,将照片大小调整为缩略图并将缩略图上传到 照片缩略图
存储桶。
现在,我想在原始存储桶 (photos
) 中创建缩略图之前,对 photos
存储桶中的图像进行一些图像压缩。但是,如果我将压缩 lambda 函数设置为在 photos
存储桶中创建对象时触发,则它将陷入用户上传原始照片的永无止境的循环中,从而触发压缩并放回同一个桶中,再次触发压缩,等等。
有没有办法可以在它成为图像压缩的递归调用之前拦截它?或者是创建第三个存储桶的唯一方法?
最佳答案
第三个桶可能是最好的。如果你确实想使用同一个存储桶,只需选择一些标准来控制 photos
中的图像是否应该修改(可能是图像文件大小或其他),然后确保已经处理过一次的图像低于阈值。 lambda 仍然会运行两次,但第二次它会检查图像并发现它已经被处理过,因此不会再次处理它。据我所知,没有办法抑制 lambda 的第二次运行。
另一个选项可能是根据 how the object is created 进行过滤。 S3 中可以使用以下事件类型。使用一个用于用户上传的内容(也许是 POST?),另一个用于执行 lambda 的功能(也许是 PUT?)
- s3:ObjectCreated:Put
- s3:ObjectCreated:Post
- s3:ObjectCreated:复制
- s3:ObjectCreated:CompleteMultipartUpload
关于image - 运行 AWS Lambda 函数后,如何将图像放回同一个 S3 存储桶中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174269/