Перейти к содержимому

Настройка правил

Конфигурация жизненного цикла представляет собой набор правил. Правила определяются в формате JSON и включают следующую информацию:

  • уникальное имя правила;
  • статус (Enabled — правило активно, Disabled — неактивно);
  • область применения правила (все объекты без исключения, объекты с указанным префиксом или с указанными тегами);
  • срок хранения объектов;
  • действие, которое нужно совершить после окончания срока хранения.
Параметр Тип Значение Пример
ID Строка Уникальный идентификатор правила, который помогает различать его среди других правил "ID": "ArchiveOldLogs"
Status Строка Указывает, активно ли правило. Возможные значения:
  • Enabled — правило активно;
  • Disabled — правило неактивно
"Status": "Enabled"
Filter Объект Определяет, к каким объектам применяется правило. Может включать элементы:
  • Prefix — префикс объектов, к которым нужно применить правило;
  • Tags — теги объектов, к которым нужно применить правило
"Filter": {
"Prefix": "logs/",
"Tags": [
{"Key": "Environment", "Value": "Production"}
]
}
Expiration Объект Определяет срок хранения объекта. Может включать элементы:
  • Days — количество дней, по прошествии которых нужно удалить объект;
  • Date — дата, после наступления которой объект будет удален
"Expiration": {
"Days": 365
}
NonCurrentVersionExpiration Объект Указывает срок хранения неактуальных версий объекта. Может включать элементы:
  • NonCurrentDays — количество дней до удаления неактуальной версии;
  • NewerNonCurrentVersions — количество последних неактуальных версий, которые нужно хранить
"NoncurrentVersionExpiration": {
"NoncurrentDays": 30,
"NewerNoncurrentVersions": 3
}
ExpiredObjectDeleteMarker Boolean Указывает, нужно ли удалять маркеры удаления после удаления всех неактуальных версий объекта "Expiration": {
"ExpiredObjectDeleteMarker": true
}
AbortIncompleteMultipartUpload Объект Указывает количество дней (DaysAfterInitiation), после которого незавершенные составные загрузки будут автоматически прерваны "AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}

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

Вы можете сделать это двумя способами:

Операция удаления имеет свою специфику в зависимости от того, включено ли в бакете версионирование:

  • Если версионирование не включено, объект будет удален после того, как закончится срок хранения.
  • Если версионирование включено, операция удаления затронет только текущую версию объекта. Будет создан маркер удаления — он станет текущей версией, а предыдущие версии объекта останутся доступными.
  • Если версионирование приостановлено, будет создан маркер удаления с идентификатором null, который станет текущей версией объекта. Текущая версия при этом будет удалена без возможности восстановления, а все предыдущие — останутся доступными.
Важно

Объекты удаляются асинхронно. Фактическое удаление происходит по прошествии некоторого времени после истечения срока хранения.

Вы можете указать в правилах количество дней, по прошествии которого объекты будут считаться подлежащими удалению. Срок хранения объектов всегда округляется до 00:00 UTC следующего дня после достижения указанных даты и времени.

Например, если вы загрузили объект 20 ноября 2025 года в 14:30 MSK (в 11:30 UTC) и назначили для него срок хранения в 1 день, этот срок истечет в 00:00 UTC (03:00 MSK) 22 ноября 2025 года. Начиная с 00:00 UTC 22 ноября 2025 года объект будет считаться подлежащим удалению.

При расчете сроков учитываются только полные дни. Например, если вы загрузили объект 21 ноября 2025 года в 23:59 MSK (в 20:59 UTC) и установили для него срок хранения в 1 день, этот срок истечет в 00:00 UTC (03:00 MSK) 23 ноября.

json
{
"Rules": [
{
"ID": "DeleteObjectsInThreeDays",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"Expiration": {
"Days": 7
}
}
]
}
json
{
"Rules": [
{
"ID": "DeleteObjectsWithTheSpecifiedPrefixInAWeek",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"Expiration": {
"Days": 7
}
}
]
}

