Управление сроком хранения данных в S3-хранилище
Настройка автоматического удаления файлов с помощью правил жизненного цикла.
S3-хранилище — это распределенная система хранения данных, где каждый файл сохраняется в специальном контейнере, называемом бакетом. Доступ к данным осуществляется через S3 API, что делает такие хранилища совместимыми с инструментами AWS и другими популярными сервисами.
Жизненный цикл в S3 — это механизм, позволяющий задавать автоматические действия с объектами через определенный промежуток времени. Наиболее распространенный сценарий — автоматическое удаление файлов после заданного числа дней или в указанную дату. Это помогает оптимизировать использование места, очищать временные данные и старые резервные копии.
Поддерживаемые функции
- Expiration — удаление объектов через определенное количество дней после загрузки или в конкретную дату.
- Prefix — ограничение действия правила для определенного пути (например, только для папки
logs/). - Ограничения:
- Минимальное значение — 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": "") на больших объемах данных, рекомендуется сначала протестировать его на тестовом бакете или конкретной папке, чтобы избежать случайной потери важных файлов.
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!