Zwei Lifecycle-Richtlinien, die jeder S3-Bucket haben sollte
07.03.2024
•
Jonathan Merlevede
Abgebrochene Mehrteil-Uploads und abgelaufene Löschmarker: was sind sie und warum Sie sich wegen der schlechten AWS-Standarde darum kümmern müssen.
Es kann Elemente in Ihren Buckets geben, die Sie nicht sehen, die jedoch die S3-Kosten und die Leistung negativ beeinflussen. Dieser Beitrag erklärt, was diese unsichtbaren Objekte sind und was Sie tun können, um sie zu entfernen, da AWS sie aus Gründen der Rückwärtskompatibilität und möglicherweise auch aufgrund perverser Anreize standardmäßig nicht für Sie entfernt.
Zusammenfassung: Die betreffenden Objekte sind Teile abgebrochener Multipart-Uploads und abgelaufene Objekterlöschmarker. Ich denke, jeder Bucket sollte eine Lebenszyklusp Anne haben, um sie zu entfernen. Wenn Sie nicht wissen, was diese Objekte sind und daran interessiert sind zu erfahren, lesen Sie weiter.
Abgebrochene, unvollständige Multipart-Uploads
Was sind Multipart-Uploads?
Das Hochladen kleiner Objekte in AWS S3 ist mit nur einer PutObject
-Operation möglich. Für größere Objekte verwenden wir Multipart-Uploads, und der Ablauf ist komplexer:
Führen Sie die
CreateMultiPartUpload
-Operation durch. Sie geben einen Objekt-Schlüssel an; AWS gibt Ihnen eine Upload-ID zurück.Führen Sie
UploadPart
-Operationen durch, eine für jeden Teil. Sie geben AWS den Objekt-Schlüssel, die Upload-ID, eine „Teilnummer“ und einen Teil der Datei an, die Sie hochladen möchten.Führen Sie die
CompleteMultiPartUpload
-Operation durch. Sie geben den Objekt-Schlüssel und die Upload-ID an; AWS erstellt dann Ihr Objekt als Verkettung aller Teile, die Sie hochgeladen haben.
All dies wird normalerweise von Ihrem Upload-Tool oder Ihrer Bibliothek verarbeitet. Wenn Sie beispielsweise die AWS CLI verwenden, um Dateien hochzuladen (unter Verwendung von aws s3 cp
), werden Multipart-Uploads standardmäßig für Dateien größer als 8MiB verwendet.
Was ist problematisch an Multipart-Uploads?
Wenn Sie einen Upload nie abschließen, bleiben die hochgeladenen Teile dauerhaft in Ihrem Bucket. Diese Teile werden in Ihrem Bucket gespeichert; Sie zahlen dafür, dass Sie sie haben, während Sie sie nicht sehen.
Um dies zu veranschaulichen, erstellen wir eine 5GiB-Testdatei und beginnen mit dem Hochladen in die Cloud mithilfe von aws s3 cp
:
Nachdem Sie den Upload eine Weile laufen gelassen haben, beenden Sie den Upload abrupt:
Sie können sehen, dass der Multipart-Upload weiterhin existiert:
Sie können die zugehörigen Teile mit list-parts
auflisten:
Was kann ich gegen abgebrochene Multipart-Uploads tun?
Wenn Sie wissen, dass ein Upload abgebrochen wurde und abgebrochen werden sollte, können Sie die hochgeladenen Teile entfernen, indem Sie den Upload mit derAbortMultipartUpload
-Operation abbrechen:
Sie können überprüfen, ob die Upload-ID und damit auch die zugehörigen Teile entfernt wurden:
Was kann ich wirklich gegen abgebrochene Multipart-Uploads tun?
Das oben Genannte ist sehr unpraktisch, da es erfordert, dass Sie Ihren Bucket auf abgebrochene Uploads überwachen und diese manuell abbrechen. Stattdessen sollten Sie AWS anweisen, Multipart-Uploads nach Ablauf eines bestimmten Zeitraums automatisch abzubrechen, indem Sie eine (Ablauf-) Objektlebenszyklusrichtlinie verwenden.
Sie können dies mit der CLI oder IaC-Tools wie Terraform tun, aber auch über die AWS-Konsole. Während Sie dort sind, aktivieren Sie auch das Kästchen „Abgelaufene Objekterlöschmarker löschen“; wir werden erklären, was dies im nächsten Abschnitt bewirkt.

