Amazon S3对象过期

时间:2018-05-03 22:54:16

标签: amazon-s3

我读了很多关于如何过期(删除)亚马逊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;部分,我选择了当前版本'和'以前的版本',

  • 在对象创建365天后使对象的当前版本失效
  • 从成为旧版本365天后永久删除以前的版本
  • 该规则适用于前缀' my-test-bucket'

my-test-bucket未启用版本控制。

完成所有这些后,我一直在等待,但没有发生任何事情。那些旧文件仍在那里。我的问题是:

  1. 什么时候自动过期?每天午夜或者什么?
  2. 是否有一个按钮,我可以推动它立即使对象过期?
  3. 在我的情况下,我有my-test-org下的文件,而不是my-test-bucket下的文件,这个规则是否仍然有效?我是否必须在规则中应用通配符以确保它检查所有组织文件夹中的所有文件?
  4. 感谢

1 个答案:

答案 0 :(得分:3)

  

“该规则适用于前缀'my-test-bucket'”

这是你的错误。前缀是指对象键前缀。这不包括存储桶名称。

您想要的前缀是my-test-org/。尾部斜杠非常重要,因为没有它,您的规则也会匹配其他键前缀,例如my-test-organizationmy-test-organism,这可能会导致意外匹配。

请记住,S3中没有真正的文件夹。对象键是字符串,由/分隔以表示文件夹层次结构,但文件夹不是真正的容器。出现在文件夹“bar”中的文件“foo.txt”实际上有一个对象键“bar / foo.txt”。

伪码中的前缀匹配是

if(left(object_key, len(prefix)) == prefix) { # rule matches

更改规则以使用此前缀,如果超过365天,将删除具有以my-test-org/开头的键的每个对象。当然,这包括所有子目录。

规则测试似乎在UTC午夜左右开始,实际清除开始后一段时间。