管理删除标记 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

管理删除标记

配置生命周期以自动清理过期的删除标记

过期的对象删除标记是指,删除所有对象版本而只保留一个删除标记。如果生命周期配置设置为删除当前版本,或显式设置了 ExpiredObjectDeleteMarker 操作,则 Amazon S3 会删除过期对象的删除标记。有关示例,请参阅在启用了版本控制的存储桶中移除到期对象删除标记

删除删除标记以使旧版本变为当前版本

当您删除启用了版本控制的存储桶中的某个对象时,所有版本都将保留在存储桶中并且 Amazon S3 将为该对象创建一个删除标记。要取消删除该对象,您必须删除此删除标记。有关版本控制和删除标记的更多信息,请参阅使用 S3 版本控制保留对象的多个版本

要永久删除“删除标记”,必须在 DeleteObject versionId 请求中包含其版本 ID。下图显示了 DeleteObject versionId 请求如何永久删除“删除标记”。

图中显示了使用其版本 ID 的删除标记删除。

去除删除标记的效果是:简单的 GET 请求现在将检索对象的当前版本 ID(121212)。

注意

如果在当前版本是一个删除标记(未指定删除标记的版本 ID)的情况下使用 DeleteObject 请求,Amazon S3 将不会删除该删除标记,而是对另一个删除标记执行 PUTs 请求。

要删除具有 NULL 版本 ID 的删除标记,必须在 DeleteObject 请求中将 NULL 作为版本 ID 传递。下图显示了在没有版本 ID(当前版本是一个删除标记)的情况下如何发出简单的 DeleteObject 请求,未删除任何内容,而是再添加一个具有唯一版本 ID (7498372) 的删除标记。

图中显示了使用 NULL 版本 ID 的删除标记删除。

按照以下步骤,从 S3 存储桶中恢复文件夹之外的已删除对象,包括这些文件夹中的对象。

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 存储桶列表中,请选择您想要的存储桶的名称。

  3. 要查看存储桶中对象的版本列表,请选择列出版本开关。您将能够看到已删除对象的删除标记。

  4. 要取消删除对象,您必须删除掉删除标记。选中要恢复的对象的删除标记旁边的复选框,然后选择 Delete (删除)

  5. Delete objects (删除对象) 页面上确认删除。

    1. 对于 Permanently delete objects?(永久删除对象?),输入 permanently delete

    2. 请选择 Delete objects(删除对象)。

注意

您无法使用 Amazon S3 控制台取消删除文件夹。您必须使用 Amazon CLI 或 SDK。例如,请参阅 Amazon 知识中心中的如何检索启用版本控制的存储桶中已被删除的 Amazon S3 对象?

永久删除“删除标记”的步骤
  1. versionId 设置为要删除的删除标记的版本 ID。

  2. 发送 DELETE Object versionId 请求。

例 — 删除“删除标记”

以下示例删除用于 photo.gif 版本 4857693 的删除标记。

DELETE /photo.gif?versionId=4857693 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

删除“删除标记”时,Amazon S3 将在响应中包含以下内容:

204 NoContent x-amz-version-id: versionID x-amz-delete-marker: true

有关使用其他 Amazon SDK 的信息,请参阅 Amazon 开发人员中心

Python

以下 Python 代码示例演示了如何从对象中删除“删除标记”,从而使最新的非当前版本成为对象的当前版本。

def revive_object(bucket, object_key): """ Revives a versioned object that was deleted by removing the object's active delete marker. A versioned object presents as deleted when its latest version is a delete marker. By removing the delete marker, we make the previous version the latest version and the object then presents as *not* deleted. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that contains the object. :param object_key: The object to revive. """ # Get the latest version for the object. response = s3.meta.client.list_object_versions( Bucket=bucket.name, Prefix=object_key, MaxKeys=1 ) if "DeleteMarkers" in response: latest_version = response["DeleteMarkers"][0] if latest_version["IsLatest"]: logger.info( "Object %s was indeed deleted on %s. Let's revive it.", object_key, latest_version["LastModified"], ) obj = bucket.Object(object_key) obj.Version(latest_version["VersionId"]).delete() logger.info( "Revived %s, active version is now %s with body '%s'", object_key, obj.version_id, obj.get()["Body"].read(), ) else: logger.warning( "Delete marker is not the latest version for %s!", object_key ) elif "Versions" in response: logger.warning("Got an active version for %s, nothing to do.", object_key) else: logger.error("Couldn't get any version info for %s.", object_key)