База знаний
Как выбрать управляемое S3-хранилище: российские и зарубежные варианты
Практическое руководство по выбору S3-хранилища: российские и зарубежные сервисы, расходы, совместимость, риски оплаты и тест перед миграцией.
СейчасКороткий выбор по сценарию
Управляемое S3-хранилище подходит для файлов приложений, медиаконтента, архивов и резервных копий. Это руководство помогает выбрать сервис по реальному сценарию, посчитать полную стоимость и проверить совместимость до переноса данных.
Содержание
- Короткий выбор по сценарию
- Что означает совместимость с S3
- Сравнение провайдеров
- Как считать полную стоимость
- Юридические и операционные ограничения
- Базовый smoke test через AWS CLI
- Расширенная проверка совместимости
- Защита данных и выход из сервиса
- Финальный чеклист
Короткий выбор по сценарию
Это отправные точки для тестирования, а не рейтинг победителей.
- Российский сайт или приложение: начните с Selectel, Yandex Object Storage, Timeweb Cloud и VK Object Storage. Смотрите на близость к вычислительной инфраструктуре, оплату, API и стоимость выдачи файлов.
- Корпоративный проект: добавьте Cloud.ru и MWS. Запросите SLA, размещение данных, журналирование, поддержку и условия неизменяемого хранения.
- Резервная копия: для российского контура сравните холодные классы Selectel и Yandex. Для независимой зарубежной копии проверьте Backblaze B2, Wasabi и Hetzner.
- Международная раздача контента: сравните Cloudflare R2, DigitalOcean Spaces и хранилище рядом с вашим CDN. Для пользователей в России обязательно протестируйте реальный маршрут доставки.
- Максимальная полнота S3 API и экосистемы: используйте Amazon S3 как контрольную точку сравнения.
Что означает совместимость с S3
Amazon S3 — объектное хранилище и набор API, ставший отраслевым стандартом. Данные хранятся как объекты внутри бакетов. У каждого объекта есть ключ, содержимое и метаданные.
S3-совместимые сервисы позволяют подключать AWS CLI, SDK, rclone, restic, Kopia и приложения с настраиваемым endpoint. Совместимость бывает неполной. Провайдер может не поддерживать Object Lock, события бакета, отдельные политики доступа, CORS, lifecycle или некоторые варианты multipart upload.
Перед сравнением зафиксируйте:
- объём и средний размер объектов;
- число загрузок и чтений в месяц;
- объём выдачи в интернет;
- срок хранения и частоту удаления;
- обязательные методы API;
- требования к региону, локализации и трансграничной передаче;
- целевые RPO и RTO для резервных копий;
- способ массовой выгрузки при смене провайдера.
Сравнение провайдеров
| Сервис | Основной сценарий | Критичное ограничение | Что проверить из России |
| Selectel | Российские приложения, медиа, бэкапы | Стандартный, холодный и ледяной классы доступны не во всех регионах и пулах; версии объектов увеличивают оплачиваемый объём | Регион, класс хранения, цена API и исходящего трафика |
| Yandex Object Storage | Проекты внутри Yandex Cloud | Для ледяного класса минимальный оплачиваемый срок объекта — 12 месяцев | Тариф региона, lifecycle и стоимость операций |
| VK Object Storage | Проекты внутри VK Cloud | Полноту API нужно сверять с используемым приложением | Endpoint, ключи, AWS CLI и необходимые методы |
| Timeweb Cloud S3 | Небольшие проекты, сайты, архивы | Поддерживаются S3- и Swift-инструменты; параметры подключения зависят от бакета | AWS Signature, endpoint, rclone и тариф выдачи |
| Cloud.ru Evolution | Корпоративная инфраструктура и большие данные | Отдельно тарифицируются хранение, API-запросы и исходящий трафик | Класс размещения, SLA, документы и итоговый расчёт |
| MWS Object Storage | Корпоративные проекты в российском облаке | MWS заявляет хранение в нескольких дата-центрах, 11 девяток надёжности и SLA 99,95%; проверяйте условия договора | Матрицу методов API, поддержку Object Lock и тариф восстановления |
| Amazon S3 | Максимальная функциональность и проекты в AWS | Сложная тарификация: хранение, запросы, извлечение и трафик зависят от класса и региона | Регистрацию, оплату и доступность аккаунта |
| Backblaze B2 | Бэкапы, архивы, медиаколлекции | Бесплатный egress ограничен тройным средним месячным объёмом хранения; сверх лимита действует тариф | Регистрацию, оплату и совместимость приложения с B2 S3 API |
| Wasabi | Долгоживущие бэкапы и архивы | Для Pay as You Go минимальный срок — 90 дней; бесплатный egress рассчитан на месячную выгрузку не выше активного объёма хранения | Платёж, регион и соответствие политике допустимой нагрузки |
| Cloudflare R2 | Международная выдача файлов и приложения Cloudflare | Egress бесплатен, но Infrequent Access тарифицирует извлечение; в России Cloudflare фиксирует систематическое замедление трафика | Доступность конкретного домена и endpoint у разных операторов |
| Hetzner Object Storage | Европейские проекты и бэкапы | Поддержка функций шире базового S3, но доступность и регистрацию нужно проверять для конкретного клиента | Верификацию, оплату и сетевой маршрут |
| DigitalOcean Spaces | Веб-проекты внутри DigitalOcean | CDN относится к Standard Storage. Cold Storage не поддерживает CDN, CORS, bucket policies и статический хостинг; минимальный срок — 30 дней | Регистрацию, оплату и доступность CDN |
| Scaleway Object Storage | Европейское S3-хранилище и lifecycle | Для перехода в холодные классы действуют минимальные сроки: 30 дней для Standard One Zone и 90 дней для Glacier | Регистрацию, оплату, регион и сетевую доступность |
Как считать полную стоимость
Используйте один сценарий для всех кандидатов. Иначе дешёвый гигабайт скрывает дорогую выдачу или операции.
Стоимость месяца = хранение
+ операции записи и чтения
+ исходящий трафик
+ извлечение из холодного класса
+ раннее удаление
+ старые версии объектов
+ минимальный платёжДля первого расчёта подойдёт такой профиль:
- среднее хранение: 2 ТБ;
- выдача в интернет: 300 ГБ в месяц;
- 500 000 операций записи;
- 5 млн операций чтения;
- 10% объектов обновляются или удаляются ежемесячно;
- крупный файл для проверки multipart: от 6 ГБ;
- восстановление всего объёма: один раз в год.
| Строка расчёта | Что подставить |
| Хранение | 2 048 ГБ × цена класса |
| Операции | 500 000 PUT/LIST и 5 млн GET/HEAD по тарифу провайдера |
| Выдача | 300 ГБ минус бесплатная квота |
| Извлечение | Объём чтения из холодного класса × тариф retrieval |
| Раннее удаление | Обновляемый объём × оставшийся минимальный срок |
| Аварийное восстановление | Стоимость полной выгрузки 2 ТБ и ожидаемое время |
Запишите две суммы: обычный месяц и месяц полного восстановления. Для бэкапа вторая цифра важнее первой.
Юридические и операционные ограничения
Российская или зарубежная юрисдикция сама по себе не отвечает на вопрос, можно ли хранить конкретные данные. Для проекта с персональными данными определите:
- кто является оператором данных;
- где выполняется первичная запись и хранение;
- допустима ли трансграничная передача;
- какие данные можно обезличить или зашифровать до отправки;
- распространяются ли требования на резервные копии и журналы;
- кто имеет доступ к ключам расшифровки.
Для зарубежного сервиса проведите отдельный операционный тест: создайте аккаунт, привяжите допустимый способ оплаты, получите счёт, загрузите небольшой объект и скачайте его через сеть реального пользователя. Публичная страница тарифа не подтверждает, что весь этот маршрут доступен именно вам.
Базовый smoke test через AWS CLI
Тест проверяет PutObject, HeadObject, GetObject, presigned GET, целостность и удаление. Бакет должен быть создан заранее. Используйте отдельный профиль и тестовые ключи с минимальными правами.
export AWS_PROFILE="s3-test"
export S3_ENDPOINT="https://s3.example-provider.ru"
export S3_REGION="provider-region"
export S3_BUCKET="s3-compatibility-test"
aws configure --profile "$AWS_PROFILE"В aws configure укажите тестовые Access Key ID и Secret Access Key, затем значение региона из документации провайдера. Некоторые сервисы требуют path-style addressing. Настраивайте его только по официальной инструкции выбранного endpoint.
Создайте и загрузите файл:
printf "s3 compatibility test\n" > healthcheck.txt
aws s3api put-object \
--profile "$AWS_PROFILE" \
--region "$S3_REGION" \
--endpoint-url "$S3_ENDPOINT" \
--bucket "$S3_BUCKET" \
--key "checks/healthcheck.txt" \
--body "./healthcheck.txt"Проверьте метаданные и скачайте объект:
aws s3api head-object \
--profile "$AWS_PROFILE" \
--region "$S3_REGION" \
--endpoint-url "$S3_ENDPOINT" \
--bucket "$S3_BUCKET" \
--key "checks/healthcheck.txt"
aws s3api get-object \
--profile "$AWS_PROFILE" \
--region "$S3_REGION" \
--endpoint-url "$S3_ENDPOINT" \
--bucket "$S3_BUCKET" \
--key "checks/healthcheck.txt" \
downloaded-healthcheck.txt
cmp healthcheck.txt downloaded-healthcheck.txt && echo "download OK"Создайте подписанную ссылку и проверьте её из другой сети:
S3_URL="$(aws s3 presign \
"s3://$S3_BUCKET/checks/healthcheck.txt" \
--profile "$AWS_PROFILE" \
--region "$S3_REGION" \
--endpoint-url "$S3_ENDPOINT" \
--expires-in 300)"
curl -fL "$S3_URL" -o presigned-healthcheck.txt
cmp healthcheck.txt presigned-healthcheck.txt && echo "presigned URL OK"Удалите тестовый объект:
aws s3api delete-object \
--profile "$AWS_PROFILE" \
--region "$S3_REGION" \
--endpoint-url "$S3_ENDPOINT" \
--bucket "$S3_BUCKET" \
--key "checks/healthcheck.txt"
rm -f healthcheck.txt downloaded-healthcheck.txt presigned-healthcheck.txtПризнак успеха: обе команды cmp завершаются без расхождений, ссылка открывается из нужной сети, а объект удаляется без ошибки.
Расширенная проверка совместимости
Базовый тест не подтверждает полную совместимость. Проверьте только функции, которые действительно использует ваш продукт.
| Функция | Как проверить | Признак успеха |
| Multipart upload | Загрузить файл больше 5 ГБ используемым SDK или клиентом | Загрузка возобновляется после обрыва, объект скачивается без повреждений |
| Версионирование | Загрузить две версии одного ключа и восстановить первую | Обе версии доступны по version ID |
| Lifecycle | Создать правило на тестовом префиксе | Правило принимается API и применяется в заявленный срок |
| CORS | Выполнить браузерную загрузку с тестового домена | Preflight и основной запрос проходят без ошибки |
| Object Lock | Включить на отдельном бакете с коротким retention | Объект нельзя удалить до истечения срока |
| Range GET | Запросить диапазон байтов большого файла | Возвращается HTTP 206 и правильный фрагмент |
| Массовая выгрузка | Скопировать тестовый набор через rclone или штатный клиент | Совпадают число объектов, размер и контрольные суммы |
| Сетевая доступность | Повторить чтение у нужных операторов и из серверного региона | Нет блокировок, а задержка и скорость укладываются в требования |
Защита данных и выход из сервиса
Управляемое S3 не является единственной резервной копией. Для критичных данных используйте версионирование, отдельные ключи, журналирование, Object Lock или другой механизм неизменяемости, а также независимую копию у второго провайдера.
Рабочая базовая схема:
flowchart LR
A["Рабочие данные"] --> B["Основное S3"]
A --> C["Локальная или NAS-копия"]
B --> D["Независимое S3 другого провайдера"]
C --> E["Регулярный тест восстановления"]
D --> EДо запуска зафиксируйте план выхода:
- Чем выгружается весь бакет.
- Сколько стоит полный egress.
- Сколько времени займёт перенос.
- Как проверить количество объектов и контрольные суммы.
- Как отозвать ключи после миграции.
- Как удалить данные и получить подтверждение удаления.
Второй бакет в том же аккаунте не защищает от блокировки аккаунта, ошибки администратора или компрометации главного ключа.
Финальный чеклист
По теме
Следующий шаг
Правило 3-2-1: рабочая схема резервного копирования
Связанные материалы
- Статья: Как мы с Codex превратили хаос серверов в карту управляемой инфраструктуры
- Блог: Данные важнее модели
- База знаний: Seafile — self-hosted файловое хранилище с синхронизацией, версионированием и S3-бэкендом
Если вы выбираете хранилище для рабочего проекта, полезно заранее проверить стоимость полного восстановления, сетевую доступность и возможность уйти к другому провайдеру.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Справочник по Model Context Protocol: архитектура, примитивы, транспорты, популярные серверы и клиенты, примеры использования и ссылки на спецификацию.