我有一个S3存储桶,其中包含img
、mov
和tmp
目录。我希望添加到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/对象将不会被删除。
但文档对此并不太清楚-您必须对其进行测试。