Amazon S3 - "子目录"的不同生命周期规则比父母"目录"

时间:2016-02-21 22:54:40

标签: amazon-web-services amazon-s3

我们说我有以下数据结构:

  • /
  • /富
  • /富/酒吧
  • /富/巴兹

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

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

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

我的根本问题是:我有4种类型的项目。最基本的类型有几千个项目,其他几个有几十个。每种类型我都有义务存放一段不同的时间。每个项目包含数十万个对象。它或多或少看起来像:

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

到目前为止这么简单。然而。项目可以从一种类型升级或降级到另一种类型。正如我所说 - 我有几千个第一类实例,所以我不能为每一个实例编写具体规则(记住每桶1000个规则限制)。而且由于它们可以从一种类型升级到另一种类型,我不能简单地将它们插入到它们自己的文件夹中(例如,仅来自特定类型的项目)或桶。或者我认为呢?除了迭代每个对象之外,还有其他任何选项,除非我想清除过期的文件 - 由于对象的数量太多,我真的不愿意这样做吗?

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

非常有必要:)

2 个答案:

答案 0 :(得分:7)

生命周期政策基于前缀,而不是“子目录”。

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

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

您也可能希望在指定前缀时记住尾部斜杠,因为/匹配文件foo/barfoo/bart.jpg没有。

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

任何类型的移动,传输,复制等都将重置对象的创建日期。甚至修改元数据,因为对象是不可变的。每当您移动,传输,复制或“重命名”对象(实际上是复制和删除),或修改元数据(实际上是复制到同一个键,使用不同的元数据)时,您实际上都在创建一个新对象。 / p>

答案 1 :(得分:0)

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

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

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

前缀- S3标签

/ tag => delete_after_one_month

/ foo tag => delete_after_two_months

/ foo / bar tag => delete_after_three_months

/ foo / baz tag => delete_after_six_month