メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 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 パラメーターを使用して空ではないバケットを取り除くことができます。 このコマンドは、すべてのオブジェクトを削除した後にバケットを削除します。

Copy
$ 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 .NET と Java を使ってバケットを削除する例を紹介します。 まず、このコードはバケットのオブジェクトを削除し、そしてバケットを削除します。 AWS SDKs の詳細については、「Tools for 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.aws.amazon.com/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 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 といったキーネームプレフィックスのオブジェクトを削除します。

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

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

Copy
$ 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 コンソールを使用する(この方法は、バケットにオブジェクトバージョンと削除マーカーの両方を含めて 100,000 未満のアイテム — がある場合に限り使用できます)。

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

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

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

警告

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

詳細については、「オブジェクトのライフサイクル管理」および「オブジェクトの失効: 一般的な考慮事項」を参照してください。

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

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

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

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