Amazon S3 对象过期



我阅读了很多关于如何过期(删除(Amazon S3对象的信息,并尝试设置生命周期规则来执行此操作,但是对象没有被删除,想知道我做错了什么。

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

Amazon S3 > my-test-bucket > my-test-org > a.csv, 
b.xml, 
c.xsl...

我需要删除 my-test-bucket 中的所有这些文件,如果它们是 365 天前的。 那里有很多文件超过 2 年,因此使用此规则应删除这些文件。

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

  • 对象创建后 365 天后使对象的当前版本过期
  • 在成为先前版本后的 365 天后永久删除以前的版本
  • 该规则适用于前缀"我的测试存储桶">

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

做完这些后,我一直在等待,等待,但什么也没发生。 那些旧文件仍然存在。 我的问题是:

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

谢谢

"该规则适用于前缀'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 午夜左右开始,实际清除在此之后的一段时间开始。

最新更新