Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

删除或清空存储桶

可以轻松删除空的存储桶。但是,在某些情况下,您可能需要删除或清空包含对象的存储桶。在此部分中,我们将介绍如何从不受版本控制的存储桶中删除对象,以及如何从已启用版本控制的存储桶中删除对象版本和删除标记。有关版本控制的更多信息,请参阅使用版本控制。在某些情况下,您可以选择清空存储桶而不是删除存储桶。本部分将介绍可供您用来删除或清空包含对象的存储桶的各种选项。

删除存储桶

您可以使用 AWS 开发工具包以编程方式删除存储桶及其内容。您还可以对某个存储桶使用生命周期配置来清空其内容,然后删除该存储桶。还提供了其他选项,例如使用 Amazon S3 控制台和 AWS CLI,但这些方法受到有关存储桶中的对象数和存储桶的版本控制状态的限制。

删除存储桶:使用 Amazon S3 控制台

Amazon S3 控制台支持删除存储桶 (不论存储桶是否为空)。有关使用 Amazon S3 控制台删除存储桶的信息,请参阅如何删除 S3 存储桶? (在 Amazon Simple Storage Service 控制台用户指南 中)。

删除存储桶:使用 AWS CLI

仅在包含对象的存储桶未启用版本控制时可使用 AWS CLI 删除该存储桶。如果您的存储桶未启用版本控制,则可将 rb(删除存储桶) AWS CLI 命令与 --force 参数结合使用来删除非空存储桶。此命令将先删除所有对象,然后再删除存储桶。

$ aws s3 rb s3://bucket-name --force

有关更多信息,请参阅 AWS Command Line Interface 用户指南中的通过 AWS 命令行界面使用高级别 S3 命令

要删除未启用版本控制的非空存储桶,可使用以下选项:

  • 使用 AWS 开发工具包以编程方式删除存储桶。

  • 使用存储桶的生命周期配置删除所有对象,然后使用 Amazon S3 控制台删除空存储桶。

删除存储桶:使用生命周期配置

您可以配置存储桶的生命周期以使对象过期,Amazon S3 随后将删除过期对象。您可以添加生命周期配置规则,以使所有或部分带特定键名称前缀的对象过期。例如,要删除存储桶中的所有对象,您可以将生命周期规则设置为使对象在创建一天后过期。

如果您的存储桶已启用版本控制,则也配置规则来使非当前对象过期。

在 Amazon S3 删除存储桶中的所有对象之后,您可以删除存储桶或保留存储桶。

重要

如果您只想清空而非删除存储桶,请确保删除为清空存储桶而添加的生命周期配置规则,以使在存储桶中创建的任何新对象将保留在存储桶中。

有关更多信息,请参阅 对象生命周期管理配置对象过期

删除存储桶:使用 AWS 开发工具包

可以使用 AWS 开发工具包删除存储桶。以下部分提供了有关如何使用适用于 Java 和 .NET 的 AWS 开发工具包删除存储桶的示例。首先,该代码将删除存储桶中的对象,然后删除存储桶。有关其他 AWS 开发工具包的信息,请参阅用于 Amazon Web Services 的工具

使用AWS SDK for Java删除存储桶

以下 Java 示例删除包含对象的存储桶。该示例将删除所有对象,然后删除存储桶。该示例适用于已启用版本控制或未启用版本控制的存储桶。

注意

对于未启用版本控制的存储桶,您可以直接删除所有对象,然后删除存储桶。对于启用了版本控制的存储桶,您必须先删除所有对象版本,然后再删除存储桶。

有关创建和测试有效示例的说明,请参阅测试 Amazon S3 Java 代码示例

