刪除儲存貯體 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

刪除儲存貯體

您可以刪除空的 Amazon S3 儲存貯體。刪除儲存貯體前,請考量下列事項:

  • 儲存貯體名稱是唯一的。如果您刪除值區,則其他使用 AWS 者可以使用該名稱。

  • 如果儲存貯體託管靜態網站,並且您依照「教學課程:使用向 Route 53 註冊的自訂網域設定靜態網站」中所述建立並設定 Amazon 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. Delete bucket (刪除儲存貯體) 頁面上,在文字欄位中輸入儲存貯體名稱以確認您要刪除該儲存貯體,然後選擇 Delete bucket (刪除儲存貯體)。

    注意

    如果儲存貯體包含任何物件,請在刪除之前清空儲存貯體,方法是選取 This bucket is not empty (此儲存貯體不是空的) 錯誤警示中的清空儲存貯體組態連結,並遵循 Empty bucket (清空儲存貯體) 頁面上的指示。然後返回 Delete bucket (刪除儲存貯體) 頁面並刪除儲存貯體。

  4. 若要確認您是否已刪除儲存貯體,請打開 Buckets (儲存貯體) 列表,然後輸入您已刪除的儲存貯體名稱。如果找不到儲存貯體,就表示已成功刪除。

下列範例說明如何使用 AWS SDK for Java 刪除值區。首先,此程式碼會刪除儲存貯體中的物件,然後它會刪除儲存貯體。如需其他 AWS SDK 的相關資訊,請參閱適用於 Amazon Web Services 的工具

Java

下列 Java 範例示範刪除含有物件的儲存貯體。此範例示範刪除所有物件後,也會刪除儲存貯體。此範例也適用於已啟用版本控制或未啟用版本控制的儲存貯體。

注意

對於未啟用版本控制的儲存貯體,您可以直接刪除所有物件,然後刪除儲存貯體。對於已啟用版本控制的儲存貯體,您一定需先刪除所有物件版本,然後才能刪除儲存貯體。

如需建立及測試可行範例的說明,請參閱 測試 Amazon S3 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 (remove bucket) AWS CLI 指令搭配--force參數來刪除值區及其中的所有物件。此命令會先刪除所有物件,再刪除儲存貯體。

如果啟用了版本控制,則不會在此過程中刪除版本控制物件,這將導致儲存貯體刪除失敗,因為儲存貯體不會為空。如需刪除使用版本控制物件的資訊,請參閱刪除物件版本

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

如需詳細資訊,請參閱使用 AWS Command Line Interface 者指南 AWS Command Line Interface中的搭配使用高階 S3 命令