R2
Что это
R2 — это объектное хранилище Cloudflare, место для размещения файлов: изображений, видео, резервных копий, загрузок пользователей, артефактов сборки. Оно использует тот же API, что и Amazon S3, поэтому большинство инструментов и SDK для S3 работают с ним без изменений. Главное отличие — в ценообразовании: R2 берёт плату за хранение и операции, но без платы за исходящий трафик, так что отдача данных наружу бесплатна.
Сильные стороны
- Нулевая плата за исходящий трафик — серьёзная экономия для приложений с большим объёмом медиа или загрузок.
- S3-совместимый API, поэтому существующие инструменты и библиотеки просто работают.
- Привязывается напрямую к Worker для чтения и записи без хранения учётных данных в коде.
- Может работать за CDN Cloudflare для быстрой кэшированной отдачи.
- Масштабируется до больших объектов и больших бакетов без предварительного выделения ресурсов.
Компромиссы
- Это объектное хранилище, а не файловая система или база данных — нет запросов к содержимому файлов.
- Операции (PUT/GET/LIST) тарифицируются, поэтому частые обращения накапливаются в стоимости.
- Строгая согласованность и набор возможностей отличаются в деталях от S3; проверяйте граничные случаи.
- Для крошечных, часто изменяемых значений KV или D1 подойдут лучше.
Когда использовать
Используйте R2 для пользовательских загрузок, сгенерированных файлов, крупных статических ресурсов, экспортов данных и резервных копий — особенно там, где расходы на трафик в S3 были бы болезненными.
Подходит для vibe coding
R2 хорошо сочетается со сборками под управлением ИИ, потому что привязка избавляет от обычной возни с учётными данными — агент пишет напрямую в env.BUCKET. Скажите агенту, публичные ли файлы (отдача через Worker или собственный домен) или приватные (подписанный доступ), чтобы он правильно настроил доставку. В примере привязывается бакет и загружается файл из CLI.
# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png