用户上传到S3存储桶时会收到通知吗?

时间:2011-12-29 23:10:57

标签: amazon-s3 amazon-web-services

  

可能重复:
  Notification of new S3 objects

我们有一个应用程序可以在S3上存储用户数据。处理上传的应用程序部分与处理数据的部分分离。在某些情况下,用户可以直接将数据上传到S3而无需通过我们的应用程序(如果他们拥有自己的S3帐户并向我们提供凭据,则可能会发生这种情况)。

只要S3存储桶的内容发生变化,是否可以收到通知?如果以某种方式发送一条消息,说“此文件已添加/更新/删除:foo”,那将会很酷。

如果不是这样的话,我可以在某个地方查询某个时间戳会告诉上次更新存储桶吗?

如果我不能做这些事情中的任何一个,那么唯一的选择是抓取整个存储桶并寻找更改。这将是缓慢而昂贵的。

1 个答案:

答案 0 :(得分:19)

更新2014-11:

正如Alan Illing在评论中指出的那样,AWS现在支持从S3到SNS的通知,这些通知可以自动转发到SQS:http://aws.amazon.com/blogs/aws/s3-event-notification/

S3还可以向AWS Lambda发送通知以直接运行您自己的代码。

预测S3-> SNS通知的原始回复:

如果亚马逊支持这一点,他们会使用SNS发送一个对象已添加到存储桶的通知。但是,目前,S3和SNS支持的唯一存储桶事件是在Amazon S3检测到丢失了Redced Redundancy Storage(RRS)对象的所有副本并且无法再为该对象提供请求时通知您。

以下是S3支持的SNS事件的文档:

  

http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html

根据编写文档的方式,看起来亚马逊有想要添加其他通知事件的想法(例如,您可能想知道何时添加新密钥)。

鉴于亚马逊不直接支持它,将对象上传到S3的S3客户端需要触发通知,否则您需要进行某种轮询。

如果您希望获得接近实时的处理更新,可以使用SNS完成上传到S3的自定义事件通知,或者如果您想让通知堆积并处理掉,则可以通过SQS完成按照你自己的节奏排队。

如果您正在进行轮询,则可以通过让客户端上传前缀为“unprocessed / ...”后跟唯一键来减少您需要请求的密钥数量。然后,您的轮询软件可以查询以该前缀开头的S3密钥。当它准备好处理时,它可以将密钥改为“处理/ ...”,然后再改为“已处理/ ......”或其他。 S3中的对象当前通过S3执行的复制+删除操作重命名。