Löschen oder Leeren von Buckets - Amazon Simple Storage Service

Dieses Handbuch wird nicht mehr aktualisiert. Aktuelle Informationen und Anweisungen finden Sie im neuen Amazon S3-Benutzerhandbuch.

Löschen oder Leeren von Buckets

In einigen Situationen müssen Sie vielleicht einen leeren Bucket mit Objekten löschen oder leeren. In diesem Abschnitt erklären wir, wie Sie Objekte in einem nicht-versionsgesteuerten Bucket und wie Sie Objektversionen und Löschmarkierungen in einem Bucket mit aktiviertem Versioning löschen. Weitere Informationen über die Versionssteuerung finden Sie unter Verwenden von Versioning. In einigen Situationen kann es sinnvoll sein, einen Bucket zu leeren, statt ihn zu löschen. Dieser Abschnitt erklärt verschiedene Optionen, die Sie nutzen können, um einen leeren Bucket mit Objekten zu löschen oder zu leeren.

Löschen eines Buckets

Sie können einen Bucket und seinen Inhalt programmgesteuert mithilfe der AWS-SDKs löschen. Sie können auch eine Lebenszykluskonfiguration für einen Bucket verwenden, um seinen Inhalt zu leeren und ihn dann zu löschen. Es gibt noch weitere Optionen, wie beispielsweise die Verwendung der Amazon S3-Konsole und der AWS-CLI, aber für diese Methode gelten abhängig von der Anzahl der Objekte in Ihrem Bucket und dem Versionssteuerungs-Status des Buckets Einschränkungen.

Löschen eines Buckets: Verwenden der Amazon S3-Konsole

Die Amazon S3-Konsole unterstützt das Löschen eines Buckets, der leer sein kann, aber nicht muss. Informationen zur Verwendung der Amazon S3-Konsole zum Löschen eines Buckets finden Sie unter Wie lösche ich einen S3-Bucket? im Benutzerhandbuch für die Amazon Simple Storage Service Console.

Löschen eines Buckets: Verwenden der AWS CLI

Einen Bucket, der Objekte enthält, können Sie mit der AWS CLI nur dann löschen, wenn für den Bucket das Versioning nicht aktiviert ist. Wenn für Ihren Bucket das Versioning nicht aktiviert ist, können Sie den AWS CLI-Befehl rb (remove bucket) mit dem Parameter --force verwenden, um einen nicht leeren Bucket zu löschen. Dieser Befehl löscht zuerst alle Objekte und dann den Bucket.

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

Weitere Informationen finden Sie unter Verwendung von S3-High-Level-befehlen mit der AWS-Befehlszeilenschnittstelle im Benutzerhandbuch zur AWS-Befehlszeilenschnittstelle.

Löschen eines Buckets: Verwenden der AWS SDKs

Sie können einen Bucket mit den AWS SDKs löschen. Die folgenden Abschnitte zeigen Beispiele für das Löschen eines Buckets mit AWS SDK for Java und .NET. Zuerst löscht der Code Objekte im Bucket, und dann löscht er das Bucket. Weitere Informationen über andere AWS-SDKs finden Sie unter Tools für Amazon Web Services.

Löschen eines Buckets: Verwenden der AWS SDK for 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(); } } }

Leeren eines Buckets

Sie können einen Bucket und seinen Inhalt programmgesteuert unter Verwendung des AWS SDK leeren (d. h. Sie löschen den gesamten Inhalt, behalten aber den Bucket bei). Sie können auch eine Lebenszykluskonfiguration für einen Bucket angeben, sodass Objekte ablaufen, damit Amazon S3 sie löschen kann. Es gibt noch weitere Optionen, wie beispielsweise die Verwendung der Amazon S3-Konsole und der AWS CLI, aber diese Methode hat abhängig von der Anzahl der Objekte in Ihrem Bucket und dem Versioning-Status des Buckets Einschränkungen.

Leeren eines Buckets: Verwenden der Amazon S3-Konsole

Informationen zur Verwendung der Amazon S3-Konsole zum Leeren eines Buckets finden Sie unter Wie leere ich einen S3-Bucket? im Benutzerhandbuch zur Amazon Simple Storage Service Console

Leeren eines Buckets: Verwenden der AWS CLI

Einen Bucket nur dann mit der AWS CLI leeren, wenn für den Bucket das Versioning nicht aktiviert ist. Wenn für Ihren Bucket das Versioning nicht aktiviert ist, können Sie den AWS CLI-Befehl rm (remove bucket) mit dem Parameter --recursive verwenden, um einen Bucket zu leeren (oder eine Untermenge von Objekten mit einem spezifischen Schlüsselnamenpräfix zu entfernen).

Der folgende rm-Befehl entfernt Objekte mit dem Schlüsselnamenpräfix doc, z. B. doc/doc1 und doc/doc2.

$ aws s3 rm s3://bucket-name/doc --recursive

Verwenden Sie den folgenden Befehl, um alle Objekte zu entfernen, ohne ein Präfix anzugeben.

$ aws s3 rm s3://bucket-name --recursive

Weitere Informationen finden Sie unter Verwendung von S3-High-Level-befehlen mit der AWS-Befehlszeilenschnittstelle im Benutzerhandbuch zur AWS-Befehlszeilenschnittstelle.

Anmerkung

Aus einem Bucket mit aktiviertem Versioning können Sie keine Objekte entfernen. Amazon S3 fügt eine Löschmarkierung hinzu, wenn Sie ein Objekt löschen. Diess macht dieser Befehl. Weitere Informationen über die Versionssteuerung finden Sie unter Verwenden von Versioning.

Leeren eines Buckets: Verwenden der Lebenszykluskonfiguration

Sie können den Lebenszyklus für Ihren Bucket konfigurieren, sodass Objekte ablaufen. Amazon S3 kann dann aufgefordert werden, abgelaufene Objekte zu löschen. Sie können Lebenszykluskonfigurationsregeln hinzufügen, sodass alle Objekte oder eine Untermenge davon mit einem spezifischen Schlüsselnamenpräfix ablaufen. Sie können z. B. eine Lebenszyklusregel so festlegen, dass Objekte einen Tag nach dem Erstellungsdatum ablaufen, um alle Objekte in einem Bucket zu entfernen.

Wenn für Ihren Bucket das Versioning aktiviert ist, können Sie die Regel auch so konfigurieren, dass nicht aktuelle Objekte ablaufen. Wenn Sie den Inhalt eines Versioning-fähigen Buckets vollständig leeren möchten, müssen Sie eine Ablaufrichtlinie für aktuelle und nicht aktuelle Objekte im Bucket erstellen.

Weitere Informationen finden Sie unter Verwaltung des Objektlebenszyklus und Grundlegendes zum Objektablauf.

Leeren eines Buckets: Verwenden der AWS SDKs

Sie können die AWS SDKs verwenden, um einen Bucket zu leeren oder eine Untermenge von Objekten mit einem spezifischen Schlüsselnamenpräfix zu entfernen.

Ein Beispiel für das Leeren eines Buckets mit dem AWS SDK for Java finden Sie unter Löschen eines Buckets: Verwenden der AWS SDK for Java. Der Code löscht alle Objekte, unabhängig davon, ob für den Bucket das Versioning aktiviert ist. Anschließend löscht er den Bucket. Um den Bucket nur zu leeren, stellen Sie sicher, dass Sie die Anweisung entfernen, die den Bucket löscht.

Weitere Informationen über die Verwendung anderer AWS-SDKs finden Sie unter Tools für Amazon Web Services.