我读了很多关于如何过期(删除)亚马逊S3对象并试图设置生命周期规则来做到这一点,但是没有删除对象,想知道我做错了什么。
我在S3上的对象组织如下:
Amazon S3 > my-test-bucket > my-test-org > a.csv,
b.xml,
c.xsl...
我需要删除my-test-bucket中的所有文件,如果它们已经365天了。有超过2年的大量文件,所以这个规则应该删除这些文件。
在生命周期规则中,我指定了添加过滤器以限制范围my-test-bucket,以及“过期”#39;部分,我选择了当前版本'和'以前的版本',
my-test-bucket未启用版本控制。
完成所有这些后,我一直在等待,但没有发生任何事情。那些旧文件仍在那里。我的问题是:
感谢
答案 0 :(得分:3)
“该规则适用于前缀'my-test-bucket'”
这是你的错误。前缀是指对象键前缀。这不包括存储桶名称。
您想要的前缀是my-test-org/
。尾部斜杠非常重要,因为没有它,您的规则也会匹配其他键前缀,例如my-test-organization
和my-test-organism
,这可能会导致意外匹配。
请记住,S3中没有真正的文件夹。对象键是字符串,由/
分隔以表示文件夹层次结构,但文件夹不是真正的容器。出现在文件夹“bar”中的文件“foo.txt”实际上有一个对象键“bar / foo.txt”。
伪码中的前缀匹配是
if(left(object_key, len(prefix)) == prefix) { # rule matches
更改规则以使用此前缀,如果超过365天,将删除具有以my-test-org/
开头的键的每个对象。当然,这包括所有子目录。
规则测试似乎在UTC午夜左右开始,实际清除开始后一段时间。