ECS. Срок действия политики жизненного цикла объектов не истекает
Summary: Настроенная пользователем политика жизненного цикла объектов с параметром «Expiration» для автоматического удаления объектов. Но так как в контейнере включено управление версиями, устаревшие версии не удаляются. ...
Symptoms
Примечание. Описанная ниже проблема не относится к контейнерам с приостановленным или отключенным управлением версиями.
1. В контейнере с поддержкой версий задается политика жизненного цикла, как показано в примере ниже, чтобы завершить срок действия объектов. Политика была настроена на автоматическое истечение срока действия и удаление объектов через 1 день.
<?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. Для объектов, версии которых никогда не создавались, приведенная выше политика истечения срока действия объекта приводит к тому, что вместо текущего объекта вставляется маркер удаления. Таким образом, текущий объект становится нетекущей версией, а не удаляется
Пример:
Перед выполнением политики существует один объект, который является последним
[VERSION_ID]: 1558539564138 [IS_LATEST]: true [MTIME]: 2019-05-22T15:39:24.138Z [SIZE]: 54270 [OBJECT]: sample.object
После совпадения политики (через 1 день) происходит истечение срока действия, но объект превращается в нетекущую версию, а маркер dmarker вставляется как последний объект.
[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.
Пользователи, ожидающие от этой политики увидеть объект, будут полностью удалены.
Cause
Ожидание из примера политики, упомянутого в предыдущем разделе, неверно для контейнеров управления версиями. Однако это верно для контейнеров без управления версиями, так как в контейнерах без управления версиями объект немедленно истекает и удаляется, становясь невосстановимым.
В отличие от контейнеров управления версиями, протоколы S3 обрабатывают срок действия объектов по-другому, вместо этого они перемещают объект в неактуальную версию. И добавляет маркер удаления в качестве заполнителя. С помощью контейнеров управления версиями версию объекта можно восстановить, что позволяет восстановить в течение льготного периода восстановления в зависимости от параметров политики. Такое поведение является ожидаемым.
Дополнительные сведения о политиках жизненного цикла, версиях и сроках действия в S3 см. в разделе «Дополнительная информация» в нижней части этой статьи.
Resolution
В контейнере с включенной версией лучше использовать приведенный ниже пример политики жизненного цикла. Вместо этого истекает срок действия нетекущих версий, а также удаляются маркеры (которые являются результатом прямого удаления объекта в контейнере управления версиями).
Пример.
В этом примере S3 удаляет текущие версии (объекты) через 60 дней после их создания, добавляя маркер удаления для каждой из текущих версий объекта. В результате текущий процесс делает текущую версию неактуальной, а маркер удаления становится текущей версией.
Оператор NoncurrentVersionExpiration в той же конфигурации жизненного цикла S3 удаляет нетекущие объекты через 30 дней после того, как они становятся неактуальными. Таким образом, в данном примере все версии объектов окончательно удаляются через 90 дней после его создания.
ВАЖНОЕ ПРИМЕЧАНИЕ : С политиками жизненного цикла следует обращаться осторожно, указывайте количество дней и действия, соответствующие потребностям приложения. Приведенная ниже политика является только примером, она исчерпывает срок действия как маркеров, так и устаревших версий, что делает удаление невосстановимым.
<LifecycleConfiguration> <Rule> ... <Expiration> <Days>60</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
Additional Information
Дополнительные сведения о поведении истечения срока действия политики в версионных и неверсионных контейнерах можно найти здесь; 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
Дополнительные пояснения можно найти в руководстве по доступу к данным ECS, где подробно описано, как настроить политику жизненного цикла
https://dl.dell.com/content/manual53094723-ecs-3-8-x-data-access-guide.pdf