我阅读了很多关于如何过期(删除(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 未启用版本控制。
做完这些后,我一直在等待,等待,但什么也没发生。 那些旧文件仍然存在。 我的问题是:
- 自动过期何时发生?每天午夜还是什么?
- 是否有一个按钮可以让我按下它立即使对象过期?
- 就我而言,我在 my-test-org 下有文件,而不是在 my-test-bucket 下,这个规则仍然有效吗? 我是否必须在规则中应用通配符以确保它检查所有 org 文件夹中的所有文件?
谢谢
"该规则适用于前缀'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 午夜左右开始,实际清除在此之后的一段时间开始。