

# 汎用バケットを空にする
<a name="empty-bucket"></a>

汎用バケットの内容は、Amazon S3 コンソール、AWS SDK、または AWS Command Line Interface (AWS CLI) を使用して空にすることができます。汎用バケットを空にすると、すべてのオブジェクトが削除されますが、バケットは保持されます。バケットを空にすると、元に戻すことはできません。バケットを空にするアクションの実行中にバケットに追加されたオブジェクトは、削除される場合があります。バケット自体を削除する前に、バケット内のすべてのオブジェクト (すべてのオブジェクトバージョンと削除マーカーを含む) を削除する必要があります。

S3 バージョニングが有効または一時停止になっている汎用バケットを空にすると、バケット内のすべてのオブジェクトのすべてのバージョンが削除されます。詳細については、「[バージョニングが有効なバケットでのオブジェクトの操作](manage-objects-versioned-bucket.md)」を参照してください。

バケットを空にする場合は、すべての未完了のマルチパートアップロードも削除することをお勧めします。スループットを向上させ、ネットワーク問題からより迅速に復旧するため、マルチパートアップロードを使用して超大型のオブジェクト (最大 50 TB) を複数のパートから成るセットとしてアップロードすることができます。マルチパートアップロードのプロセスが完了しなかった場合、未完了のなパートが使用不可能な状態でバケットに残ります。これらの未完了のパートには、アップロードプロセスが完了するか、未完了の部分が削除されるまで、ストレージコストが発生します。詳細については、「[Amazon S3 でのマルチパートアップロードを使用したオブジェクトのアップロードとコピー](mpuoverview.md)」を参照してください。

