Skip to content

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

Конфигурация жизненного цикла представляет собой набор правил. Правила определяются в формате 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
}
ExpiredObjectDeleteMarkerBooleanУказывает, нужно ли удалять маркеры удаления после удаления всех неактуальных версий объекта"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 ноября.

Пример 1: удалять объекты через 7 дней после загрузки
json
"Rules": [
    {
      "ID": "DeleteObjectsInThreeDays",
      "Status": "Enabled",
      "Filter": {
        "Prefix": ""
      },
      "Expiration": {
        "Days": 7
      }
    }
  ]
}
Пример 2: удалять объекты с указанным префиксом
json
"Rules": [
    {
      "ID": "DeleteObjectsWithTheSpecifiedPrefixInAWeek",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Expiration": {
        "Days": 7
      }
    }
  ]
}

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

Пример 3: удалять объекты с указанными тегами
json
    "Rules": [
        {
            "ID": "DeleteTaggedObjectsInAWeek",
            "Filter": {
                "And": {
                    "Prefix": "",
                    "Tags": [
                        {
                            "Value": "application",
                            "Key": "logs"
                        },
                        {
                            "Value": "documents",
                            "Key": "drafts"
                        }
                    ]
                }
            },
            "Status": "Enabled",
            "Expiration": {
                "Days": 7
            }
        }
    ]
}

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

Удаление в указанную дату

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

Пример: удалить объект 31 декабря 2025 года
json
{
  "Rules": [
    {
      "ID": "DeleteOnSpecificDate",
      "Status": "Enabled",
      "Filter": {},
      "Expiration": {
        "Date": "2025-12-31T00:00:00Z"
      }
    }
  ]
}

Удаление неактуальных версий

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

Пример 1: удалять все неактуальные версии через 30 дней
json
{
  "Rules": [
    {
      "ID": "DeleteNonCurrentVersionsAfter30Days",
      "Status": "Enabled",
      "Filter": {
        "Prefix": ""
      },
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 30
      }
    }
  ]
}

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

Пример 2: ограничить количество неактуальных версий
json
{
  "Rules": [
    {
      "ID": "LimitNonCurrentVersions",
      "Status": "Enabled",
      "Filter": {
        "Prefix": ""
      },
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 30
      },
      "NoncurrentVersionExpiration": {
        "NewerNoncurrentVersions": 3
      }
    }
  ]
}

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

Удаление маркеров удаления

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

Пример 1: удалять маркеры удаления после удаления последней неактуальной версии
json
{
  "Rules": [
    {
      "ID": "DeleteAllLogs",
      "Filter": {
        "Prefix": "logs/"
      },
      "Status": "Enabled",
      "Expiration": {
        "ExpiredObjectDeleteMarker": true
      },
      "NoncurrentVersionExpiration": {
        "NewerNoncurrentVersions": 10,
        "NoncurrentDays": 30
      }
    }
  ]
}

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

Пример 2: удалять маркеры удаления после истечения указанного срока
json
{
  "Rules": [
    {
      "Status": "Enabled",
      "Prefix": "",
      "Expiration": {
        "Days": 30,
        "ExpiredObjectDeleteMarker": true
      }
    }
  ]
}

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

Остановка незавершенных загрузок

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

Пример 1: останавливать незавершенные загрузки через 7 дней после начала
json
{
  "Rules": [
    {
      "ID": "AbortAllIncompleteUploadsAfter7Days",
      "Status": "Enabled",
      "Filter": {
        "Prefix": ""
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 7
      }
    }
  ] 
}

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

Пример 2: останавливать незавершенные загрузки для объектов с указанным префиксом
json
{
  "Rules": [
    {
      "ID": "AbortUploadsForLogsAfter3Days",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 3
      }
    }
  ]
}

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

Пример 3: останавливать все незавершенные загрузки для объектов с указанными тегами
json
{
  "Rules": [
    {
      "ID": "AbortTaggedUploadsAfter5Days",
      "Status": "Enabled",
      "Filter": {
        "Tags": [
          {"Key": "Project", "Value": "Archive"}
        ]
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 5
      }
    }
  ]
}

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