S3 事件通知的实时性

Realtime-ness of S3 event notification

我对对象的流量生命周期(即创建和删除对象的时间)很感兴趣。 一种方法是定期扫描存储桶并明确跟踪 lastModifiedTime 并与之前的扫描结果进行比较以识别已删除的对象。

我正在考虑的另一个备选方案是启用 S3 事件通知。但是,通知中的数据不包含对象的 lastModifiedTime。 eventTime 可以用作代理吗?是否可以保证事件的发送速度?就我而言,事件的交付延迟是可以接受的;只要 eventTime 不明显晚于对象

modificationTime

此外,还有其他方法可以捕获 s3 对象的生命周期吗?

无法保证传送事件需要多长时间。来自 docs:

Amazon S3 event notifications are designed to be delivered at least once. Typically, event notifications are delivered in seconds but can sometimes take a minute or longer.

同时发生的事件,最后可能由单个事件表示:

If two writes are made to a single non-versioned object at the same time, it is possible that only a single event notification will be sent. If you want to ensure that an event notification is sent for every successful write, you can enable versioning on your bucket. With versioning, every successful write will create a new version of your object and will also send an event notification.

是的,eventTime 非常接近对象的 lastModifiedTime。这里需要注意的是 lastModifiedTime 的定义是

Object creation date or the last modified date, whichever is the latest.

因此,为了使用 eventTime 作为近似值,您可能需要一个触发器来涵盖创建或修改对象的所有事件。关于事件发送速度的问题,这里引用 S3 文档:

Amazon S3 event notifications are designed to be delivered at least once. Typically, event notifications are delivered in seconds but can sometimes take a minute or longer.

如果想要准确lastModifiedTime,需要对每个对象进行headObject操作。

您的第一个周期性拉取方法可能会奏效,但请注意,如果您有数百万个对象,请不要天真地这样做。我的意思是不要使用 listObjects 并在 while 循环中执行。这根本无法扩展并且 listObjects API 非常昂贵。如果您只需要每天或每周一次进行此流量分析,我建议使用 S3 清单。 lastModifiedTime 包含在清单报告中。 [ref]