Löschen eines Buckets - Amazon Simple Storage Service

Löschen eines Buckets

Sie können einen leeren Amazon-S3-Bucket löschen. Berücksichtigen Sie Folgendes, bevor Sie einen Bucket löschen:

  • Bucket-Namen sind eindeutig. Wenn Sie einen Bucket löschen, kann ein anderer AWS-Benutzer den Namen verwenden.

  • Wenn der Bucket eine statische Website hostet und Sie eine gehostete Zone von Amazon Route 53, wie unter Konfigurieren einer statischen Website mithilfe einer benutzerdefinierten bei Route 53 registrierten Domäne beschrieben, erstellt und konfiguriert haben, müssen Sie die gehosteten Route 53-Zoneneinstellungen bereinigen, die sich auf den Bucket beziehen. Weitere Informationen finden Sie unter Schritt 2: Löschen der von Route 53 gehosteten Zone.

  • Wenn der Bucket Protokolldaten von Elastic Load Balancing (ELB) empfängt: Wir empfehlen, dass Sie die Übermittlung von ELB-Protokollen an den Bucket beenden, bevor Sie ihn löschen. Erstellt ein anderer Benutzer nach dem Löschen des Buckets einen Bucket mit demselben Namen, dann könnten Ihre Protokolldaten potenziell an diesen Bucket übermittelt werden. Informationen zu ELB-Zugriffsprotokollen finden Sie unter Zugriffsprotokollen im Benutzerhandbuch für Classic Load Balancers und Zugriffsprotokolle im Benutzerhandbuch für Application Load Balancers.

Fehlerbehebung

Wenn Sie einen Amazon-S3-Bucket nicht löschen können, sollten Sie Folgendes berücksichtigen:

  • Stellen Sie sicher, dass der Bucket leer ist – Sie können nur Buckets löschen, bei denen keine Objekte enthalten sind. Stellen Sie sicher, dass der Bucket leer ist.

  • s3:DeleteBucket-Berechtigungen – Wenn Sie einen Bucket nicht löschen können, bestätigen Sie mit Ihrem IAM-Administrator, dass Sie s3:DeleteBucket-Berechtigungen in Ihrer IAM-Benutzerrichtlinie haben.

  • s3:DeleteBucket-Deny-Anweisung – Wenn Sie s3:DeleteBucket-Berechtigungen in Ihrer IAM-Richtlinie haben und einen Bucket nicht löschen können, enthält die Bucket-Richtlinie möglicherweise eine Deny-Anweisung für s3:DeleteBucket. Buckets, die von ElasticBeanstalk erstellt wurden, haben standardmäßig eine Richtlinie, die diese Anweisung enthält. Bevor Sie den Bucket löschen können, müssen Sie diese Anweisung oder die Bucket-Richtlinie löschen.

Wichtig

Bucket-Namen sind eindeutig. Wenn Sie einen Bucket löschen, kann ein anderer AWS-Benutzer den Namen verwenden. Wenn Sie weiterhin denselben Bucket-Namen verwenden wollen, sollten Sie den Bucket nicht löschen. Wir empfehlen, den Bucket zu leeren und beizubehalten.

Einen S3-Bucket löschen

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie in der Liste Buckets die Option neben dem Namen des Buckets aus, den Sie löschen möchten, und wählen Sie dann oben auf der Seite Delete (Löschen) aus.

  3. Bestätigen Sie auf der Seite Delete bucket (Bucket löschen), dass Sie den Bucket löschen möchten. Geben Sie dazu den Bucket-Namen in das Textfeld ein und wählen Sie Delete bucket (Bucket löschen).

    Anmerkung

    Wenn der Bucket Objekte enthält, leeren Sie den Bucket, bevor Sie ihn löschen, indem Sie in der Fehlermeldung This bucket is not empty (Dieser Bucket ist nicht leer) den Link für eine leere Bucket-Konfiguration auswählen und die Anweisungen auf der Seite Empty bucket (Bucket leeren) befolgen. Kehren Sie dann zur Seite Delete bucket (Bucket löschen) zurück und löschen Sie den Bucket.

  4. Wenn Sie überprüfen möchten, ob Sie den Bucket gelöscht haben, öffnen Sie die Buckets-Liste und geben den Namen des Buckets ein, den Sie gelöscht haben. Wenn der Buckets nicht gefunden wird, war der Löschvorgang erfolgreich.

Das folgende Beispiel zeigt, wie Sie einen Bucket mit dem AWS-SDK für Java löschen. Zuerst löscht der Code Objekte im Bucket, und dann löscht er das Bucket. Weitere Informationen zu anderen AWS-SDKs finden Sie unter Tools für Amazon Web Services.

Java

Das folgende Java-Beispiel löscht einen Bucket mit Objekten. Zuerst löscht das Beispiel alle Objekte und dann den Bucket. Das Beispiel funktioniert für Buckets mit oder ohne aktiviertem Versioning.

Anmerkung

Bei Buckets ohne aktiviertes Versioning können Sie alle Objekte direkt löschen und danach den Bucket löschen. Bei Buckets mit aktiviertem Versioning müssen Sie zuerst alle Objektversionen löschen, bevor Sie den Bucket löschen.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

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(); } } }

Sie können einen Bucket löschen, der Objekte mit der AWS CLI enthält, wenn die Versioning nicht aktiviert ist. Wenn Sie einen Bucket löschen, der Objekte enthält, werden alle Objekte in dem Bucket dauerhaft gelöscht. Dazu gehören auch Objekte, die in die S3 Glacier-Speicherklasse übergegangen sind.

Wenn in Ihrem Bucket die Versioning nicht aktiviert ist, können Sie den AWS CLI-Befehl rb (remove bucket, Bucket entfernen) mit dem Parameter --force verwenden, um den Bucket und alle darin enthaltenen Objekte zu löschen. Dieser Befehl löscht zuerst alle Objekte und dann den Bucket.

Wenn das Versioning aktiviert ist, werden versionierte Objekte in diesem Prozess nicht gelöscht. Dadurch würde das Löschen des Buckets fehlschlagen, da der Bucket nicht leer wäre. Informationen zum Löschen versionierter Objekte finden Sie unter Löschen von Objektversionen.

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

Weitere Informationen finden Sie unter Using High-Level S3 Commands with the AWS Command Line Interface (Verwenden von hochrangigen S3-Befehlen mit der CLI) im AWS Command Line Interface-Benutzerhandbuch.