Zum Hauptinhalt springen

Versioning verwenden

Mit aktiviertem Versioning behält ein Bucket bei jedem Überschreiben oder Löschen die vorherigen Objektstände. So lassen sich versehentliche Änderungen und Löschungen rückgängig machen.

Funktionsweise

  • Jeder PUT erzeugt eine neue Version mit eigener VersionId; ältere Versionen bleiben erhalten.
  • Ein DELETE ohne VersionId löscht nichts physisch, sondern legt einen Delete-Marker als neueste "Version" ab – das Objekt erscheint gelöscht, ist aber wiederherstellbar.
  • Erst das Löschen einer konkreten Version (mit VersionId) entfernt Daten endgültig.
  • Jede Version belegt Speicher und wird berechnet.

Versioning kann pro Bucket aktiviert (Enabled) oder ausgesetzt (Suspended) werden – einmal aktiviert, lässt es sich nicht vollständig entfernen, nur aussetzen.

Versioning aktivieren

aws s3api put-bucket-versioning \
--bucket mein-bucket \
--versioning-configuration Status=Enabled \
--endpoint-url s3.internet1.de

Status prüfen:

aws s3api get-bucket-versioning --bucket mein-bucket \
--endpoint-url https://s3.internet1.de

Versionen anzeigen

aws s3api list-object-versions --bucket mein-bucket --prefix dokumente/ \
--endpoint-url https://s3.internet1.de

Die Ausgabe enthält Versions (alle Stände mit VersionId, IsLatest, LastModified) und DeleteMarkers.

Ältere Version wiederherstellen

Empfohlener Weg: die gewünschte Version auf sich selbst kopieren – sie wird dadurch zur neuesten Version, die Historie bleibt erhalten:

aws s3api copy-object \
--bucket mein-bucket \
--key dokumente/vertrag.pdf \
--copy-source "mein-bucket/dokumente/vertrag.pdf?versionId=ALTE_VERSION_ID" \
--endpoint-url https://s3.internet1.de

Alternativ eine bestimmte Version direkt herunterladen:

aws s3api get-object --bucket mein-bucket --key dokumente/vertrag.pdf \
--version-id ALTE_VERSION_ID vertrag_alt.pdf \
--endpoint-url https://s3.internet1.de

Gelöschtes Objekt wiederherstellen

Den Delete-Marker entfernen – darunter kommt die letzte Version wieder zum Vorschein:

aws s3api delete-object --bucket mein-bucket --key dokumente/vertrag.pdf \
--version-id DELETE_MARKER_VERSION_ID \
--endpoint-url https://s3.internet1.de

Version endgültig löschen

aws s3api delete-object --bucket mein-bucket --key dokumente/vertrag.pdf \
--version-id VERSION_ID \
--endpoint-url https://s3.internet1.de

Speicher im Griff behalten

Alte Versionen sammeln sich an. Zwei Strategien:

  1. Lifecycle-Policies: nichtaktuelle Versionen automatisch nach X Tagen löschen (NoncurrentVersionExpiration) und abgelaufene Delete-Marker aufräumen.
  2. Manuell: regelmäßige Bereinigung per Skript über list-object-versions + delete-objects.

Zusammenspiel mit Object Lock

Object Lock setzt Versioning zwingend voraus: Retention und Legal Hold schützen dabei einzelne Versionen vor dem Löschen.

Verwandte Themen