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

バケットの削除

空の Amazon S3 バケットを削除できます。バケットを削除する前に、以下の点を考慮します。

  • バケット名は一意です。バケットを削除すると、他の AWS ユーザーがその名前を使用できます。

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

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

トラブルシューティング

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

  • バケットが空であることを確認します — バケット内にオブジェクトがないバケットのみ削除できます。バケットが空であることを確認します。

  • アタッチされたアクセスポイントがないことを確認します – アタッチされたアクセスポイントがないバケットのみを削除することができます。バケットを削除する前に、バケットにアタッチされているアクセスポイントを削除します。

  • AWS Organizationsサービスコントロールポリシー (SCP) — サービスコントロールポリシーは、バケットの削除許可を拒否できます。SCP の詳細については、AWS Organizations ユーザーガイドの「サービスコントロールポリシー」を参照してください。

  • s3:DeleteBucket アクセス許可 – バケットを削除できない場合は、IAM 管理者と協力して、s3:DeleteBucket アクセス許可があることを確認してください。IAM アクセス許可を表示または更新する方法については、IAM ユーザーガイドの「IAM ユーザーの許可の変更」を参照してください。

  • s3:DeleteBucket 拒否ステートメント – IAM ポリシーに s3:DeleteBucket アクセス権限があり、バケットを削除できない場合は、バケットポリシーに s3:DeleteBucket に対する拒否ステートメントが含まれている場合があります。ElasticBeanstalk によって作成されたバケットは、デフォルトでこのステートメントを含むポリシーを有しています。バケットを削除する前に、このステートメントまたはバケットポリシーを削除する必要があります。

重要

バケット名は一意です。バケットを削除すると、他の AWS ユーザーがその名前を使用できます。同じバケット名を使い続ける場合は、バケットを削除しないでください。バケットを空にして、それを維持することをお勧めします。

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

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

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

    注記

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

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

次の例は、AWS SDK for Java を使ってバケットを削除する方法を示しています。まず、このコードはバケットのオブジェクトを削除し、そしてバケットを削除します。AWS SDK の詳細については、「アマゾン ウェブ サービスのツール」を参照してください。

Java

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

注記

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

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

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

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

バージョニングが有効になっている場合、バージョニングされたオブジェクトはこのプロセスで削除されません。これにより、バケットが空にならないため、バケットの削除が失敗します。バージョニングされたオブジェクトの削除については、「オブジェクトバージョンの削除」を参照してください。

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

詳細については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interface でのハイレベルな S3 コマンドの使用」を参照してください。