Объектное хранилище S3
S3-совместимое хранилище для бэкапов, медиа и статики. Сейчас в статусе Beta — часть возможностей ещё дорабатывается.
Возможности хранилища
S3-совместимый API
Тот же протокол, что у Amazon S3: работают aws-cli, s3cmd, rclone, MinIO Client и любые SDK — boto3, aws-sdk-js, minio-go. В коде меняется только адрес эндпоинта и ключи, остальная логика загрузки и раздачи файлов остаётся как была.
Оплата за объём
Считается реально занятое место и трафик, а не размер купленного диска. Для проекта, у которого нагрузка растёт неравномерно, это дешевле фиксированного тарифа: вы не оплачиваете пустое место «на вырост».
Ключи доступа выдаются по запросу
Access key и secret key лежат в отдельном секрете и показываются в панели по требованию, а не хранятся в репозитории. Скомпрометированный ключ отзывается пересозданием секрета, без правок кода приложения.
Данные в России
Бакеты живут на серверах в РФ. Для проектов, которые хранят пользовательские файлы — документы, сканы, аватарки — это то же требование 152-ФЗ, что и для баз данных, только про файлы про него часто забывают.
Бэкапы приложений и баз
Хранилище — типовое место для дампов Postgres и архивов сборок. Резервные копии баз выгружаются в бакет и скачиваются по временной ссылке, отдельный файловый сервер под это поднимать не нужно.
Раздача статики и медиа
Картинки, видео и загруженные пользователями файлы отдаются напрямую из хранилища, не занимая диск и память самого приложения. Приложение остаётся stateless, и его можно перезапускать и масштабировать без риска потерять файлы.
Как начать хранить файлы в S3
Четыре шага до первого объекта в бакете.
Создайте бакет
Имя, проект и режим доступа: публичный для статики или приватный для документов. Бакет разворачивается на серверах в РФ.
Получите ключи
Access key и secret key показываются в панели по запросу — они лежат в отдельном секрете подключения, а не в репозитории. В приложение попадают переменными окружения.
Подставьте эндпоинт в клиент
В boto3, aws-sdk-js, minio-go, rclone или aws-cli меняется только адрес эндпоинта и ключи. Остальной код загрузки и раздачи файлов остаётся как был: протокол тот же, что у Amazon S3.
Отдавайте файлы напрямую
Публичные объекты доступны по прямой ссылке, приватные — по временной подписанной. Приложение перестаёт держать файлы на своём диске и остаётся stateless: его можно перезапускать и масштабировать без риска потерять загрузки.
Что обычно кладут в хранилище
Четыре типовых сценария, с которых начинают почти все проекты.
Загрузки пользователей
Аватарки, документы, сканы, вложения. Локальный диск контейнера стирается при каждой сборке, поэтому единственное надёжное место для пользовательских файлов — объектное хранилище.
Бэкапы баз данных
Дампы управляемого PostgreSQL уезжают в бакет и скачиваются по временной ссылке. Хранение копий отдельно от самой базы — правило, которое спасает при потере инстанса.
Статика и медиа
Картинки, видео и собранные ассеты отдаются из хранилища, не занимая память приложения. Трафик на тяжёлые файлы не упирается в лимиты одного контейнера.
Артефакты сборок и отчёты
Архивы релизов, экспорты и выгрузки для аналитики. Оплата идёт за реально занятое место, поэтому редко используемые архивы не тянут за собой фиксированный тариф диска.
Что учесть до переезда файлов
Хранилище в статусе Beta — вот честный список ограничений.
Beta означает Beta
Создание бакетов и работа по S3-протоколу уже работают, часть возможностей дорабатывается. Для бэкапов, статики и пользовательских загрузок пригодно, для единственной копии критичных данных — пока нет.
CDN пока не встроен
Файлы отдаются напрямую из хранилища. Для проекта с российской аудиторией этого обычно достаточно, но глобальную раздачу с краевых узлов сейчас нужно строить отдельно.
Версионирования объектов нет
Перезапись объекта заменяет его. Если нужна история версий файла, храните её ключами с датой или отдельными бакетами — восстановить перезаписанный объект платформа не сможет.
Ключи дают доступ ко всему бакету
Гранулярные политики уровня Amazon IAM пока не поддерживаются. Разграничивать доступ проще отдельными бакетами под разные задачи: публичная статика, приватные документы, бэкапы.
Трафик считается
Оплата идёт за занятое место и трафик. Раздача тяжёлого видео напрямую пользователям — рабочий сценарий, но её стоит посчитать заранее, а не обнаружить в счёте.
Вопросы об объектном хранилище
В статусе Beta. Создание S3-совместимых бакетов работает, часть возможностей ещё дорабатывается. Не закладывайте его в критичные сценарии, пока хранилище не вышло из беты — для бэкапов и статики оно уже пригодно, для единственной копии важных данных пока нет.
Поднимите backend из GitHub сегодня
Подключение репозитория занимает минуту. Платите только за то, что реально потребляете.
Создать аккаунт