从启用了版本控制的存储桶中删除对象版本 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从启用了版本控制的存储桶中删除对象版本

您在需要时随时可以从 Amazon S3 存储桶中删除对象版本。您还可为具有明确定义的生命周期的对象定义生命周期配置规则,请求 Amazon S3 使当前对象版本过期,或者永久删除非当前对象版本。当存储桶启用了版本控制或者版本控制功能已暂停时,生命周期配置操作的工作方式如下:

  • Expiration 操作适用于当前对象版本。Amazon S3 通过添加删除标记将当前版本作为非当前版本保留(而不是删除当前对象版本),然后删除标记将成为当前版本。

  • NoncurrentVersionExpiration 操作适用于非当前对象版本,Amazon S3 会永久删除这些对象版本。无法恢复永久删除的对象。

有关 S3 生命周期的更多信息,请参阅管理存储生命周期S3 生命周期配置的示例

要查看您的存储桶有多少个当前和非当前对象版本,您可以使用 Amazon S3 Storage Lens 存储统计管理工具指标。S3 Storage Lens 存储统计管理工具是一项云存储分析功能,您可以使用它在整个组织范围内了解对象存储的使用情况和活动。有关更多信息,请参阅使用 S3 Storage Lens 存储统计管理工具优化存储成本。有关指标的完整列表,请参阅 S3 Storage Lens 存储统计管理工具指标词汇表

注意

正常的 Amazon S3 费率适用于存储和传输的每个对象版本,包括非当前对象版本。有关更多信息,请参阅 Amazon S3 定价

删除请求使用案例

DELETE 请求具有以下使用案例:

  • 启用版本控制后,简单 DELETE 无法永久删除对象。(简单 DELETE 请求是指未指定版本 ID 的请求。) Amazon S3 将在存储桶中插入删除标记,该删除标记将成为对象的当前版本并具有新的 ID。

    当您尝试对当前版本为删除标记的对象执行 GET 操作时,Amazon S3 将该对象作为已删除对象对待(即使它尚未被擦除),并返回 404 错误。有关更多信息,请参阅使用删除标记

    下图显示简单 DELETE 实际上不会删除指定的对象。但是,Amazon S3 将插入一个删除标记。

  • 要永久删除受版本控制的对象,您必须使用 DELETE Object versionId

    下图显示删除指定的对象版本将永久删除该对象。

要删除对象版本

您可以使用控制台、Amazon SDK 或 REST API 或 Amazon Command Line Interface 删除 Amazon S3 中的对象版本。

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

  2. 存储桶列表中,请选择包含对象的存储桶的名称。

  3. Objects(对象)列表中,请选择对象的名称。

  4. 请选择 Versions(版本)。

    Amazon S3 显示了对象的所有版本。

  5. 选中要检索的版本的版本 ID 旁的复选框。

  6. 请选择 Delete(删除)。

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

    警告

    永久删除对象版本时,该操作将无法撤消。

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

    Amazon S3 将删除对象版本。

有关使用适用于 Java、.NET 和 PHP 的 Amazon SDK 删除对象的示例,请参阅 删除 Amazon S3 对象。在不受版本控制和启用了版本控制的存储桶中删除对象的示例是相同的。但是,对于启用了版本控制的存储桶,Amazon S3 会分配版本号。否则,版本号为空。

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

Python

以下 Python 代码示例通过删除版本控制对象的所有版本永久删除了该对象。

def permanently_delete_object(bucket, object_key): """ Permanently deletes a versioned object by deleting all of its versions. 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 delete. """ try: bucket.object_versions.filter(Prefix=object_key).delete() logger.info("Permanently deleted all versions of object %s.", object_key) except ClientError: logger.exception("Couldn't delete all versions of %s.", object_key) raise
删除对象的特定版本
  • DELETE 中,指定版本 ID。

例 — 删除特定版本

以下示例删除了 photo.gif 的版本 UIORUnfnd89493jJFJ

DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 12 Oct 2009 17:50:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= Content-Type: text/plain Content-Length: 0

以下命令从名为 DOC-EXAMPLE-BUCKET1 的存储桶中删除名为 test.txt 的对象。要删除特定版本的对象,您必须是存储桶拥有者,并且您必须使用版本 Id 子资源。

aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET1 --key test.txt --version-id versionID

有关 delete-object 的更多信息,请参阅《Amazon CLI 命令参考》中的 delete-object

有关删除对象版本的更多信息,请参阅以下主题: