关于Amazon S3:Amazon S3-“子目录”与父”目录”的生命周期规则不同

Amazon S3 - different lifecycle rule for “subdirectory” than for parent “directory”

假设我具有以下数据结构:

  • /
  • / foo
  • / foo / bar
  • / foo /巴兹

是否可以为其分配以下生命周期规则:

  • / (1个月)
  • / foo(2个月)
  • / foo / bar(3个月)
  • / foo / baz(6个月)

不幸的是,官方文件在这方面是矛盾的。它似乎不适用于AWS控制台,这使我有点怀疑SDK / REST是否会有所不同;)

未能解决我的根本问题是:我有4种类型的项目。最基本的类型有几千个项目,其他的则有几十个。我必须将每种类型存储不同的时间。每个项目包含数十万个对象。它看起来或多或少是:

  • 类型A,占项目的90%,需要存储x
  • B型,占项目的6%,需要2倍的存储空间
  • C型,占项目的3%,需要存储量的4倍
  • D型,占项目的1%,需要8倍的存储空间

到目前为止非常简单。然而。项目可以从一种类型升级或降级到另一种类型。就像我说的那样-我有数千个第一种类型的实例,所以我不能为它们中的每一个编写特定的规则(记住每个存储桶1000条规则限制)。而且由于它们可能从一种类型升级为另一种类型,所以我不能简单地将它们也插入到自己的文件夹中(例如,仅来自特定类型的项目)或存储桶。还是我觉得呢?我每次想清除过期的文件时,除了遍历每个对象外,是否还有其他选择可供我使用-由于对象数量众多,我宁愿不这样做?

也许在存储桶之间某种文件"移动/传输"不会修改创建时间元数据,并且对于我们的服务器来说处理成本不高吗?

将非常有义务:)


生命周期策略基于前缀,而不是"子目录"。

因此,如果要在2个月内删除与foo/前缀匹配的对象,则要求在3个月内删除前缀为foo/bar/的对象是不合逻辑的,因为它们将被删除2个月后...,因为它们也匹配前缀foo/。前缀表示前缀。分隔符不是生命周期规则中的一个因素。

还请注意,S3中的键和前缀不是以/开头。影响整个存储桶的策略使用空字符串作为前缀,而不是/

您也确实想记住在指定前缀时的斜杠,因为foo/bar与文件foo/bart.jpg匹配,而foo/bar/与文件foo/bart.jpg不匹配。

遍历要删除的对象并不像您想象的那样糟糕,因为List Objects API调用每个请求返回1000个对象(如果需要,可以返回更少的对象),并允许您同时指定前缀和定界符(通常,如果要使用控制台用来创建分层显示的伪文件夹模型对响应进行分组,则将使用/作为分隔符。...并且响应XML中提供了每个对象的键和日期戳。还有一个API请求,可在一次调用中删除多个对象。

任何一种移动,转移,复制等操作都将始终重置对象的创建日期。甚至修改元数据,因为对象是不可变的。每当您移动,转移,复制或"重命名"一个对象(实际上是复制和删除),或修改元数据(实际上是复制到同一键,但具有不同的元数据)时,实际上就是在创建一个新对象。铅>


@Zardii,可以为这些前缀下的对象使用唯一的s3对象标签[1]。

然后,您可以通过具有不同保留/删除期限的标签来应用生命周期策略。

[1] https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html

前缀-S3标签

/ tag => delete_after_one_month

/ foo标签=> delete_after_two_months

/ foo / bar标签=> delete_after_three_months

/ foo / baz标签=> delete_after_six_month