ECS: Objektlebenszyklus-Policy läuft nicht ab
Summary: Vom Nutzer konfigurierte Objektlebenszyklus-Policy mit der Option "Expiration" zum automatischen Löschen von Objekten. Da der Bucket jedoch die Versionierung aktiviert hat, werden die nicht aktuellen Versionen nicht gelöscht. ...
Symptoms
Hinweis: Das folgende Problem gilt nicht für gesperrte oder versionierungsdeaktivierte Buckets.
1. In einem Bucket mit aktivierter Version wird eine Lebenszyklus-Policy wie im folgenden Beispiel festgelegt, um Objekte ablaufen zu lassen. Die Policy wurde so konfiguriert, dass Objekte nach 1 Tag automatisch ablaufen und gelöscht werden.
<?xml version="1.0" ?> <LifecycleConfiguration xmlns="http://s3.companyaws.com/doc/2006-03-01/"> <Rule> <ID>Expire Objects</ID> <Prefix/> <Status>Enabled</Status> <Expiration> <Days>1</Days> </Expiration> </Rule> </LifecycleConfiguration>
2. Für Objekte, für die nie Versionen erstellt wurden, führt die obige Objektablaufrichtlinie dazu, dass eine Löschmarkierung eingefügt wird, um das aktuelle Objekt zu ersetzen. Und so wird das aktuelle Objekt zu einer nicht aktuellen Version, anstatt gelöscht zu werden
Beispiel:
Bevor die Policy erfüllt ist, gibt es ein Objekt und ist das neueste
[VERSION_ID]: 1558539564138 [IS_LATEST]: true [MTIME]: 2019-05-22T15:39:24.138Z [SIZE]: 54270 [OBJECT]: sample.object
Nachdem die Policy übereinstimmt (nach 1 Tag), läuft das Objekt ab, aber das Objekt wird zu einer nicht aktuellen Version und ein dmarker wird als neuestes Objekt eingefügt.
[VERSION_ID]: 1558539371262 [IS_LATEST]: false [MTIME]: 2019-05-22T15:36:11.262Z [SIZE]: 54270 [OBJECT]: sample.object >>> original object becomes non current version [VERSION_ID]: 1558539564138 [IS_LATEST]: true [MTIME]: 2019-05-22T15:39:24.138Z [SIZE]: DMARKER [OBJECT]: sample.object >>> DMarker inserted as latest version.
Nutzer, die von dieser Richtlinie erwarten, dass das Objekt vollständig gelöscht wird.
Cause
Die Erwartung aus dem im vorherigen Abschnitt erwähnten Policy-Beispiel ist für die Versionierung von Buckets falsch. Dies gilt jedoch für Buckets ohne Versionierung, da in Buckets ohne Versionierung das Objekt sofort abläuft, gelöscht wird und nicht wiederherstellbar ist.
Im Gegensatz dazu behandeln die S3-Protokolle bei Versionierungs-Buckets das Ablaufdatum von Objekten anders. Stattdessen wird das Objekt in eine nicht aktuelle Version verschoben. Und fügt eine Löschmarkierung als Platzhalter hinzu. Mit Versionierungs-Buckets kann die Objektversion wiederhergestellt werden, was je nach Policy-Einstellungen eine Toleranzperiode für die Recovery ermöglicht. Dabei handelt es sich um erwartetes Verhalten.
Weitere Informationen zu Lebenszyklus-Policies, Versionierung und Ablauf in S3 finden Sie in der Referenz im Abschnitt "Zusätzliche Informationen" am Ende dieses Artikels.
Resolution
In einem versionsaktivierten Bucket ist es besser, das folgende Beispiel für die Lebenszyklus-Policy zu verwenden. Stattdessen laufen stattdessen nicht aktuelle Versionen ab und löschen auch Markierungen (die das Ergebnis eines direkten Löschens in einem Objekt in einem Versionsverwaltungs-Bucket sind).
Beispiel:
In diesem Beispiel entfernt S3 aktuelle Versionen (Objekte) 60 Tage nach ihrer Erstellung, indem für jede der aktuellen Objektversionen eine Löschmarkierung hinzugefügt wird. Durch diesen Prozess wird die aktuelle Version nicht aktuell und die Löschmarkierung wird zur aktuellen Version.
Der Befehl NoncurrentVersionExpiration Durch Aktionen in derselben S3-Lebenszykluskonfiguration werden nicht aktuelle Objekte 30 Tage, nachdem sie nicht mehr aktuell sind, entfernt. Daher werden in diesem Beispiel alle Objektversionen 90 Tage nach der Objekterstellung dauerhaft entfernt.
WICHTIGER HINWEIS : Lebenszyklus-Policies sollten mit Bedacht gehandhabt werden. Geben Sie die Anzahl der Tage und die Aktionen an, die Ihren Anwendungsanforderungen entsprechen. Die folgende Richtlinie ist nur ein Beispiel. Sie lässt sowohl dmarkers als auch nicht aktuelle Versionen ablaufen, wodurch Löschungen nicht wiederherstellbar sind.
<LifecycleConfiguration> <Rule> ... <Expiration> <Days>60</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
Additional Information
Weitere Details zum Verhalten beim Ablauf von Policies in versionierten und nicht versionierten Buckets finden Sie hier. https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.htmlhttps://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#intro-lifecycle-rules-actions
https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex7
Weitere Erläuterungen finden Sie auch im ECS-Leitfaden für den Datenzugriff mit Details zum Festlegen der Lebenszyklus-Policy
https://dl.dell.com/content/manual53094723-ecs-3-8-x-data-access-guide.pdf