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
PUTerzeugt eine neue Version mit eigenerVersionId; ältere Versionen bleiben erhalten. - Ein
DELETEohne 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:
- Lifecycle-Policies: nichtaktuelle Versionen automatisch nach X Tagen löschen (
NoncurrentVersionExpiration) und abgelaufene Delete-Marker aufräumen. - 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.