Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

删除或清空存储桶

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

删除存储桶

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

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

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

删除存储桶:使用 AWS CLI

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

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

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

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

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

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

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

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

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

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

重要

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

有关更多信息,请参阅 对象生命周期管理使对象过期:一般注意事项

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

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

使用AWS SDK for Java删除存储桶

以下 Java 示例将删除一个非空存储桶。首先,该代码将删除所有对象,然后删除存储桶。该代码示例还适用于已启用版本控制的存储桶。

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

Copy
import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; 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; import java.util.Iterator; /** * Delete an Amazon S3 bucket. * * This code expects that you have AWS credentials set up per: * http://docs.amazonaws.cn/java-sdk/latest/developer-guide/setup-credentials.html * * ++ Warning ++ This code will actually delete the bucket that you specify, as * well as any objects within it! */ public class DeleteBucket { public static void main(String[] args) { final String USAGE = "\n" + "To run this example, supply the name of an S3 bucket\n" + "\n" + "Ex: DeleteBucket <bucketname>\n"; if (args.length < 1) { System.out.println(USAGE); System.exit(1); } String bucket_name = args[0]; System.out.println("Deleting S3 bucket: " + bucket_name); final AmazonS3 s3 = new AmazonS3Client(); try { System.out.println(" - removing objects from bucket"); ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }; System.out.println(" - removing versions from bucket"); VersionListing version_listing = s3.listVersions( new ListVersionsRequest().withBucketName(bucket_name)); while (true) { for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext();) { S3VersionSummary vs = (S3VersionSummary)iterator.next(); s3.deleteVersion( bucket_name, vs.getKey(), vs.getVersionId()); } if (version_listing.isTruncated()) { version_listing = s3.listNextBatchOfVersions( version_listing); } else { break; } } System.out.println(" OK, bucket ready to delete!"); s3.deleteBucket(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Done!"); } }

清空存储桶

您可以使用 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

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

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

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

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

注意

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

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

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

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

  • 使用 Amazon S3 控制台 (仅在您的存储桶包含的项目 (包括对象版本和删除标记) 数少于 100000 时,才能使用此选项)。

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

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

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

警告

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

有关更多信息,请参阅 对象生命周期管理使对象过期:一般注意事项

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

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

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

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