0

我对对象的流量生命周期(即创建和删除对象的时间)感兴趣。一种方法是执行存储桶的定期扫描并显式跟踪lastModifiedTime并执行与先前扫描结果的差异以识别已删除的对象。

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

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

4

2 回答 2

4

是的,eventTime是一个对象的一个​​很好的近似值lastModifiedTime。这里的一个警告是 is 的lastModifiedTime定义

对象创建日期或最后修改日期,以最晚者为准。

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

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内发送,但有时可能需要一分钟或更长时间。

如果你想要准确的lastModifiedTime,你需要headObject对每个对象做一个操作。

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

于 2020-05-15T22:27:15.983 回答
2

无法保证交付事件需要多长时间。从文档

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内送达,但有时可能需要一分钟或更长时间

同时发生的事件也可以用最后的单个事件来表示:

如果同时对一个非版本化对象进行两次写入,则可能只会发送一个事件通知。如果您想确保每次成功写入都会发送事件通知,您可以在存储桶上启用版本控制。使用版本控制,每次成功的写入都会创建对象的新版本,并且还会发送事件通知。

于 2020-05-15T22:19:54.823 回答