Облачная платформаEvolution

Общие принципы и структура правил Lifecycle


С помощью правил Lifecycle в Object Storage можно автоматически удалять объекты и отменять незавершенные multipart-загрузки. Это позволяет оптимизировать затраты на хранение данных.

Конфигурация Lifecycle задается на уровне бакета. Каждое правило распространяется на все объекты бакета или на часть объектов, выбранных с помощью фильтра. Для бакета можно создать одну конфигурацию Lifecycle.

Конфигурация может содержать не более 1 000 правил. Учитываются и включенные, и выключенные правила.

Управлять Lifecycle можно с помощью AWS S3 API и сторонних инструментов.

Раздел содержит описание общей структуры правил, принципов их работы и примеры конфигурации. Подробная информация о структурных элементах конфигурации — в разделах Фильтрация объектов и Действия с объектами. Инструкции — в разделе Управление Lifecycle.

Структура конфигурации и правила Lifecycle

Конфигурация Lifecycle — это набор правил, который передается в AWS S3 API в формате XML.

В корне конфигурации — элемент LifecycleConfiguration. Он может содержать одно или несколько правил Rule.

Правило состоит из следующих элементов:

  • Фильтра — определяет, к каким объектам применяется правило. Например, можно фильтровать объекты по ключу (названию).

  • Одного или нескольких действий — определяют, что нужно сделать с выбранными объектами и при каких условиях. Например, можно удалить объект, если он хранится в бакете больше 30 дней.

  • Идентификатора ID. Значение должно быть уникальным среди всех правил конфигурации, т. е. в рамках бакета. Размер — не более 255 байт. Если не задать идентификатор, он будет сгенерирован автоматически.

  • Статуса Status — позволяет включить (Enabled) или выключить (Disabled) правило. Если правило выключено, оно сохраняется в конфигурации бакета, но Object Storage не совершает заданные в нем действия.

Пример конфигурации с двумя правилами:

<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>delete-old-logs</ID>
<Status>Enabled</Status>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
<Rule>
<ID>delete-old-documents</ID>
<Status>Disabled</Status>
<Filter>
<Prefix>documents/</Prefix>
</Filter>
<Expiration>
<Days>100</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Правило delete-old-logs задает автоматическое удаление объектов через 30 дней после загрузки — условие указано в действии Expiration. Применяется к объектам с префиксом logs/ — он указан в фильтре Prefix. Правило включено.

Правило delete-old-documents задает автоматическое удаление объектов с префиксом documents/ через 100 дней после загрузки. Правило выключено.

Ограничения и принципы работы Lifecycle

  • Правила Lifecycle применяются к объектам, загруженным как до, так и после создания правила.

  • Настройки Bucket Policy не влияют на работу правил Lifecycle.

  • Если версия объекта защищена блокировкой (Object Lock), она не удалится по правилу Lifecycle, даже если условия правила соблюдены.

  • Если правила Lifecycle конфликтуют, к объектам применяется правило, которое сработает раньше. Например, если для объектов с префиксом folder/file настроено удаление (Expiration) через 30 дней после загрузки, а для объектов с префиксом folder/ — удаление через 10 дней после загрузки, файл folder/file.txt будет удален через 10 дней.

  • Выключенное правило не применяется при выполнении Lifecycle, но должно соответствовать требованиям к структуре конфигурации. Выключенные правила, наряду с включенными, учитываются при следующих проверках:

  • Когда все условия правила выполняются, действие по правилу — например удаление данных — не совершается моментально. Время, когда выполнились условия, округляется до ближайшей полуночи по UTC. Действие совершается в течение суток после этого момента.

    Внимание

    Хранение данных оплачивается до тех пор, пока они не удалены физически. Подробнее о тарификации в Object Storage.

Примеры конфигурации

Ниже приведены примеры конфигурации Lifecycle в форматах XML и JSON. Формат XML используется в запросах AWS S3 API. JSON можно передавать, например, при управлении Lifecycle через AWS CLI.

Expiration для всех объектов

Правило, которое удаляет все объекты бакета через 365 дней после загрузки:


<LifecycleConfiguration>
<Rule>
<ID>delete-all-objects</ID>
<Filter></Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Конфигурация с несколькими правилами

Конфигурация с двумя правилами, которые удаляют объекты с префиксом logs/ через 30 дней после загрузки, объекты с префиксом documents/ — через 365 дней:


<LifecycleConfiguration>
<Rule>
<ID>delete-old-logs</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
<Rule>
<ID>delete-old-documents</ID>
<Filter>
<Prefix>documents/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

NoncurrentVersionExpiration с условием по сроку

Правило, которое удаляет неактуальные версии объектов с префиксом logs/ через 15 дней после того, как версии стали неактуальными:


<LifecycleConfiguration>
<Rule>
<ID>delete-old-log-versions</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<NoncurrentVersionExpiration>
<NoncurrentDays>15</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

NoncurrentVersionExpiration с условием по сроку и количеству версий

Правило, которое удаляет неактуальные версии объектов с префиксом logs/, если одновременно выполнены следующие условия:

  • Версия стала неактуальной 30 или более дней назад.

  • У объекта есть как минимум три более новые неактуальные версии.


<LifecycleConfiguration>
<Rule>
<ID>delete-old-log-versions-keep-three</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
<NewerNoncurrentVersions>3</NewerNoncurrentVersions>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

AbortIncompleteMultipartUpload

Правило, которое отменяет незавершенные multipart-загрузки объектов с префиксом uploads/ через 7 дней после начала загрузки и удаляет загруженные части объектов:


<LifecycleConfiguration>
<Rule>
<ID>abort-incomplete-uploads</ID>
<Filter>
<Prefix>uploads/</Prefix>
</Filter>
<Status>Enabled</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>

Expiration с несколькими фильтрами через And

Правило, которое удаляет объекты через 365 дней после загрузки, если одновременно выполнены следующие условия:

  • Ключ объекта начинается с documents/.

  • Объект имеет теги source: mail и status: completed.

  • Размер объекта строго больше 131 072 байт и строго меньше 5 368 709 120 байт.


<LifecycleConfiguration>
<Rule>
<ID>delete-completed-mail-documents</ID>
<Filter>
<And>
<Prefix>documents/</Prefix>
<Tag>
<Key>source</Key>
<Value>mail</Value>
</Tag>
<Tag>
<Key>status</Key>
<Value>completed</Value>
</Tag>
<ObjectSizeGreaterThan>131072</ObjectSizeGreaterThan>
<ObjectSizeLessThan>5368709120</ObjectSizeLessThan>
</And>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Несколько действий в одном правиле

Правило, которое выполняет несколько действий для объектов с префиксом logs/:

  • Удаляет текущие версии объектов через 365 дней после загрузки.

  • Удаляет неактуальные версии объектов через 30 дней после того, как версии стали неактуальными.


<LifecycleConfiguration>
<Rule>
<ID>delete-old-logs</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>