30 сентября 2026 г. · 5 мин чтения
Как автоматически удалять файлы через несколько дней в S3, R2 и B2
Временные файлы копятся: скриншоты для ревью, сборка для тестировщика, файл для клиента. Правила жизненного цикла позволяют бакету убирать за собой. Хитрость в том, чтобы определить срок жизни файла при загрузке, поместив его под префикс, для которого есть правило.
Схема с префиксами
Создайте по одному правилу на каждый срок, каждое со своей папкой:
tmp/1d/удаляет через 1 деньtmp/7d/удаляет через 7 днейtmp/30d/удаляет через 30 дней
Загрузите файл в tmp/7d/2026/09/report.pdf, и через неделю его не станет. Все, что лежит вне tmp/, никогда не затрагивается.
Cloudflare R2
- Откройте Settings бакета, найдите Object lifecycle rules и выберите Add rule.
- Задайте имя, например
expire-7d, и префиксtmp/7d/. - Выберите удаление объектов через 7 days после загрузки и сохраните.
Или через Wrangler:
npx wrangler r2 bucket lifecycle add your-bucket expire-7d tmp/7d/ --expire-days 7Amazon S3
- Откройте бакет, перейдите в Management и выберите Create lifecycle rule.
- Задайте имя правила и выберите Limit the scope using filters с префиксом
tmp/7d/. - В действиях выберите Expire current versions of objects и укажите 7 дней. В бакете с версионированием также включите безвозвратное удаление неактуальных версий.
Через AWS CLI:
{
"Rules": [
{
"ID": "expire-7d",
"Status": "Enabled",
"Filter": { "Prefix": "tmp/7d/" },
"Expiration": { "Days": 7 }
}
]
}
aws s3api put-bucket-lifecycle-configuration --bucket your-bucket \
--lifecycle-configuration file://lifecycle.json
Эта команда заменяет всю конфигурацию жизненного цикла бакета, поэтому включите в нее уже существующие правила.
Backblaze B2
В Lifecycle Settings бакета выберите собственные правила и добавьте правило с префиксом имени файла tmp/7d/. B2 работает в два этапа: days from uploading to hiding и days from hiding to deleting. Укажите 6 и 1, чтобы файл исчезал примерно через неделю.
Когда именно удаляются файлы?
Правила жизненного цикла выполняются в фоне, обычно раз в сутки. Amazon S3 отсчитывает срок от момента загрузки, округляет его до ближайшей полуночи UTC и ставит объект в очередь на удаление; платить за него вы перестаете, как только срок истек. На практике файл может оставаться доступным еще примерно сутки после назначенной даты. Если ссылка должна перестать работать в точное время, используйте presigned URL.
Частые вопросы
Удаляют ли правила жизненного цикла файлы, если мой компьютер выключен?
Да. Правила хранятся в бакете и выполняются на стороне провайдера, поэтому с вашей стороны ничего не должно быть запущено.
Можно ли удалять файлы через несколько часов, а не дней?
Нет. Правила жизненного цикла работают только с целыми днями. Для ссылок, которые должны истечь через несколько часов, оставьте файл приватным и поделитесь presigned URL.
Удалит ли правило жизненного цикла файлы вне префикса?
Нет. Правило с фильтром по префиксу затрагивает только ключи, которые начинаются с этого префикса. Правило без фильтра действует на весь бакет, поэтому всегда задавайте фильтр.