С помощью правил Lifecycle в Object Storage можно автоматически удалять объекты и отменять незавершенные multipart-загрузки. Это позволяет оптимизировать затраты на хранение данных.
Конфигурация Lifecycle задается на уровне бакета. Каждое правило распространяется на все объекты бакета или на часть объектов, выбранных с помощью фильтра. Для бакета можно создать одну конфигурацию Lifecycle.
Конфигурация может содержать не более 1 000 правил. Учитываются и включенные, и выключенные правила.
Управлять Lifecycle можно с помощью AWS S3 API и сторонних инструментов.
Раздел содержит описание общей структуры правил, принципов их работы и примеры конфигурации. Подробная информация о структурных элементах конфигурации — в разделах Фильтрация объектов и Действия с объектами. Инструкции — в разделе Управление 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 применяются к объектам, загруженным как до, так и после создания правила.
Настройки Bucket Policy не влияют на работу правил Lifecycle.
Если версия объекта защищена блокировкой (Object Lock), она не удалится по правилу Lifecycle, даже если условия правила соблюдены.
Если правила Lifecycle конфликтуют, к объектам применяется правило, которое сработает раньше. Например, если для объектов с префиксом folder/file настроено удаление (Expiration) через 30 дней после загрузки, а для объектов с префиксом folder/ — удаление через 10 дней после загрузки, файл folder/file.txt будет удален через 10 дней.
Выключенное правило не применяется при выполнении Lifecycle, но должно соответствовать требованиям к структуре конфигурации. Выключенные правила, наряду с включенными, учитываются при следующих проверках:
Одна конфигурация содержит не более 1 000 правил.
Правила одной конфигурации используют один тип фильтрации.
ID правила уникален в рамках конфигурации. Подробнее о структуре правила.
Если в корне правила содержится элемент Prefix, он уникален в рамках конфигурации. Подробнее о типах фильтрации.
Когда все условия правила выполняются, действие по правилу — например удаление данных — не совершается моментально. Время, когда выполнились условия, округляется до ближайшей полуночи по UTC. Действие совершается в течение суток после этого момента.
Хранение данных оплачивается до тех пор, пока они не удалены физически. Подробнее о тарификации в Object Storage.
Ниже приведены примеры конфигурации Lifecycle в форматах XML и JSON. Формат XML используется в запросах AWS S3 API. JSON можно передавать, например, при управлении Lifecycle через AWS CLI.
Правило, которое удаляет все объекты бакета через 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>
Правило, которое удаляет неактуальные версии объектов с префиксом 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>
Правило, которое удаляет неактуальные версии объектов с префиксом 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>
Правило, которое отменяет незавершенные 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>
Правило, которое удаляет объекты через 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>