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-spb-1.volt.cloud \
    s3 mb s3://my-first-bucket

# 3. загрузить файл
aws --endpoint-url https://s3.ru-spb-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 vault_sid
curl -X POST https://s3.ru-spb-1.volt.cloud/storage/blocks/sync \
     -H 'X-Volt-Token: <подпись запроса>' \
     -H 'Content-Type: application/octet-stream' \
     --data-binary @manifest.bin

# проверить, какие блоки уже есть на стороне хранилища
curl -I https://s3.ru-spb-1.volt.cloud/storage/blocks/sync \
     -H 'Cookie: vault_sid=<идентификатор сессии>'

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

ПараметрГде передаётсяНазначение
vault_sidCookieИдентификатор сессии синхронизации
chunk_idCookieПорядковый номер блока в потоке
X-Volt-TokenЗаголовокПодпись запроса сервисного аккаунта

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

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

Правило: удалять черновики через 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, отвечаем круглосуточно.