如何指定与目录不匹配的对象过期前缀?



我有一个S3存储桶,其中包含imgmovtmp目录。我希望添加到tmp的所有内容在使用三天后自动删除。所以我在我的bucket上设置了对象过期规则,如下所示:

  • 前缀:"tmp/"
  • 有效期:3

问题是,虽然tmp中的文件会按计划删除,但tmp本身也会匹配此前缀(显示尾部斜杠),并每三天删除一次。

是否有任何前缀与tmp的内容匹配,但与tmp本身不匹配?像"tmp/*"这样的东西(尽管这不起作用)?

为什么要保留tmp

AmazonS3实际上并没有文件夹/目录的原生概念,而是一个仅由bucket和对象/键组成的平面存储架构——S3的大多数工具(包括AWS管理控制台本身)中的目录样式表示仅基于约定,即模拟具有相同前缀的对象的层次结构(例如,在您的情况下为tmp/);请参阅相应的常见问题解答亚马逊S3数据是如何组织的?:

AmazonS3是一个简单的基于密钥的对象存储。存储数据时指定一个唯一的对象键,该键稍后可用于检索数据键可以是任何字符串,并且可以被构造为模仿层次属性

[强调矿]

这个体系结构在AmazonS3概念:中有进一步的详细介绍

bucket是存储在AmazonS3中的对象的容器。每个对象装在一个桶里。例如,如果名为的对象photos/puddy.jpg存储在johnsmith存储桶中,然后可使用URL寻址http://johnsmith.s3.amazonaws.com/photos/puppy.jpg

[…]

按键

关键字是bucket中对象的唯一标识符每个bucket中的对象只有一个键。因为bucket、key和版本ID唯一地标识每个对象,AmazonS3可以被认为是"bucket+key+version"之间的基本数据映射以及对象本身。

[强调矿]

因此,根本不需要关心这些"目录",只要你碰巧存储了一个名称中有相应前缀的对象,它们就会重新出现。

看来IAM应该可以做到这一点:您创建一个IAM用户,该用户只能删除tmp中的文件(而不能删除tmp/本身),然后使用该用户在bucket上设置生命周期。然后tmp/对象将不会被删除。

但文档对此并不太清楚-您必须对其进行测试。

最新更新