~/VibeHandbook
PDF бесплатно

Cloudflare

developers.cloudflare.com

R2

Что это

Представьте огромный онлайн-склад, куда вы сдаёте коробки с файлами, а потом забираете их обратно. R2 — это объектное хранилище Cloudflare, тот самый склад, место для размещения файлов: изображений, видео, резервных копий, загрузок пользователей, артефактов сборки. Оно использует тот же (программный интерфейс, набор команд, которыми инструменты общаются с ним), что и Amazon S3, поэтому большинство инструментов и SDK (наборов средств разработки, готовых библиотек кода) для S3 работают с ним без изменений. Главное отличие — в ценообразовании: R2 берёт плату за хранение и операции, но без платы за исходящий трафик (плата за уход данных со склада не взимается), так что отдача данных наружу бесплатна.

Сильные стороны

  • Нулевая плата за исходящий трафик — серьёзная экономия для приложений с большим объёмом медиа или загрузок.
  • S3-совместимый API, поэтому существующие инструменты и библиотеки просто работают.
  • Привязывается напрямую к Worker для чтения и записи без хранения учётных данных в коде.
  • Может работать за CDN (сетью доставки контента, набором серверов по всему миру, которые держат копии файлов рядом с каждым посетителем) Cloudflare для быстрой кэшированной отдачи.
  • Масштабируется до больших объектов и больших бакетов без предварительного выделения ресурсов.

Компромиссы

  • Это объектное хранилище, а не файловая система или база данных — нет запросов к содержимому файлов.
  • Операции (PUT/GET/LIST) тарифицируются, поэтому частые обращения накапливаются в стоимости.
  • Строгая согласованность и набор возможностей отличаются в деталях от S3; проверяйте граничные случаи.
  • Для крошечных, часто изменяемых значений KV (хранилище «ключ-значение», как огромный словарь) или D1 (SQL-база данных) подойдут лучше.

Когда использовать

Используйте R2 для пользовательских загрузок, сгенерированных файлов, крупных статических ресурсов, экспортов данных и резервных копий — особенно там, где расходы на трафик в S3 были бы болезненными.

Подходит для vibe coding

R2 хорошо сочетается со сборками под управлением ИИ, потому что привязка избавляет от обычной возни с учётными данными — агент пишет напрямую в env.BUCKET. Скажите агенту, публичные ли файлы (отдача через Worker или собственный домен) или приватные (подписанный доступ), чтобы он правильно настроил доставку. В примере привязывается бакет и загружается файл из .

# 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