Файлы — картинки, документы, бэкапы, статику сайта — в облаке не держат на диске виртуальной машины. Для этого есть объектное хранилище: отдельный сервис, который хранит сколько угодно файлов, доступен по сети и не требует своего сервера. В Yandex Cloud это Object Storage. Разберём основы; более общий разбор модели, применимый к любому S3-совместимому хранилищу, — в разделе Object storage (S3).

Бакет, объект, ключ

В объектном хранилище нет привычных папок и файлов. Модель проще и другая:

  • Бакет (bucket) — контейнер верхнего уровня, куда складывают объекты. Имя бакета уникально.
  • Объект — сам файл вместе с метаданными.
  • Ключ (key) — строка-идентификатор объекта внутри бакета, например images/2026/logo.png. Слэши в ключе выглядят как папки, но это просто часть имени: настоящей иерархии каталогов нет, пространство плоское.

Доступ — только через HTTP API, не как к диску: объект читается и пишется целиком, нет операций «дописать в середину». Именно поэтому объектное хранилище масштабируется до огромных объёмов.

S3-совместимый API

Ключевое удобство: Object Storage совместим с Amazon S3 по API. Это значит, что подходят те же библиотеки, инструменты и подходы, что и для AWS S3, — нужно лишь указать адрес хранилища Yandex Cloud (storage.yandexcloud.net). Разработчику, знакомому с S3, переучиваться не нужно; как это подключить из кода — в статье про интеграцию со Spring Boot.

Классы хранения

Одни данные читают постоянно, другие лежат годами «на всякий случай». Держать всё одинаково — переплачивать. Поэтому у объектов есть класс хранения:

  • Стандартный — для данных, которые часто читают: дороже за хранение, дёшево и быстро читать.
  • Холодный — для редкого доступа: дешевле хранить, но дороже и чуть дольше читать.
  • Ледяной — для архива, к которому почти не обращаются: копейки за хранение, но доступ медленный и с доплатой.

Логика простая: горячие данные — в стандартном классе, холодные (логи годовой давности, старые бэкапы) — в дешёвых. Делать это вручную необязательно: настраиваются lifecycle-правила, которые сами переносят объекты в холодные классы по возрасту и удаляют совсем старые.

Версионирование и доступ

Версионирование — если включить, при перезаписи или удалении объекта старая версия сохраняется. Это спасает от случайного затирания и от «объект удалили по ошибке». Плата — за хранение всех версий, поэтому в паре с ним настраивают lifecycle-правило, чистящее старые версии.

Доступ к бакету бывает приватным (по умолчанию — только по правам IAM или ключам доступа) и публичным (объекты открыты по прямой ссылке — так раздают статику сайта). Для того чтобы дать временную ссылку на приватный объект (например, «скачать отчёт в течение часа»), используют presigned URL — подписанную ссылку с ограниченным сроком жизни, без раздачи прав.

Из чего складывается стоимость

Счёт за Object Storage складывается из трёх частей:

  • хранение — за гигабайты в месяц (зависит от класса: ледяной в разы дешевле стандартного);
  • запросы — за количество операций чтения/записи;
  • исходящий трафик — за данные, отдаваемые наружу.

Самая коварная статья — исходящий трафик: на раздаче популярной статики он растёт незаметно. Здесь помогает CDN (сеть доставки контента) перед хранилищем — она кэширует файлы ближе к пользователю и снижает и задержку, и трафик из хранилища.

Где это применяется

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

Типичные ошибки новичков:

  • держат файлы на диске виртуальной машины — теряют их при пересоздании машины и не могут масштабировать;
  • раздают всё через приложение вместо прямых ссылок или CDN — грузят сервис и переплачивают за трафик;
  • делают бакет публичным целиком по ошибке — открывают наружу приватные данные;
  • не настраивают lifecycle — платят за стандартный класс даже за холодный архив.

Что учить дальше: общая модель S3 глубже — в разделе Object storage (S3); как читать и писать объекты из кода — в интеграции со Spring Boot; дешёвые классы и трафик — часть оптимизации затрат.