メニュー
Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

バケットを空にする、または削除する

空のバケットは簡単に削除できます。ただし、オブジェクトが含まれているバケットを空にする場合や削除する場合もあります。このセクションでは、バージョンが指定されていないバケット内のオブジェクトを削除する方法と、バージョニングが有効なバケット内のオブジェクトバージョンと削除マーカーを削除する方法について説明します。バージョニングの詳細については、「バージョニングの使用」を参照してください。状況によっては、バケットを削除せずに空にすることがあります。このセクションでは、オブジェクトがあるバケットを空にしたり削除するための複数の方法を説明します。

バケットの削除

AWS SDK を使用して、バケットとそのコンテンツをプログラムで削除できます。また、バケットのライフサイクル設定を利用して、コンテンツを空にしてからバケットを削除できます。他に Amazon S3 コンソールや AWS CLI などを使用する方法もあります。ただし、これらの方法ではバケットのオブジェクト数やバージョニング状態に制限があります。

Amazon S3 コンソールを使用してバケットを削除する

Amazon S3 コンソールは、空のバケットおよび空ではないバケットの削除をサポートしています。Amazon S3 コンソールを使用してバケットを削除する方法については、「S3 バケットを削除する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

AWS CLI を使ってバケットを削除する

バケットのバージョニングが有効化されていない場合にのみ、AWS CLI を使ってコンテンツオブジェクトがあるバケットを削除できます。バケットのバージョニングが有効化されていない場合には、rb (remove bucket) AWS CLI command with --force パラメータを使用して空ではないバケットを取り除くことができます。このコマンドは、すべてのオブジェクトを削除した後にバケットを削除します。

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

詳細については、「AWS Command Line Interface ユーザーガイド」の「Using High-Level S3 Commands with the AWS Command Line Interface」を参照してください。

バージョニングが有効化されていなくて、空ではないバケットを削除するには、以下の方法があります。

  • AWS SDK を使用してプログラムでバケットを削除します。

  • すべてのオブジェクトをバケットのライフサイクル設定を使用して削除し、次に空のバケットを Amazon S3 コンソールで削除します。

ライフサイクル設定を使用してバケットを削除する

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

バケットのバージョニングが有効化されている場合には、現行ではないオブジェクトが期限切れするようにルールを設定できます。

Amazon S3 がバケット内のすべてのオブジェクトを削除したら、そのバケットを削除する、または維持することができます。

重要

バケットを削除せずに空にしたいだけの場合には、バケットを空にするようにと追加したライフサイクルの設定ルールを解除したことを確認してください。こうすると、バケットで作成されたすべての新しいオブジェクトがバケットに残ります。

詳細については、「オブジェクトのライフサイクル管理」および「オブジェクトの有効期限の設定」を参照してください。

AWS SDKs を使ってバケットを削除する

AWS SDKs を使用してバケットの削除ができます。以下のセクションでは、AWS SDK for Java と .NET を使ってバケットを削除する例を示します。まず、このコードはバケットのオブジェクトを削除し、そしてバケットを削除します。AWS SDKs の詳細については、「Tools for 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 SDK のプログラム機能を利用してバケット内のコンテンツを空にすることができます (つまり、バケットを削除せずに、すべてのコンテンツを削除)。バケットでライフサイクル設定によりオブジェクトが期限切れになるようにして、Amazon S3 がそのオブジェクトを削除する方法も使用できます。Amazon S3 コンソールおよび AWS CLI を使用するなどの方法もありますが、この方法ではバケット内のオブジェクト数やバケットのバージョニング状態による制限があります。

Amazon S3 コンソールを使用してバケットを空にする

Amazon S3 コンソールを使用してバケットを空にする方法については、「S3 バケットを空にする方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

AWS CLI を使用してバケットを空にする

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

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

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

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

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

詳細については、「AWS Command Line Interface ユーザーガイド」の「Using High-Level S3 Commands with the AWS Command Line Interface」を参照してください。

注記

バージョニングが有効化されたバケットからオブジェクトを削除することはできません。Amazon S3 は、オブジェクトを削除する際に、このコマンドの目的である削除マーカーを追加します。バージョニングの詳細については、「バージョニングの使用」を参照してください。

バージョニングが有効化されたバケットを空にするには、次の方法があります。

  • AWS SDK を使用してプログラムでバケットを削除します。

  • バケットのライフサイクル設定を使って Amazon S3 がオブジェクトを削除するようリクエストします。

  • Amazon S3 コンソールを使用します。「S3 バケットを空にする方法」(『Amazon Simple Storage Service コンソールユーザーガイド』) を参照してください。

ライフサイクル設定を使用してバケットを空にする

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

バケットのバージョニングが有効化されている場合には、現行ではないオブジェクトが期限切れするようにルールを設定できます。

警告

オブジェクトの有効期限が切れると、Amazon S3 は期限が切れたオブジェクトを削除します。バケットを削除せずに空にしたいだけの場合には、バケットを空にするようにと追加したライフサイクルの設定ルールを解除したことを確認してください。こうすると、バケットで作成されたすべての新しいオブジェクトがバケットに残ります。

詳細については、「オブジェクトのライフサイクル管理」および「オブジェクトの有効期限の設定」を参照してください。

AWS SDKs を使用してバケットを空にする

AWS SDKs を使用して、バケットを空にしたり、特定のキーネームプレフィックスがあるオブジェクトのサブセットを削除したりできます。

AWS SDK for Java を使ってバケットを空にする方法の例については、「AWS SDK for Java を使ってバケットを削除する」を参照してください。このコードは、バケットのバージョニング有効化の有無にかかわらず、すべてのオブジェクトを削除し、そしてバケットを削除します。バケットを空にするだけが目的の場合、バケットを削除するステートメントが解除されていることを確認してください。

その他の AWS SDKs の使用方法についての詳細は、「Tools for Amazon Web Services」を参照してください。