Gibt es Nachteile dabei?
Die Objektablaufsteuerung durch Lebenszyklusrichtlinien ist kostenlos. Das Einzige, was zu berücksichtigen ist, ist, dass die Anzahl der Tage, die Sie in der Richtlinie festlegen, die Zeit, die ein Multipart-Upload in Anspruch nehmen kann, begrenzt. Berücksichtigen Sie dies, wenn Sie 5TiB-Objekte von einer langsamen Verbindung hochladen. Wählen Sie etwas Ungewöhnlich lang für einen einzelnen Upload, aber nicht so lang, dass es Ihre Speichergebühren beeinträchtigt, wie 14 Tage.
Abgelaufene Löschmarker
Andere unsichtbare Objekte, die oft in Buckets verweilen, werden „abgelaufene Objekterlöschmarker“ genannt. Diese Objekte existieren nur in versionierten Buckets.
Was sind Objekterlöschmarker?
Wenn Sie die Versionierung für Buckets aktivieren, wird jeder Präfix mit einem Stapel versionierter Elemente verknüpft. Das aktuellste Element ist das „neueste“ oder „aktuelle“. Es gibt zwei Typen von versionierten Elementen: Objektversionen und Löschmarker. Daten an einem Speicherort zu schreiben, fügt eine Objektversion zum Stapel hinzu; ein Objekt zu löschen, fügt einen Löschmarker hinzu. Wenn das aktuelle Element eine Objektversion ist, ist diese Objektversion als Objekt in Ihrem Bucket sichtbar; aktuelle Löschmarker bleiben unsichtbar.
Wir können dies leicht mit ein paar aws
CLI-Befehlen veranschaulichen.
Bevor wir ein Objekt hochladen, existiert keine Version:
Nach dem Hochladen eines Objekts sehen wir das Objekt und eine einzelne Objektversion:
Das Löschen der Datei fügt einen Löschmarker hinzu:
Die Auflistung von Objekten mit aws s3 ls
ergibt ein leeres Ergebnis. Das Entfernen eines Löschmarkers würde das Objekt wiederherstellen. Sie könnten dies wie folgt tun (aber lassen Sie es vorerst):
Was sind aktuelle und nicht aktuelle Objekterlöschmarker?
Wenn ein Löschmarker das neueste oder aktuelle Element im Versionsstapel ist, bezeichnen wir ihn als aktuellen Objekterlöschmarker. Andernfalls bezeichnen wir ihn als nicht aktuellen Objekterlöschmarker. Im obigen Beispiel ist der einzelne Löschmarker am Präfix tmp/testfile
ein aktueller Löschmarker. Das Hochladen eines weiteren Objekts an denselben Ort erstellt eine neue Objektversion:
Zu diesem Zeitpunkt ist der Löschmarker mit der Versions-ID kNig7WIYhADWCr47u_nRrQ8QYdeW4eIj
immer noch vorhanden, hat jedoch „nicht aktuell“ geworden, wie durch seine Eigenschaft IsLatest
mit dem Wert false
angezeigt.
Was sind abgelaufene Objekterlöschmarker?
Abgelaufene Objekterlöschmarker sind Löschmarker an einem Präfix ohne nicht aktuelle Objektversionen. Wir können den Löschmarker aus unserem Beispiel in einen abgelaufenen Objekterlöschmarker verwandeln, indem wir die Objektversionen am selben Speicherort entfernen:
Der Löschmarker mit der Versions-ID kNig7WIYhADWCr47u_nRrQ8QYdeW4eIj
ist jetzt ein abgelaufener Objekterlöschmarker.
Warum sind abgelaufene Objekterlöschmarker schlecht?
Das Problem ist, dass abgelaufene Objekterlöschmarker aktuell sein können und für immer in Ihrem Bucket bleiben können, es sei denn, Sie unternehmen etwas dagegen. Verweilte Marker können Listenanforderungen verlangsamen und zu redundanten Ergebnissen bei der Auflistung von Objektversionen führen.
Wenn Sie die Versionierung für Buckets aktivieren, implementieren Sie in der Regel eine Ablaufpolitik für nicht aktuelle Elemente, da es sonst schnell prohibitively teuer werden kann. Mit einer solchen Richtlinie werden alle Löschmarker schließlich zu aktuellen, abgelaufenen. Ihre Ablaufpolitik entfernt diese nicht aus Ihrem Bucket. In unserem Beispiel wird der Löschmarker am tmp/testfile
von einer Richtlinie, die nicht aktuelle Versionen ablaufen lässt, niemals automatisch entfernt.
Wie kann ich abgelaufene Objekterlöschmarker entfernen?
Sie können Löschmarker manuell entfernen:
id=kNig7WIYhADWCr47u_nRrQ8QYdeW4eIj
aws s3api delete-object --bucket $bucket --key $key --version-id $id
Wie kann ich abgelaufene Objekterlöschmarker wirklich entfernen?
Wie bei Multipart-Uploads ist der beste Weg, abgelaufene Objekterlöschmarker zu entfernen, durch eine explizite (Ablauf-)Lebenszyklusrichtlinie, die sich an abgelaufene Objekterlöschmarker richtet. Eine Möglichkeit, dies zu tun, besteht darin, ein Kontrollkästchen in der Konsole zu aktivieren (siehe Screenshot oben). (Sie sollten wahrscheinlich ein IaC-Tool verwenden.)
Gibt es hierbei Nachteile?
Im unwahrscheinlichen Fall, dass Sie ein Protokoll über die Objekte haben möchten, die in der Vergangenheit existiert haben, und wann sie entfernt wurden, aber nicht die Möglichkeit benötigen, diese Objekte wiederherzustellen, überlegen Sie, abgelaufene Objekterlöschmarker nicht zu entfernen. Was abgebrochene Multipart-Uploads betrifft, so ist das Entfernen von Löschmarkern durch Lebenszyklusrichtlinien kostenlos. Löschmarker existieren nur in versionierten Buckets, aber eine Richtlinie zu deren Entfernung ist nie schädlich.
Fazit
Wir haben gesehen, was unvollständige Multipart-Uploads sind und warum Sie die abgebrochenen abbrechen sollten. Wir haben auch gesehen, was abgelaufene Objekterlöschmarker sind, dass sie aktuell sein können und dass Sie sie entfernen sollten. AWS bricht von sich aus nichts ab oder entfernt es. Erstellen Sie daher immer eine Bucket mit einer Ablaufluftlebenszyklusrichtlinie, die Multipart-Uploads nach ein paar Tagen abbricht und abgelaufene Objekterlöschmarker entfernt.
👏 Wenn Ihnen dieser Artikel gefallen hat, vergessen Sie nicht zu klatschen🗣️ Teilen Sie Ihre Gedanken in den Kommentaren; ich werde versuchen, zu antworten🗞️ Folgen Sie mir und abonnieren Sie datamindedbe für weitere Beiträge zu Cloud-, Plattform-, Daten- und Softwareengineering👀 Für mehr über Data Minded besuchen Sie unsere Website
Latest
Portable by design: Rethinking data platforms in the age of digital sovereignty
Build a portable, EU-compliant data platform and avoid vendor lock-in—discover our cloud-neutral stack in this deep-dive blog.
Cloud-Unabhängigkeit: Test eines europäischen Cloud-Anbieters gegen die Giganten
Kann ein europäischer Cloud-Anbieter wie Ionos AWS oder Azure ersetzen? Wir testen es – und finden überraschende Vorteile in Bezug auf Kosten, Kontrolle und Unabhängigkeit.
Vermeide schlechte Daten von Anfang an
Das Erfassen aller Daten ohne Qualitätsprüfungen führt zu wiederkehrenden Problemen. Priorisieren Sie die Datenqualität von Anfang an, um nachgelagerte Probleme zu vermeiden.