Amazon S3 对象过期

use*_*587 3 amazon-s3

我阅读了很多关于如何过期(删除)亚马逊 S3 对象并尝试设置生命周期规则来做到这一点,但是对象没有被删除,想知道我做错了什么。

我在 S3 上有这样组织的对象:

Amazon S3 > my-test-bucket > my-test-org > a.csv, 
                                           b.xml, 
                                           c.xsl...
Run Code Online (Sandbox Code Playgroud)

如果它们是 365 天,我需要删除 my-test-bucket 中的所有文件。那里有很多文件已经超过 2 年了,所以按照这个规则,这些文件应该被删除。

在生命周期规则中,我指定添加过滤器来限制范围 my-test-bucket,在“到期”部分,我选择了“当前版本”和“以前版本”,

  • 在对象创建 365 天后使当前版本的对象过期
  • 在成为旧版本 365 天后永久删除旧版本
  • 该规则适用于前缀“my-test-bucket”

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

完成所有这些后,我一直在等待和等待,但什么也没发生。那些旧文件还在。我的问题是:

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

谢谢

Mic*_*bot 5

“该规则适用于前缀‘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
Run Code Online (Sandbox Code Playgroud)

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

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