本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
刪除儲存貯體
您可以刪除空的 Amazon S3 儲存貯體。刪除儲存貯體前,請考量下列事項:
故障診斷
如果您無法刪除 Amazon S3 儲存貯體,請考慮下列事項:
-
確保儲存貯體為空 – 您只能刪除其中未包含任何物件的儲存貯體。確保儲存貯體為空。
-
確保未附加任何存取點 - 您只能刪除其未附加任何存取點的儲存貯體。刪除儲存貯體之前,請先刪除任何附加至儲存貯體的存取點。
-
AWS Organizations 服務控制策略 (SCPs) — 服務控制策略可以拒絕值區的刪除權限。如需相關資訊SCPs,請參閱 AWS Organizations 使用者指南。
-
s3:DeleteBucket 權限 — 如果您無法刪除儲存貯體,請與IAM管理員合作確認您擁有s3:DeleteBucket
權限。如需有關如何檢視或更新IAM權限的資訊,請參閱《IAM使用指南》中的〈變更使IAM用者的權限〉。
-
s3:DeleteBucket deny 陳述式 — 如果您在IAM政策中擁有s3:DeleteBucket
權限,且無法刪除儲存貯體,則儲存貯體政策可能會包含s3:DeleteBucket
. 依預設,由建立的值區 ElasticBeanstalk 具有包含此陳述式的原則。您必須先刪除此陳述式或儲存貯體政策,才能刪除儲存貯體。
儲存貯體名稱是唯一的。如果刪除值區,則另一個值區 AWS 用戶可以使用該名稱。若希望繼續使用相同的儲存貯體名稱,請勿刪除該儲存貯體。建議您清空儲存貯體,並保留它。
刪除 S3 儲存貯體
登入到 AWS Management Console 並打開 Amazon S3 控制台https://console.aws.amazon.com/s3/。
-
在 Buckets (儲存貯體) 清單中,選取要刪除之儲存貯體名稱旁的選項,然後選擇頁面頂端的 Delete (刪除)。
-
在 Delete bucket (刪除儲存貯體) 頁面上,在文字欄位中輸入儲存貯體名稱以確認您要刪除該儲存貯體,然後選擇 Delete bucket (刪除儲存貯體)。
如果儲存貯體包含任何物件,請在刪除之前清空儲存貯體,方法是選取 This bucket is not empty (此儲存貯體不是空的) 錯誤警示中的清空儲存貯體組態連結,並遵循 Empty bucket (清空儲存貯體) 頁面上的指示。然後返回 Delete bucket (刪除儲存貯體) 頁面並刪除儲存貯體。
-
若要確認您是否已刪除儲存貯體,請打開 Buckets (儲存貯體) 列表,然後輸入您已刪除的儲存貯體名稱。如果找不到儲存貯體,就表示已成功刪除。
下列範例說明如何使用 AWS SDK對於爪哇。首先,此程式碼會刪除儲存貯體中的物件,然後它會刪除儲存貯體。有關其他的信息 AWS
SDKs,請參閱 Amazon Web Services 的工具。
- 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
如需詳細資訊,請參閱搭配使用高階 S3 命令 AWS Command Line Interface在 AWS Command Line Interface 使用者指南。