ベストプラクティスとして、ライフサイクルルールを設定して、特定の日数を過ぎたオブジェクトや未完了のマルチパートアップロードを期限切れにすることをお勧めします。未完了のマルチパートアップロードを期限切れにするライフサイクルルールを作成する場合は、7 日間から始めることをお勧めします。詳細については、「[バケットに S3 ライフサイクル設定を設定する](how-to-set-lifecycle-configuration-intro.md)」を参照してください。

 ライフサイクルの有効期限は非同期プロセスであるため、バケットが空になるまでルールの実行に数日かかる場合があります。Amazon S3 が初めてルールを実行すると、有効期限の対象となるすべてのオブジェクトに削除対象のマークが付けられます。削除対象としてマークされたオブジェクトについては、請求が発生しなくなります。詳細については、「[ライフサイクル設定ルールを使用して Amazon S3 バケットを空にするにはどうすればよいですか?](https://repost.aws/knowledge-center/s3-empty-bucket-lifecycle-rule)」を参照してください。

## S3 コンソールの使用
<a name="empty-bucket-console"></a>

Amazon S3 コンソールを使用して汎用バケットを空にできます。バケット内のすべてのオブジェクトが削除され、バケット自体は削除されません。

**S3 バケットを空にする**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、空にするバケットの名前の横にあるバケットアイコンを選択し、**[空にする]** を選択します。

1. [**バケットを空にする**] ページで、テキストフィールドにバケット名を入力することでバケットを空にすることを確定し、[**Empty (空にする)**] を選択します。

1. [**バケットを空にする: ステータス**] ページで、バケットを空にするプロセスの進行状況をモニタリングします。

## AWS CLI の使用
<a name="empty-bucket-awscli"></a>

AWS CLI を使用して汎用バケットを空にできるのは、バケットのバージョニングが有効になっていない場合のみです。バージョニングが有効化されていない場合は、AWS CLI コマンドの `rm` (削除) と `--recursive` パラメータを使って、バケットを空にすることができます (または、特定のキーネームプレフィックスを持つオブジェクトのサブセットを削除できます)。

次の `rm` コマンドは、たとえば `doc` や `doc/doc1` といった、キーネームプレフィックス `doc/doc2` を持つオブジェクトを削除します。

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

プレフィックスを指定せずにすべてのオブジェクトを削除するには、次のコマンドを使用します。

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

詳細については、*AWS Command Line Interface ユーザーガイド*の「[AWS CLI でのハイレベルな S3 コマンドの使用](https://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html)」を参照してください。

**注記**  
バージョニングが有効化されたバケットから、オブジェクトを削除することはできません。Amazon S3 は、オブジェクトが削除される際に、このコマンドの目的である削除マーカーを追加します。S3 バケットのバージョニングの詳細については、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

## AWS SDKs の使用
<a name="empty-bucket-awssdks"></a>

AWS SDK を使用して、汎用バケットを空にしたり、特定のキー名のプレフィックスを持つオブジェクトのサブセットを削除したりできます。

AWS SDK for Java を使ってバケットを空にする方法の例については、「[汎用バケットの削除](delete-bucket.md)」を参照してください。このコードは、バケットのバージョニングが有効化されてるか否かにかかわらず、すべてのオブジェクトを削除します。それによって、このバケットは削除されます。単にバケットを空にしたいときは、バケットを削除するステートメントが解除されていることを確認します。

その他の AWS SDK の使用方法についての詳細は、「[アマゾン ウェブ サービスのツール](https://aws.amazon.com/tools/)」を参照してください。

## ライフサイクル設定の使用
<a name="empty-bucket-lifecycle"></a>

大きな汎用バケットを空にするには、S3 ライフサイクル設定ルールを使用することをお勧めします。ライフサイクルの有効期限は非同期プロセスであるため、バケットが空になるまでのルールの実行には数日かかる場合があります。Amazon S3 が初めてルールを実行すると、有効期限の対象となるすべてのオブジェクトに削除対象のマークが付けられます。削除対象としてマークされたオブジェクトについては、請求が発生しなくなります。詳細については、「[ライフサイクル設定ルールを使用して Amazon S3 バケットを空にするにはどうすればよいですか?](https://repost.aws/knowledge-center/s3-empty-bucket-lifecycle-rule)」を参照してください。

ライフサイクル設定を使用してバケットを空にする場合、設定には、[最新バージョン、最新でないバージョン](https://docs.aws.amazon.com/AmazonS3/latest/userguide/versioning-workflows.html)、[削除マーカー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html)、および[不完全なマルチパートアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)が含まれている必要があります。

すべてのオブジェクト、または特定のキーネームプレフィックスが付いたオブジェクトのサブセットの期限が終了するようにライフサイクルの設定ルールを追加できます。たとえば、バケット内のすべてのオブジェクトを削除するには、作成後 1 日でオブジェクトが期限切れするようにライフサイクルのルールを設定できます。

Amazon S3 は、バケットライフサイクルルールがサポートしています。このルールを使用すると、開始後指定された日数内に完了しないマルチパートアップロードを停止できます。ストレージコストを最小限に抑えるように、このライフサイクルルールを設定することをお勧めします。詳細については、「[不完全なマルチパートアップロードを削除するためのバケットライフサイクル設定の設定](mpu-abort-incomplete-mpu-lifecycle-config.md)」を参照してください。

ライフサイクル設定を使用してバケットを空にする方法の詳細については、[バケットに S3 ライフサイクル設定を設定する](how-to-set-lifecycle-configuration-intro.md) および [オブジェクトの有効期限](lifecycle-expire-general-considerations.md) を参照してください。

## AWS CloudTrail が設定された汎用バケットを空にする
<a name="empty-bucket-cloudtrail"></a>

AWS CloudTrail は、Amazon S3 汎用バケット内のオブジェクトレベルのデータイベント (オブジェクトの削除など) を追跡します。CloudTrail イベントのログ記録先として汎用バケットを使用している場合、同じバケットからオブジェクトを削除してバケットを空にするときに新しいオブジェクトが作成される可能性があります。これを防ぐには、AWS CloudTrail 証跡を中止します。CloudTrail 証跡がイベントをログに記録しないようにする方法の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[証跡のログ記録をオフにする](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-delete-trails-console.html)」を参照してください。

CloudTrail 証跡がバケットに追加されないようにするもう 1 つの方法は、バケットポリシーに `s3:PutObject` ステートメントを追加することです。後で新しいオブジェクトをバケットに保存する場合は、この deny `s3:PutObject` ステートメントを削除する必要があります。詳細については、「[オブジェクト操作](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects)」および「*IAM ユーザーガイド*」の「[IAM JSON ポリシー要素: 効果](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html)」を参照してください。