Это правило распространяется не на все объекты в бакете, а только на объекты с префиксом logs/. Для таких объектов устанавливается срок хранения в 7 дней. После истечения этого срока они удаляются.

json
{
"Rules": [
{
"ID": "DeleteTaggedObjectsInAWeek",
"Filter": {
"And": {
"Prefix": "",
"Tags": [
{
"Key": "application",
"Value": "logs"
},
{
"Key": "documents",
"Value": "drafts"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 7
}
}
]
}

Это правило распространется не на все объекты в бакете, а только на объекты с тегами application:logs и documents:drafts. Для таких объектов устанавливается срок хранения в 7 дней. После истечения этого срока они удаляются.

В правиле можно указать конкретную дату, когда будет удален объект. В этом случае объект считается подлежащим удалению начиная с 00:00 UTC этой даты независимо от времени загрузки.

json
{
"Rules": [
{
"ID": "DeleteOnSpecificDate",
"Status": "Enabled",
"Filter": {},
"Expiration": {
"Date": "2025-12-31T00:00:00Z"
}
}
]
}

С помощью правил жизненного цикла можно настроить автоматическое удаление неактуальных версий объекта.

json
{
"Rules": [
{
"ID": "DeleteNonCurrentVersionsAfter30Days",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 30
}
}
]
}

Это правило указывает, что версии объекта утрачивают актуальность через 30 дней. После загрузки новой версии все предыдущие версии хранятся 30 дней, а затем удаляются.

json
{
"Rules": [
{
"ID": "LimitNonCurrentVersions",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"NoncurrentVersionExpiration": {
"NewerNoncurrentVersions": 3
}
}
]
}

Это правило не только устанавливает срок хранения для неактуальных версий, но и ограничивает их количество. Оно указывает, что в бакете должны храниться только 3 последние неактуальные версии объекта. Все старые неактуальные версии автоматически удаляются.

Когда из бакета с версионированием удаляется текущая версия объекта, а неактуальных версий больше не остается, маркер удаления становится единственной версией объекта. Удалять такие маркеры можно с помощью правила ExpiredObjectDeleteMarker.

json
{
"Rules": [
{
"ID": "DeleteAllLogs",
"Filter": {
"Prefix": "logs/"
},
"Status": "Enabled",
"Expiration": {
"ExpiredObjectDeleteMarker": true
},
"NoncurrentVersionExpiration": {
"NewerNoncurrentVersions": 10,
"NoncurrentDays": 30
}
}
]
}

Это правило применяется ко все объектом с префиксом logs/. Оно указывает, что в бакете должны храниться 10 неактуальных версий объекта. Версия становится неактуальной через 30 дней с момента загрузки. После удаления последней неактуальной версии оставшийся маркер удаления удаляется автоматически.

json
{
"Rules": [
{
"Status": "Enabled",
"Prefix": "",
"Expiration": {
"Days": 30,
"ExpiredObjectDeleteMarker": true
}
}
]
}

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

Незавершенные загрузки можно удалять с помощью правил жизненного цикла. Это поможет не прибегать к ручному удалению, а также упростит поддержание порядка и чистоты данных.

json
{
"Rules": [
{
"ID": "AbortAllIncompleteUploadsAfter7Days",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}

Это правило предписывает останавливать все незавершенные загрузки через 7 дней после начала.

json
{
"Rules": [
{
"ID": "AbortUploadsForLogsAfter3Days",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 3
}
}
]
}

Это правило предписывает останавливать не все незавершенные загрузки, а только загрузки объектов с префиксом logs/. Загрузки будут прерваны через 3 дня после начала.

json
{
"Rules": [
{
"ID": "AbortTaggedUploadsAfter5Days",
"Status": "Enabled",
"Filter": {
"Tags": [
{
"Key": "Project",
"Value": "Archive"
}
]
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 5
}
}
]
}

Это правило предписывает останавливать не все незавершенные загрузки, а только загрузки объектов c тегом Project:Archive. Загрузки будут остановлены через 5 дней после начала.