Amazon S3 删除标记

Posted

技术标签:

【中文标题】Amazon S3 删除标记【英文标题】:Amazon S3 Delete Markers 【发布时间】:2015-01-16 04:40:52 【问题描述】:

我为 Amazon S3 中的一些文件设置了网络存储。我正在使用它的 php SDK 来管理这些文件。我有一个自动化脚本正在运行,以在一段时间后从某个存储桶中删除文件。我刚刚意识到我不相信它实际上是在删除文件,而是用删除标记替换它们。当我使用传输(Mac)之类的程序查看存储桶时,它会列出自 2013 年以来我设置脚本时的所有文件。但是如果我在浏览器中进入管理界面,它只会列出我在脚本中设置的截止日期的文件。

我的问题是:当我实际上不需要保留任何这些文件时,我是否会为存储这些标记支付更多的钱?以及如何永久删除这些文件?我发现这只是版本化存储桶的问题,但这个特定的存储桶没有版本化。根据文档,我需要在删除调用中包含对象的版本 ID 以删除标记,但此时,我如何检索该信息,因为“listObjects”不返回这些信息。

提前致谢!

编辑:我还应该提到,如果我使用传输来下拉“已删除”文件,该文件仍会打开并像从未被删除一样运行。

【问题讨论】:

您说存储桶没有版本化,但这听起来像是版本化存储桶的行为。检查控制台?可能是存储桶启用了版本控制但已暂停。我对 php sdk 不熟悉,但您可能会寻找类似于 ListObjectVersions 的内容,它将向您显示对象和版本 ID。 【参考方案1】:

如果在 Amazon S3 存储桶上启用了版本控制,则将对象上传到现有键名的所有操作都将导致创建该对象的其他版本。之前的版本将保留在 Amazon S3 上。删除对象会添加一个删除标记​​strong>,使对象看起来已被删除,但之前的版本仍可供下载。

如果 Bucket 启用了版本控制,您可以在控制台中查看对象版本和删除标记:

在 Amazon S3 控制台中访问您的存储桶 在屏幕顶部查找版本按钮。它应该有两个按钮:显示隐藏 选择显示将显示删除标记和所有以前版本的对象

在一段时间后从 Amazon S3 中删除对象的更简单方法是:

选择您的存储桶 打开属性 点击生命周期 创建规则集以在对象创建日期后 n 天永久删除

【讨论】:

据我所知,如果对象不是“当前最新”版本,生命周期规则只会永久删除对象,即它们只会删除被覆盖的密钥版本。要删除“当前最新删除的版本”,您仍然需要运行脚本。 @AmosShapira:使用当前生命周期规则版本,您可以按年龄删除旧版本和/或当前版本 @Jonathan 自从我不得不处理这个问题已经有一段时间了,但如果 S3 和 CloudFormation 在我写下这个答案后添加了该选项,我不会感到惊讶。当我写这篇文章时,我使用了一个 Lambda 函数和一个自定义资源来实现它。

以上是关于Amazon S3 删除标记的主要内容,如果未能解决你的问题,请参考以下文章

尽管存储桶是公共的,但 Amazon S3 base64 图像不适用于 og:image 标签

删除 Amazon S3 存储桶? [关闭]

AWS Lambda无法删除Amazon S3对象

AWS Lambda 无法删除 Amazon S3 对象

在 amazon s3 java 中删除文件、目录和存储桶

使用 PHP 开发工具包删除 Amazon S3 中的版本控制文件