汎用バケットの削除 - Amazon Simple Storage Service

汎用バケットの削除

空の Amazon S3 汎用バケットを削除できます。汎用バケットを空にする方法については、「汎用バケットを空にする」を参照してください。

Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用してバケットを削除できます。

重要

汎用バケットを削除する前に、以下の点を考慮してください。

  • 汎用バケット名はグローバル名前空間内で一意です。バケットを削除した場合、別の AWS アカウントが新しいバケットに同じ汎用バケット名を使用できるため、削除したバケットへのリクエストを受け取る可能性があることに注意してください。これを防ぐ場合、または同じバケット名を使い続ける場合は、バケットを削除しないでください。バケットを空にして保持し、代わりに必要に応じてバケットリクエストをブロックすることをお勧めします。バケットがアクティブに使用されなくなった場合は、バケット自体を保持しながらコストを最小限に抑えるために、すべてのオブジェクトのバケットを空にすることをお勧めします。

  • 汎用バケットを削除しても、バケットがすぐに削除されない場合があります。代わりに、Amazon S3 はバケットを削除キューに入れます。Amazon S3 は AWS リージョン全体に分散されるため、削除プロセスが完全に伝達され、システム全体で一貫性を実現するには時間がかかります。

  • バケットが静的ウェブサイトをホストしていて、Amazon Route 53 ホストゾーンが チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定 の説明通りに作成され設定されている場合は、バケットに関連する Route 53 ホストゾーンの設定をクリーンアップする必要があります。詳細については、「ステップ 2: Route 53 ホストゾーンを削除する」を参照してください。

  • バケットに Elastic Load Balancing (ELB) からログデータを配信している場合は、バケットを削除する前に、バケットへの ELB ログの配信を停止することをお勧めします。バケットの削除後に、別のユーザーが同じ名前でバケットを作成した場合、そのバケットにログデータが配信される可能性があります。ELB アクセスログの詳細については、「Classic Load Balancer のユーザーガイド」の「Access logs for your Classic Load Balancer」、および「Application Load Balancer のユーザーガイド」の「Access logs for your Application Load Balancer」を参照してください。

トラブルシューティング

Amazon S3 汎用バケットを削除できない場合は、次の点を考慮してください。

  • バケットが空であることを確認する — バケット内にオブジェクトがないバケットのみ削除できます。バケットが空であることを確認します。バケットを空にする方法については、「汎用バケットを空にする」を参照してください。

  • アクセスポイントがアタッチされていないことを確認する – バケットを削除できるのは、同じアカウント内に S3 アクセスポイントまたはマルチリージョンアクセスポイントがアタッチされていない場合に限ります。バケットを削除する前に、バケットにアタッチされている同一アカウントのアクセスポイントをすべて削除します。

  • s3:DeleteBucket アクセス許可があることを確認する – バケットを削除できない場合は、IAM 管理者と協力して、s3:DeleteBucket アクセス許可があることを確認してください。IAM アクセス許可を表示または更新する方法については、IAM ユーザーガイドの「IAM ユーザーの許可の変更」を参照してください。トラブルシューティング情報については、「Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング」を参照してください。

  • AWS Organizations サービスコントロールポリシー (SCP) とリソースコントロールポリシー (RCP) で s3:DeleteBucket Deny ステートメントを確認する – SCP と RCP は、バケットに対する削除のアクセス許可を拒否できます。詳細については、「AWS Organizations ユーザーガイド」の「サービスコントロールポリシー」と「リソースコントロールポリシー」を参照してください。

  • バケットポリシーの s3:DeleteBucket Deny ステートメントを確認する – IAM ユーザーまたはロールのポリシーに s3:DeleteBucket アクセス許可があり、バケットを削除できない場合は、バケットポリシーに s3:DeleteBucket に対する Deny ステートメントが含まれている場合があります。AWS Elastic Beanstalk によって作成されたバケットは、デフォルトでこのステートメントを含むポリシーを持っています。バケットを削除する前に、このステートメントまたはバケットポリシーを削除する必要があります。

前提条件

汎用バケットを削除するには、事前にバケットを空にする必要があります。バケットを空にする方法については、「汎用バケットを空にする」を参照してください。

S3 バケットを削除するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

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

  3. バケットリストで、削除するバケットの名前の横にあるオプションボタンを選択してから、ページの上部にある [削除] を選択します。

  4. [バケットの削除] ページで、テキストフィールドにバケット名を入力することでバケットを削除することを確認し、[バケットを削除] を選択します。

    注記

    バケットにオブジェクトが含まれている場合は、[このバケットは空ではありません] というエラーアラートの [バケットを空にする] ボタンを選択し、[バケットを空にする] ページの指示に従って、バケットを空にしてから削除します。次に、[バケットを削除する] ページに戻り、バケットを削除します。

  5. バケットを削除したことを確認するには、[汎用バケット] リストを開き、削除したバケットの名前を入力します。バケットが見つからない場合、削除は成功しています。

次の例は、AWS SDK for Java を使用して汎用バケットを空にして削除する方法を示しています。このコードは、まず汎用バケット内のすべてのオブジェクトを削除し、次にバケットを削除します。

他の言語の例については、「Amazon Simple Storage Service API リファレンス」の「AWS SDK または CLI で DeleteBucket を使用する」を参照してください。その他の AWS SDK の使用方法については、「Tools for Amazon Web Services」を参照してください。

Java

次の Java の例では、オブジェクトが含まれているバケットを削除します。すべてのオブジェクトを削除した後で、バケットを削除します。この例は、バージョニングの有無を問わず、使用できます。

注記

バージョニングが有効になっていないバケットの場合、すべてのオブジェクトを直接削除し、その後でバケットを削除できます。バージョニングが有効なバケットの場合は、バケットを削除する前に、すべてのオブジェクトバージョンを削除する必要があります。

作業サンプルの作成およびテストの手順については、「AWS SDK for Java 2.x デベロッパーガイド」を参照してください。

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 Flexible Retrieval ストレージクラスに移行済みのオブジェクトを含む、そのバケット内にあるすべてのオブジェクトが完全に削除されます。

バケットのバージョニングが有効になっていない場合は、rb (バケット削除) の AWS CLI コマンドを --force パラメータと共に使用することで、バケットとその内部のオブジェクトのすべてを削除できます。このコマンドは、すべてのオブジェクトを削除した後にバケットを削除します。

バージョニングが有効になっている場合、--force パラメータと共に rb コマンドを使用しても、バージョニングされたオブジェクトは削除されず、バケットが空にならないため、バケットの削除は失敗します。バージョニングされたオブジェクトの削除については、「オブジェクトバージョンの削除」を参照してください。

次のコマンドを使用するには、amzn-s3-demo-bucket を削除するバケットの名前に置き換えます。

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

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