删除存储桶 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

删除存储桶

您可以删除空的 Amazon S3 存储桶。在删除存储桶之前,请注意以下事项:

  • 存储桶名称是唯一的。如果删除存储桶,则另一个 AWS 用户可以使用该名称。

  • 如果存储桶托管静态网站,并且您如 使用注册到 Route 53 的自定义域配置静态网站 中所述创建并配置了 Amazon Route 53 托管区域,则必须清理与该存储桶相关的 Route 53 托管区域设置。有关更多信息,请参阅步骤 2:删除 Route 53 托管区域

  • 如果该存储桶收到来自 Elastic Load Balancing (ELB) 的日志数据:建议先停止将 ELB 日志传输到该存储桶,然后再删除该存储桶。删除该存储桶后,如果其他用户创建使用相同名称的存储桶,则日志数据可能会传输到此同名存储桶。有关 ELB 访问日志的信息,请参阅 Classic Load Balancer 用户指南中的访问日志Application Load Balancer 用户指南中的访问日志

重要

存储桶名称是唯一的。如果删除存储桶,则另一个 AWS 用户可以使用该名称。如果您希望继续使用相同的存储桶名称,请不要删除该存储桶。我们建议您,清空并保留存储桶。

删除 S3 存储桶

  1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,选择要删除的存储桶名称旁边的选项,然后选择页面顶部的 Delete (删除)

  3. Delete bucket (删除存储桶) 页面上,通过在文本字段中输入存储桶名称来确认要删除存储桶,然后选择 Delete bucket (删除存储桶)

    注意

    如果存储桶包含任何对象,请在删除存储桶之前清空存储桶,具体操作如下:在 This bucket is not empty (此存储桶不为空) 错误提醒中选择 empty bucket configuration (清空存储桶配置) 链接,然后按照 Empty bucket (清空存储桶) 页面上的说明操作。然后,返回到 Delete bucket (删除存储桶) 页面并删除存储桶。

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

Java

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

注意

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

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

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.util.Iterator; public class DeleteBucket2 { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_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 CLI 删除包含对象的存储桶。当您删除一个包含对象的存储桶时,该存储桶中的所有对象都将被永久删除,包括已转换为 S3 Glacier 存储类的对象。

如果存储桶未启用版本控制,则可将 rb(删除存储桶)AWS CLI 命令和 --force 参数结合使用来删除存储桶及其中的所有对象。此命令将先删除所有对象,然后再删除存储桶。

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

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