

# 删除通用存储桶
<a name="delete-bucket"></a>

您可以删除空的 Amazon S3 通用存储桶。有关清空通用存储桶的信息，请参阅[清空通用存储桶](empty-bucket.md)。

可以使用 Amazon S3 控制台、Amazon Command Line Interface（Amazon CLI）、Amazon SDK 或 Amazon S3 REST API 删除存储桶。

**重要**  
在删除通用存储桶之前，请注意以下事项：  
**如果删除了存储桶，Amazon 无法将其还原。**在删除存储桶之前，请确保您已备份或复制数据。
通用存储桶名称在全局命名空间中是唯一的。**如果您删除共享全局命名空间中的存储桶，请注意，另一个 Amazon Web Services 账户可以使用相同的通用存储桶名称来表示新存储桶，因此可能会收到针对已删除的存储桶的请求。**如果需要防止出现这种情况，或者如果您希望继续使用相同的存储桶名称，请不要删除该存储桶。我们建议您清空并保留存储桶，同时根据需要阻止任何存储桶请求。对于不再活跃使用的存储桶，我们建议清空存储桶中的所有对象，以最大限度地降低成本，同时保留存储桶本身。
我们建议在您的账户区域命名空间中创建存储桶，以确保只有您的账户才能拥有这些存储桶名称。有关更多信息，请参阅 [通用存储桶的命名空间](gpbucketnamespaces.md)。
删除通用存储桶时，可能不会立即移除存储桶。相反，Amazon S3 会将存储桶排队以等待删除。由于 Amazon S3 分布在各个 Amazon Web Services 区域中，因此删除过程需要一些时间，才能在整个系统中完全传播并实现一致性。
如果存储桶托管静态网站，并且您如 [教程：使用注册到 Route 53 的自定义域配置静态网站](website-hosting-custom-domain-walkthrough.md) 中所述创建并配置了 Amazon Route 53 托管区域，则必须清理与该存储桶相关的 Route 53 托管区域设置。有关更多信息，请参阅 [步骤 2：删除 Route 53 托管区域](getting-started-cleanup.md#getting-started-cleanup-route53)。
如果存储桶收到来自弹性负载均衡（ELB）的日志数据，建议您先停止将 ELB 日志传输到该存储桶，然后再删除该存储桶。删除该存储桶后，如果其他用户创建使用相同名称的存储桶，则日志数据可能会传输到此同名存储桶。有关 ELB 访问日志的信息，请参阅《User Guide for Classic Load Balancers》**中的 [Access logs for your Classic Load Balancer](https://docs.amazonaws.cn/elasticloadbalancing/latest/classic/access-log-collection.html) 和《User Guide for Application Load Balancers》**中的 [Access logs for your Application Load Balancer](https://docs.amazonaws.cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html)。

**问题排查**  
如果您无法删除 Amazon S3 通用存储桶，请考虑以下事项：
+ **确保存储桶为空**：仅当存储桶中没有任何对象时，才能删除存储桶。确保存储桶为空。有关清空存储桶的信息，请参阅[清空通用存储桶](empty-bucket.md)。
+ **确保没有附加任何接入点**：只有当存储桶在同一个账户中未附加任何 S3 接入点或多区域接入点时，您才能删除存储桶。在删除存储桶之前，请删除附加到该存储桶的任何同账户接入点。
+ **确保您拥有 `s3:DeleteBucket` 权限**：如果您无法删除存储桶，请与 IAM 管理员协作来确认您拥有 `s3:DeleteBucket` 权限。有关如何查看或更新 IAM 权限的信息，请参阅《IAM 用户指南》**中的[更改 IAM 用户的权限](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_users_change-permissions.html)。有关问题排查信息，请参阅[排查 Amazon S3 中的拒绝访问（403 Forbidden）错误](troubleshoot-403-errors.md)。
+ **检查 Amazon Organizations 服务控制策略（SCP）和资源控制策略（RCP）中的 `s3:DeleteBucket Deny` 语句**：SCP 和 RCP 可以拒绝对存储桶的删除权限。有关更多信息，请参阅《Amazon Organizations User Guide》**中的 [service control policies](https://docs.amazonaws.cn//organizations/latest/userguide/orgs_manage_policies_scps.html) 和 [resource control policies](https://docs.amazonaws.cn//organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **检查存储桶策略中的 `s3:DeleteBucket Deny` 语句**：如果您在 IAM 用户或角色策略中拥有 `s3:DeleteBucket` 权限，但无法删除存储桶，则存储桶策略可能对于 `s3:DeleteBucket` 包含 `Deny` 语句。默认情况下，由 Amazon Elastic Beanstalk 创建的存储桶具有包含此语句的策略。您必须先删除此语句或存储桶策略，然后才能删除存储桶。

**先决条件**  
您必须先清空通用存储桶，然后才能删除该存储桶。有关清空存储桶的信息，请参阅[清空通用存储桶](empty-bucket.md)。

## 使用 S3 控制台
<a name="delete-bucket-console"></a>

**删除 S3 存储桶**

1. 登录到 Amazon Web Services 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要删除的存储桶名称旁边的选项按钮，然后选择页面顶部的**删除**。

1. 在**删除存储桶**页面上，通过在文本字段中输入存储桶名称来确认要删除存储桶，然后选择**删除存储桶**。
**注意**  
如果存储桶包含任何对象，请在删除存储桶之前清空存储桶，具体操作如下：在**此存储桶不为空**错误提醒中选择**清空存储桶**按钮，然后按照**清空存储桶**页面上的说明操作。然后，返回到 **Delete bucket（删除存储桶）**页面并删除存储桶。

1. 要验证您是否已删除存储桶，请打开**通用存储桶**列表，并输入您删除的存储桶的名称。如果无法找到此存储桶，则表示删除成功。

## 使用适用于 Java 的 Amazon SDK
<a name="delete-empty-bucket"></a>

要使用适用于 Java 的 Amazon SDK 清空和删除通用存储桶，必须先删除通用存储桶中的所有对象，然后删除该存储桶。

有关其它语言的示例，请参阅《Amazon Simple Storage Service API Reference》**中的 [Use DeleteBucket with an Amazon SDK or CLI](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_DeleteBucket_section.html)。有关使用其它 Amazon SDK 的信息，请参阅[用于 Amazon Web Services 的工具](https://www.amazonaws.cn/tools/)。

------
#### [ Java ]

要使用适用于 Java 的 Amazon SDK 删除包含对象的存储桶，必须先删除所有对象，然后删除该存储桶。这种方法适用于启用版本控制或未启用版本控制的存储桶。

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

有关如何使用适用于 Java 的 Amazon SDK 删除存储桶的示例，请参阅《Amazon S3 API Reference》**中的 [Delete a bucket](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_DeleteBucket_section.html)。

------

## 使用 Amazon CLI
<a name="delete-bucket-awscli"></a>

如果包含对象的通用存储桶没有启用版本控制，则可以使用 Amazon CLI 删除该存储桶。当您删除一个包含对象的存储桶时，该存储桶中的所有对象都将被永久删除，包括已转换为 S3 Glacier Flexible Retrieval 存储类的对象。

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

如果启用了版本控制，则将 `rb` 命令与 `--force` 参数结合使用不会删除受版本控制的对象，因此存储桶删除失败，因为存储桶不为空。有关删除受版本控制的对象的更多信息，请参阅[删除对象版本](https://docs.amazonaws.cn/AmazonS3/latest/userguide/DeletingObjectVersions.html)。

要使用以下命令，请将 `amzn-s3-demo-bucket` 替换为您要删除的存储桶的名称：

```
$ aws s3 rb s3://amzn-s3-demo-bucket --force  
```

有关更多信息，请参阅《Amazon Command Line Interface 用户指南》**中的[将高级别 S3 命令与 Amazon Command Line Interface结合使用](https://docs.amazonaws.cn/cli/latest/userguide/using-s3-commands.html)。