Управление сроком хранения данных в S3-хранилище

Настройка автоматического удаления файлов с помощью правил жизненного цикла.

S3-хранилище — это распределенная система хранения данных, где каждый файл сохраняется в специальном контейнере, называемом бакетом. Доступ к данным осуществляется через S3 API, что делает такие хранилища совместимыми с инструментами AWS и другими популярными сервисами.

Жизненный цикл в S3 — это механизм, позволяющий задавать автоматические действия с объектами через определенный промежуток времени. Наиболее распространенный сценарий — автоматическое удаление файлов после заданного числа дней или в указанную дату. Это помогает оптимизировать использование места, очищать временные данные и старые резервные копии.

Поддерживаемые функции

  1. Expiration — удаление объектов через определенное количество дней после загрузки или в конкретную дату.
  2. Prefix — ограничение действия правила для определенного пути (например, только для папки logs/).
  3. Ограничения:
    • Минимальное значение — 1 день.
    • Время удаления — дата должна быть указана строго на 00:00 UTC.

Удаление всех объектов через 30 дней

Для настройки автоматической очистки бакета выполните следующие шаги:

Шаг 1. Создание конфигурационного файла Создайте локальный файл lifecycle.json со следующим содержимым:

{
  "Rules": [
    {
      "ID": "DeleteAfter30Days",
      "Prefix": "",
      "Status": "Enabled",
      "Expiration": {
        "Days": 30
      }
    }
  ]
}

Шаг 2. Применение конфигурации к бакету Используйте утилиту AWS CLI, чтобы отправить настройки в хранилище, выполнив команду aws s3api put-bucket-lifecycle-configuration:

aws s3api put-bucket-lifecycle-configuration \
  --bucket your-bucket-name \
  --lifecycle-configuration file://lifecycle.json

Шаг 3. Проверка текущих правил Чтобы убедиться, что конфигурация активна, выполните команду aws s3api get-bucket-lifecycle-configuration:

aws s3api get-bucket-lifecycle-configuration \
  --bucket your-bucket-name

Совет

Если вам нужно полностью отключить автоматическое удаление, используйте команду aws s3api delete-bucket-lifecycle --bucket your-bucket-name.

Удаление файлов в определенной папке

Если необходимо очищать только конкретную директорию, например logs/, используйте параметр Prefix.

{
  "Rules": [
    {
      "ID": "DeleteLogsAfter7Days",
      "Prefix": "logs/",
      "Status": "Enabled",
      "Expiration": {
        "Days": 7
      }
    }
  ]
}

После применения этого правила будут удаляться только объекты, расположенные по пути logs/....

Удаление файлов по конкретной дате

Если требуется задать точную дату завершения хранения всех объектов, используется параметр Date.

{
  "Rules": [
    {
      "ID": "DeleteAtMidnight",
      "Prefix": "",
      "Status": "Enabled",
      "Expiration": {
        "Date": "2026-12-01T00:00:00Z"
      }
    }
  ]
}

Важно

Время необходимо указывать в формате ISO 8601 (например, 2026-12-01T00:00:00Z), при этом значение часов, минут и секунд должно быть строго 00:00:00.

Полезные замечания по работе правил

Чтобы использование жизненного цикла было эффективным и предсказуемым, стоит учитывать несколько технических особенностей работы S3-хранилища.

  • Задержка выполнения: правила жизненного цикла обычно применяются один раз в сутки в 00:00 UTC. Однако физическое удаление данных может занять до 24 часов после наступления срока истечения.
  • Проверка даты удаления: вы можете узнать, когда именно будет удален конкретный объект, проверив его метаданные. При выполнении команды head-object в ответе отобразится заголовок x-amz-expiration.
  • Пустые папки: в S3 нет «папок» в привычном понимании (это префиксы в именах файлов). Если правило удалит все объекты с определенным префиксом, «папка» просто исчезнет из списка в консоли.

Обратите внимание

Если в бакете включено версионирование, стандартные правила Expiration будут создавать «маркеры удаления» (Delete Markers). Чтобы очищать старые версии файлов, необходимо настраивать дополнительные правила NoncurrentVersionExpiration.

Совет

Перед применением глобального правила (с пустым "Prefix": "") на больших объемах данных, рекомендуется сначала протестировать его на тестовом бакете или конкретной папке, чтобы избежать случайной потери важных файлов.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Обновлено:
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам