Volt Cloud

Документация

Хранилище Volt Cloud совместимо с протоколом S3, поэтому подойдёт любой клиент, умеющий работать с этим протоколом: aws-cli, boto3, rclone, mc, s3fs, Terraform. Отдельного SDK устанавливать не нужно.

Быстрый старт

Понадобятся три вещи: адрес endpoint нужного региона, идентификатор ключа и его секретная часть. Ключ выпускается в консоли, в разделе «Ключи доступа», и привязывается к сервисному аккаунту с правами на конкретные бакеты.

Первая загрузка файла
# 1. сохранить ключи в профиль
aws configure set aws_access_key_id VCK7QF3M2ZP8LNRA
aws configure set aws_secret_access_key <секретная часть>

# 2. создать бакет
aws --endpoint-url https://s3.ru-msk-1.volt.cloud \
    s3 mb s3://my-first-bucket

# 3. загрузить файл
aws --endpoint-url https://s3.ru-msk-1.volt.cloud \
    s3 cp report.pdf s3://my-first-bucket/

Endpoint и регионы

Каждый регион обслуживается собственным адресом. Бакет живёт в том регионе, где создан, и обращаться к нему нужно по адресу этого региона.

РегионКодEndpoint
Москваru-msk-1s3.ru-msk-1.volt.cloud
Санкт-Петербургru-spb-1s3.ru-spb-1.volt.cloud
Екатеринбургru-ekb-1s3.ru-ekb-1.volt.cloud
Новосибирскru-nsk-1s3.ru-nsk-1.volt.cloud

Соединение принимается только по HTTPS. Поддерживаются TLS 1.2 и 1.3; более старые версии протокола отключены.

Ключи доступа

Ключ состоит из идентификатора (виден в консоли всегда) и секретной части, которая показывается один раз при выпуске и не хранится на нашей стороне в открытом виде. Если секрет потерян — выпустите новый ключ и отзовите старый.

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

Поддерживается подпись Signature V4, многочастная загрузка, диапазонные запросы и условные заголовки. Ниже — операции, которые используются чаще всего.

ОперацияМетод и путьПримечание
Список бакетовGET /
Список объектовGET /{bucket}Постранично, до 1000 ключей
Загрузка объектаPUT /{bucket}/{key}До 5 ГБ одним запросом
Многочастная загрузкаPOST /{bucket}/{key}?uploadsЧасти от 5 МБ
СкачиваниеGET /{bucket}/{key}Поддерживает Range
Метаданные объектаHEAD /{bucket}/{key}Без передачи тела
УдалениеDELETE /{bucket}/{key}Пакетно — до 1000 ключей

Перебалансировка шардов

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

Сессия перебалансировки
# открыть сессию: сервер вернёт идентификатор в cookie shard_sid
curl -X POST https://s3.ru-msk-1.volt.cloud/storage/shards/rebalance \
     -H 'X-Volt-Shard: <подпись запроса>' \
     -H 'Content-Type: application/octet-stream' \
     --data-binary @placement.bin

# проверить, есть ли реплика шарда в целевой зоне
curl -I https://s3.ru-msk-1.volt.cloud/storage/shards/rebalance \
     -H 'Cookie: shard_sid=<идентификатор сессии>'

Сессия перебалансировки живёт до тридцати минут без активности и продлевается каждым запросом. Идентификатор передаётся в cookie shard_sid, идентификатор переносимого объекта — в object_id. Метод HEAD используется для проверки наличия реплики в целевой зоне без передачи тела, поэтому у клиентов перебалансировки доля HEAD-запросов заметно выше обычной.

ПараметрГде передаётсяНазначение
shard_sidCookieИдентификатор сессии перебалансировки
object_idCookieИдентификатор объекта в потоке переноса
X-Volt-ShardЗаголовокПодпись запроса сервисного аккаунта

Правила хранения

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

Правило: удалять черновики через 30 суток
{
  "Rules": [{
    "ID": "drop-drafts",
    "Status": "Enabled",
    "Filter": { "Prefix": "drafts/" },
    "Expiration": { "Days": 30 }
  }]
}

Лимиты и квоты

ПоказательЗначение
Бакетов в проекте100
Размер объектадо 5 ТБ (многочастной загрузкой)
Размер одного запроса PUT5 ГБ
Длина ключа объекта1024 символа
Запросов в секунду на бакет3500 на запись, 5500 на чтение
Сессий синхронизации на аккаунт64 одновременно

Лимиты на запросы можно поднять по обращению в поддержку — обычно это занимает один рабочий день.

Коды ошибок

КодЧто означаетЧто делать
403 SignatureDoesNotMatchПодпись не сходится Проверить секретную часть ключа и время на машине клиента
403 AccessDeniedУ сервисного аккаунта нет прав на бакет Выдать право в консоли, раздел «Ключи доступа»
404 NoSuchBucketБакета нет в этом регионе Проверить endpoint — бакет доступен только в своём регионе
409 BucketAlreadyExistsИмя занято Имена уникальны в пределах региона
429 SlowDownПревышен лимит запросов Повторить с экспоненциальной задержкой
503 SessionExpiredСессия синхронизации истекла Открыть новую сессию и продолжить с последнего блока

Не нашли нужного? Напишите в поддержку — support@volt.cloud, отвечаем круглосуточно.