30 сентября 2026 г. · 5 мин чтения

Как автоматически удалять файлы через несколько дней в S3, R2 и B2

Временные файлы копятся: скриншоты для ревью, сборка для тестировщика, файл для клиента. Правила жизненного цикла позволяют бакету убирать за собой. Хитрость в том, чтобы определить срок жизни файла при загрузке, поместив его под префикс, для которого есть правило.

Схема с префиксами

Создайте по одному правилу на каждый срок, каждое со своей папкой:

  • tmp/1d/ удаляет через 1 день
  • tmp/7d/ удаляет через 7 дней
  • tmp/30d/ удаляет через 30 дней

Загрузите файл в tmp/7d/2026/09/report.pdf, и через неделю его не станет. Все, что лежит вне tmp/, никогда не затрагивается.

Cloudflare R2

  1. Откройте Settings бакета, найдите Object lifecycle rules и выберите Add rule.
  2. Задайте имя, например expire-7d, и префикс tmp/7d/.
  3. Выберите удаление объектов через 7 days после загрузки и сохраните.

Или через Wrangler:

npx wrangler r2 bucket lifecycle add your-bucket expire-7d tmp/7d/ --expire-days 7

Amazon S3

  1. Откройте бакет, перейдите в Management и выберите Create lifecycle rule.
  2. Задайте имя правила и выберите Limit the scope using filters с префиксом tmp/7d/.
  3. В действиях выберите 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.

Удалит ли правило жизненного цикла файлы вне префикса?

Нет. Правило с фильтром по префиксу затрагивает только ключи, которые начинаются с этого префикса. Правило без фильтра действует на весь бакет, поэтому всегда задавайте фильтр.