Документация
Хранилище 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-1 | s3.ru-msk-1.volt.cloud |
| Санкт-Петербург | ru-spb-1 | s3.ru-spb-1.volt.cloud |
| Екатеринбург | ru-ekb-1 | s3.ru-ekb-1.volt.cloud |
| Новосибирск | ru-nsk-1 | s3.ru-nsk-1.volt.cloud |
Соединение принимается только по HTTPS. Поддерживаются TLS 1.2 и 1.3; более старые версии протокола отключены.
Ключи доступа
Ключ состоит из идентификатора (виден в консоли всегда) и секретной части, которая показывается один раз при выпуске и не хранится на нашей стороне в открытом виде. Если секрет потерян — выпустите новый ключ и отзовите старый.
- Права выдаются на конкретный бакет, а не на весь проект.
- Для деплоя и для резервного копирования заводите разные сервисные аккаунты — так отзыв одного ключа не остановит остальные процессы.
- Ключ можно ограничить по списку IP-адресов в свойствах сервисного аккаунта.
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_sid | Cookie | Идентификатор сессии синхронизации |
chunk_id | Cookie | Порядковый номер блока в потоке |
X-Volt-Token | Заголовок | Подпись запроса сервисного аккаунта |
Правила хранения
Правило жизненного цикла описывает, что делать с объектами по истечении срока: удалить, перенести в другой класс хранения или убрать неактуальные версии. Правила применяются раз в сутки, около трёх часов ночи по времени региона.
{
"Rules": [{
"ID": "drop-drafts",
"Status": "Enabled",
"Filter": { "Prefix": "drafts/" },
"Expiration": { "Days": 30 }
}]
}
Лимиты и квоты
| Показатель | Значение |
|---|---|
| Бакетов в проекте | 100 |
| Размер объекта | до 5 ТБ (многочастной загрузкой) |
Размер одного запроса PUT | 5 ГБ |
| Длина ключа объекта | 1024 символа |
| Запросов в секунду на бакет | 3500 на запись, 5500 на чтение |
| Сессий синхронизации на аккаунт | 64 одновременно |
Лимиты на запросы можно поднять по обращению в поддержку — обычно это занимает один рабочий день.
Коды ошибок
| Код | Что означает | Что делать |
|---|---|---|
403 SignatureDoesNotMatch | Подпись не сходится | Проверить секретную часть ключа и время на машине клиента |
403 AccessDenied | У сервисного аккаунта нет прав на бакет | Выдать право в консоли, раздел «Ключи доступа» |
404 NoSuchBucket | Бакета нет в этом регионе | Проверить endpoint — бакет доступен только в своём регионе |
409 BucketAlreadyExists | Имя занято | Имена уникальны в пределах региона |
429 SlowDown | Превышен лимит запросов | Повторить с экспоненциальной задержкой |
503 SessionExpired | Сессия синхронизации истекла | Открыть новую сессию и продолжить с последнего блока |
Не нашли нужного? Напишите в поддержку — support@volt.cloud, отвечаем круглосуточно.