S3 STORAGE · BETA

Место для файлов.Отдельно от кода.

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

Бета-версия. Для критичных данных держите ещё одну копию. Оплачиваются занятый объём и трафик.

КАК ЭТО УСТРОЕНО
Файлы хранятся отдельно от приложения.
01

Привычные инструменты

Подключите aws-cli, rclone, boto3 или другой S3-клиент. Замените endpoint и ключи, сохраните код загрузки файлов.

02

Файлы переживут деплой

Храните загрузки и бэкапы вне контейнера. Пересборка приложения не удалит объекты из бакета.

03

Доступ — по вашей задаче

Прямые ссылки для публичных файлов, временные подписанные ссылки — для личных документов.

НАЧАТЬ РАБОТУ

От бакета — к первому файлу.

  1. 01

    Создайте бакет

    Выберите имя, проект и режим доступа: публичный или приватный. Данные будут храниться на серверах в России.

  2. 02

    Подключите S3-клиент

    Получите endpoint и ключи доступа в консоли. Передайте ключи приложению через переменные окружения, не добавляя их в репозиторий.

  3. 03

    Загружайте и делитесь

    Отправляйте файлы через S3-совместимый SDK или CLI. Используйте публичные URL или подписанные ссылки с ограниченным сроком действия.

Учитывайте ограничения

S3-бакеты доступны в бета-версии. Встроенного CDN, версионирования объектов и детальных IAM-политик пока нет.

Beta означает Beta

Создание бакетов и работа по S3-протоколу уже работают, часть возможностей дорабатывается. Для бэкапов, статики и пользовательских загрузок пригодно, для единственной копии критичных данных — пока нет.

CDN пока не встроен

Файлы отдаются напрямую из хранилища. Для проекта с российской аудиторией этого обычно достаточно, но глобальную раздачу с краевых узлов сейчас нужно строить отдельно.

Версионирования объектов нет

Перезапись объекта заменяет его. Если нужна история версий файла, храните её ключами с датой или отдельными бакетами — восстановить перезаписанный объект платформа не сможет.

Ключи дают доступ ко всему бакету

Гранулярные политики уровня Amazon IAM пока не поддерживаются. Разграничивать доступ проще отдельными бакетами под разные задачи: публичная статика, приватные документы, бэкапы.

Трафик считается

Оплата идёт за занятое место и трафик. Раздача тяжёлого видео напрямую пользователям — рабочий сценарий, но её стоит посчитать заранее, а не обнаружить в счёте.

Вопросы об объектном хранилище

В каком статусе сейчас объектное хранилище?

В статусе Beta. Создание S3-совместимых бакетов работает, часть возможностей ещё дорабатывается. Не закладывайте его в критичные сценарии, пока хранилище не вышло из беты — для бэкапов и статики оно уже пригодно, для единственной копии важных данных пока нет.

С какими инструментами оно совместимо?

API S3-совместимый, поэтому работают привычные инструменты: aws-cli, s3cmd, rclone, MinIO Client и SDK для Python, Node.js, Go, PHP. Достаточно указать в конфигурации адрес эндпоинта платформы вместо адреса Amazon.

Как считается оплата?

По объёму: вы платите за реально занятое место и трафик, а не за фиксированный тариф диска. Пустой бакет не стоит ничего, а расход растёт вместе с реальными данными.

Где взять ключи доступа?

Access key и secret key выдаются в панели по запросу — они лежат в отдельном секрете подключения. Класть их в репозиторий не нужно: в приложение они попадают переменными окружения.

Ещё вопросы
Можно ли раздавать файлы напрямую пользователям?

Да. Публичные объекты отдаются по прямой ссылке, приватные — по временной подписанной ссылке с ограниченным сроком жизни. Второй вариант используют для документов и всего, что не должно индексироваться поисковиками.

Подходит ли хранилище для бэкапов баз данных?

Да, это основной сценарий. Дампы управляемого PostgreSQL складываются в бакет, а скачать их можно по временной ссылке из панели. Хранение бэкапов отдельно от самой базы — правило, которое спасает при потере инстанса.

Где физически лежат данные?

На серверах в России. Если приложение хранит файлы пользователей-россиян, это тот же вопрос 152-ФЗ, что и с базой данных: про базу помнят все, про загруженные файлы — почти никто.

Есть ли ограничение на размер файла?

Крупные файлы загружаются составной загрузкой (multipart upload), которую поддерживают все совместимые клиенты, — так же, как в любом S3-хранилище. Для отдачи больших медиафайлов это штатный режим, а не обходной путь.

Можно ли смонтировать бакет как диск приложения?

Нет, и это осознанно. Хранилище работает по HTTP-протоколу S3: приложение обращается к нему клиентом, а не через файловую систему. Нужен именно диск, который виден как каталог, — для приложения подключается постоянный том, это отдельный ресурс.

Что происходит с файлами при пересборке приложения?

Ничего: объекты в бакете живут отдельно от контейнера. Именно поэтому загрузки пользователей и складывают в хранилище — локальный диск контейнера стирается при каждой сборке, и всё, что лежало рядом с кодом, исчезает вместе с ним.

Как перенести файлы из другого S3?

Через rclone или aws-cli: указываете два эндпоинта и синхронизируете бакеты напрямую, скачивать всё к себе на ноутбук не нужно. Протокол одинаковый, поэтому перенос — это одна команда и время на трафик.