import java.util.Iterator; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.services.s3.model.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; public class DeleteBucket { public static void main(String[] args) { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Delete all objects from the bucket. This is sufficient // for unversioned buckets. For versioned buckets, when you attempt to delete objects, Amazon S3 inserts // delete markers for all objects, but doesn't delete the object versions. // To delete objects from versioned buckets, delete all of the object versions before deleting // the bucket (see below for an example). ObjectListing objectListing = s3Client.listObjects(bucketName); while (true) { Iterator<S3ObjectSummary> objIter = objectListing.getObjectSummaries().iterator(); while (objIter.hasNext()) { s3Client.deleteObject(bucketName, objIter.next().getKey()); } // If the bucket contains many objects, the listObjects() call // might not return all of the objects in the first listing. Check to // see whether the listing was truncated. If so, retrieve the next page of objects // and delete them. if (objectListing.isTruncated()) { objectListing = s3Client.listNextBatchOfObjects(objectListing); } else { break; } } // Delete all object versions (required for versioned buckets). VersionListing versionList = s3Client.listVersions(new ListVersionsRequest().withBucketName(bucketName)); while (true) { Iterator<S3VersionSummary> versionIter = versionList.getVersionSummaries().iterator(); while (versionIter.hasNext()) { S3VersionSummary vs = versionIter.next(); s3Client.deleteVersion(bucketName, vs.getKey(), vs.getVersionId()); } if (versionList.isTruncated()) { versionList = s3Client.listNextBatchOfVersions(versionList); } else { break; } } // After all objects and object versions are deleted, delete the bucket. s3Client.deleteBucket(bucketName); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client couldn't // parse the response from Amazon S3. e.printStackTrace(); } } }

清空存储桶

您可以使用 AWS 开发工具包以编程方式清空存储桶的内容 (即,删除所有内容但保留存储桶)。您还可以指定存储桶的生命周期配置以使对象过期,以便 Amazon S3 能删除这些对象。还提供了其他选项,例如使用 Amazon S3 控制台和 AWS CLI,但此方法受到有关存储桶中的对象数和存储桶的版本控制状态的限制。

清空存储桶:使用 Amazon S3 控制台

有关使用 Amazon S3 控制台清空存储桶的信息,请参阅如何清空 S3 存储桶? (在 Amazon Simple Storage Service 控制台用户指南 中)。

清空存储桶:使用 AWS CLI

仅在存储桶未启用版本控制时可使用 AWS CLI 清空存储桶。如果您的存储桶未启用版本控制,您可以将 rm(删除) AWS CLI 命令与 --recursive 参数结合使用来清空存储桶 (或删除部分带特定键名称前缀的对象)。

以下 rm 命令将删除带键名称前缀 doc 的对象,例如,doc/doc1doc/doc2

$ aws s3 rm s3://bucket-name/doc --recursive

使用以下命令删除所有对象,而无需指定前缀。

$ aws s3 rm s3://bucket-name --recursive

有关更多信息,请参阅 AWS Command Line Interface 用户指南中的通过 AWS 命令行界面使用高级别 S3 命令

注意

您无法删除已启用版本控制的存储桶中的对象。当您删除一个对象时 (此命令将执行的操作),Amazon S3 将添加一个删除标记。有关版本控制的更多信息,请参阅使用版本控制

要清空已启用版本控制的存储桶,您可以使用以下选项:

  • 使用 AWS 开发工具包以编程方式删除存储桶。

  • 使用存储桶的生命周期配置请求 Amazon S3 删除对象。

  • 使用 Amazon S3 控制台(请参阅如何清空 S3 存储桶?(在 Amazon Simple Storage Service 控制台用户指南 中))。

清空存储桶:使用生命周期配置

您可以配置存储桶的生命周期,以使对象过期,并请求 Amazon S3 删除过期的对象。您可以添加生命周期配置规则,以使所有或部分带特定键名称前缀的对象过期。例如,要删除存储桶中的所有对象,您可以将生命周期规则设置为使对象在创建一天后过期。

如果您的存储桶已启用版本控制,则也配置规则来使非当前对象过期。

警告

在您的对象过期后,Amazon S3 将删除过期的对象。如果您只想清空而非删除存储桶,请确保删除为清空存储桶而添加的生命周期配置规则,以使在存储桶中创建的任何新对象将保留在存储桶中。

有关更多信息,请参阅 对象生命周期管理配置对象过期

清空存储桶:使用 AWS 开发工具包

您可以使用 AWS 开发工具包清空存储桶或删除部分带特定键名称前缀的对象。

有关如何使用AWS SDK for Java清空存储桶的示例,请参阅使用AWS SDK for Java删除存储桶。该代码将删除所有对象 (不论存储桶是否启用了版本控制),然后删除存储桶。要只清空存储桶,请确保删除用来删除存储桶的语句。

有关使用其他 AWS 开发工具包的更多信息,请参阅用于 Amazon Web Services 的工具