Verwalten von Löschmarkierungen - Amazon Simple Storage Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten von Löschmarkierungen

Konfigurieren des Lebenszyklus zum automatischen Bereinigen abgelaufener Löschmarkierungen

Eine abgelaufene Objektlöschmarkierung ist eine, bei der alle Objektversionen gelöscht werden und nur eine einzelne Löschmarkierung erhalten bleibt. Wenn die Lebenszyklus-Konfiguration so eingerichtet ist, dass aktuelle Versionen gelöscht werden, oder die ExpiredObjectDeleteMarker-Aktion explizit festgelegt ist, entfernt Amazon S3 die Löschmarkierung des abgelaufenen Objekts. Ein Beispiel finden Sie unter Beispiel 7: Löschen abgelaufener Löschmarkierungen für Objekte.

Entfernen von Löschmarkierungen, um eine ältere Version aktuell zu machen

Wenn Sie ein Objekt in einem für das Versioning geeignetes Bucket löschen, bleiben alle Versionen in dem Bucket und Amazon S3 erstellt eine Löschmarkierung für das Objekt. Um das Löschen des Objekts rückgängig zu machen, müssen Sie diese Löschmarkierung löschen. Weitere Informationen zum Versioning und zu Löschmarkierungen finden Sie unter Verwenden der Versioning in S3-Buckets.

Um eine Löschmarkierung dauerhaft zu löschen, müssen Sie Ihre Versions-ID in einer DeleteObject versionId-Anforderung angeben. Die folgende Abbildung zeigt, dass ein einfaches DeleteObject versionId eine Löschmarkierung nicht dauerhaft entfernt.

Abbildung, die das Löschen einer Löschmarke anhand ihrer Versions-ID zeigt.

Das Entfernen der Löschmarkierung bewirkt, dass eine einfache GET-Anforderung jetzt die aktuelle Versions-ID (121212) des Objekts abruft.

Anmerkung

Wenn Sie eine DeleteObject-Anforderung verwenden, bei der die aktuelle Version eine Löschmarkierung ist (ohne die Versions-ID der Löschmarkierung anzugeben), löscht Amazon S3 die Löschmarkierung nicht, sondern eine andere PUTs Löschmarkierung.

Um eine Löschmarkierung mit einer NULL-Versions-ID zu löschen, müssen Sie das NULL als Versions-ID in der DeleteObject-Anforderung übergeben. Die folgende Abbildung zeigt, wie eine einfache DeleteObject-Anfrage ohne Versions-ID, bei der die aktuelle Version eine Löschmarkierung ist, nichts entfernt, sondern stattdessen eine zusätzliche Löschmarkierung mit einer eindeutigen Versions-ID (7498372) hinzufügt.

Abbildung, die das Löschen einer Löschmarke mit einer NULL-Versions-ID zeigt.

Mit den folgenden Schritten können Sie gelöschte Objekte wiederherstellen, die keine Ordner aus Ihrem S3-Bucket sind, einschließlich der Objekte, die sich in diesen Ordnern befinden.

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

  2. Wählen Sie in der Liste Buckets den Namen des von Ihnen erstellten Buckets aus.

  3. Um eine Liste der Versionen der Objekte in dem Bucket anzuzeigen, wählen Sie den Schalter List versions (Versionen auflisten). Sie sehen die Löschmarkierungen für gelöschte Objekte.

  4. Um das Löschen eines Objekts rückgängig zu machen, müssen Sie die Löschmarkierung löschen. Markieren Sie das Kontrollkästchen neben der Löschmarkierung des Objekts, das wiederhergestellt werden soll, und wählen Sie dann Delete (Löschen).

  5. Bestätigen Sie den Löschvorgang auf der Seite Delete objects (Objekte löschen) .

    1. Geben Sie für Permanently delete objects? (Objekte dauerhaft löschen?) permanently delete ein.

    2. Wählen Sie Delete objects (Objekte löschen).

Anmerkung

Sie können die Amazon-S3-Konsole nicht verwenden, um das Löschen von Ordnern rückgängig zu machen. Sie müssen das AWS CLI oder SDK verwenden. Beispiele finden Sie unter How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket? (Wie kann ich ein Amazon-S3-Objekt wiederherstellen, das in einem Versioning-fähigen Bucket gelöscht wurde?) im AWS -Wissenszentrum

Eine Löschmarkierung dauerhaft entfernen
  1. Setzen Sie den Parameter versionId auf die ID der Version der Löschmarkierung, die Sie entfernen wollen.

  2. Senden Sie eine DELETE Object versionId-Anforderung.

Beispiel – Entfernen einer Löschmarkierung

Das folgende Beispiel entfernt die Löschmarkierung für photo.gif Version 4857693.

DELETE /photo.gif?versionId=4857693 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Wenn Sie eine Löschmarkierung löschen, nimmt Amazon S3 folgendes in die Antwort auf.

204 NoContent x-amz-version-id: versionID x-amz-delete-marker: true

Informationen zur Verwendung anderer AWS SDKs finden Sie im AWS Developer Center.

Python

Das folgende Python-Codebeispiel zeigt, wie Sie einen Löschmarker von einem Objekt entfernen und damit die neueste nicht-aktuelle Version der aktuellsten Version zur aktuellen Version des Objekts machen.

def revive_object(bucket, object_key): """ Revives a versioned object that was deleted by removing the object's active delete marker. A versioned object presents as deleted when its latest version is a delete marker. By removing the delete marker, we make the previous version the latest version and the object then presents as *not* deleted. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that contains the object. :param object_key: The object to revive. """ # Get the latest version for the object. response = s3.meta.client.list_object_versions( Bucket=bucket.name, Prefix=object_key, MaxKeys=1 ) if "DeleteMarkers" in response: latest_version = response["DeleteMarkers"][0] if latest_version["IsLatest"]: logger.info( "Object %s was indeed deleted on %s. Let's revive it.", object_key, latest_version["LastModified"], ) obj = bucket.Object(object_key) obj.Version(latest_version["VersionId"]).delete() logger.info( "Revived %s, active version is now %s with body '%s'", object_key, obj.version_id, obj.get()["Body"].read(), ) else: logger.warning( "Delete marker is not the latest version for %s!", object_key ) elif "Versions" in response: logger.warning("Got an active version for %s, nothing to do.", object_key) else: logger.error("Couldn't get any version info for %s.", object_key)