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

API объектного хранилища

Хранилище реализует подмножество S3 API. Ниже — только то, что отличается от поведения AWS S3, и примеры под типовые задачи. Для всего остального применима документация вашего SDK.

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

Понадобится пара ключей из консоли (раздел Ключи доступа) и адрес эндпоинта.

bash
export AWS_ACCESS_KEY_ID=BDWJ7K2QX9...
export AWS_SECRET_ACCESS_KEY=••••••••••••
export AWS_DEFAULT_REGION=ru-1

# список бакетов
aws --endpoint-url https://private.bigdataweb.ru s3 ls

# загрузка каталога
aws --endpoint-url https://private.bigdataweb.ru \
    s3 sync ./build s3://static-assets/build/ --acl public-read

Совет: пропишите эндпоинт в ~/.aws/config секцией endpoint_url = https://private.bigdataweb.ru, чтобы не повторять флаг в каждой команде.

Аутентификация

Эндпоинты и регионы

НазначениеАдресПримечание
S3 APIhttps://private.bigdataweb.ruосновной эндпоинт, TLS 1.2+
Публичная раздачаhttps://private.bigdataweb.ru/cdn/<bucket>/<key>только объекты с public-read
Консольhttps://private.bigdataweb.ru/consoleвеб-интерфейс, доступ по приглашению
Регионru-1другие регионы не объявлены

Адресация только path-style: private.bigdataweb.ru/bucket/key. Virtual-hosted-style (bucket.private.bigdataweb.ru) не поддерживается — в SDK включайте forcePathStyle / addressing_style = path.

Совместимость API

BigDataWeb Storage реализует подмножество Amazon S3 API, достаточное для бэкапов, медиа и статики. Матрица ниже — фактическая поддержка на эндпоинте private.bigdataweb.ru. Неподдерживаемые вызовы возвращают 501 NotImplemented или 403 AccessDenied.

Группа / методСтатусПримечание
Аутентификация и транспорт
AWS Signature Version 4даобязательно
Signature Version 2нет403 InvalidRequest
Path-style адресацияда/bucket/key
Virtual-hosted-styleнетиспользуйте path-style
Бакеты
ListBuckets, CreateBucket, DeleteBucketдаудаление только пустого бакета
HeadBucket, GetBucketLocationдарегион всегда ru-1
PutBucketVersioning, GetBucketVersioningдаотключение необратимо
PutBucketLifecycle, GetBucketLifecycleдаexpiration, abort multipart
PutBucketAclчастичнотолько ACL уровня бакета
PutBucketPolicy, PutBucketCorsнет
Объекты
GetObject, PutObject, DeleteObjectдаметаданные x-amz-meta-*
HeadObject, CopyObjectдакопирование в пределах установки
ListObjectsV2даprefix, delimiter, continuation
Range / частичное чтениедаHTTP 206
PutObjectAclчастичноpublic-read для CDN-префикса
PutObjectTagging, GetObjectTaggingнет
Multipart
CreateMultipartUpload, UploadPartдадо 10 000 частей
CompleteMultipartUpload, AbortMultipartUploadда
ListMultipartUploads, ListPartsда
Presigned и версии
Presigned GET / PUTдадо 7 суток
Delete markers, ListObjectVersionsдапри включённом versioning
Не поддерживается
S3 Select, Glacier / Intelligent-Tieringнетхолодный класс — через lifecycle
Object Lock / WORM, Replicationнет
SNS / SQS / Event Notificationsнетaccess-логи в бакет — да
STS, IAM-политики, SSE-KMSнетключи доступа вместо IAM

Проверено с aws-cli 2.x, boto3, aws-sdk-js v3, rclone 1.6x, restic и django-storages. При расхождении с AWS S3 ориентируйтесь на эту таблицу, а не на документацию Amazon.

Бакеты

python · boto3
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://private.bigdataweb.ru",
    region_name="ru-1",
    config=boto3.session.Config(s3={"addressing_style": "path"}),
)

s3.create_bucket(Bucket="app-media")
s3.put_bucket_versioning(
    Bucket="app-media",
    VersioningConfiguration={"Status": "Enabled"},
)

Объекты и multipart

bash
# посмотреть «зависшие» загрузки
aws --endpoint-url https://private.bigdataweb.ru \
    s3api list-multipart-uploads --bucket project-backups

# прервать конкретную
aws --endpoint-url https://private.bigdataweb.ru \
    s3api abort-multipart-upload \
    --bucket project-backups --key dump.sql.gz \
    --upload-id 2~yQ8f...

Presigned-ссылки

Временные ссылки позволяют отдавать и принимать файлы напрямую, минуя бэкенд. Максимальный срок жизни — 7 суток, по умолчанию — 1 час.

python
# ссылка на скачивание
url = s3.generate_presigned_url(
    "get_object",
    Params={"Bucket": "app-media", "Key": "docs/report.pdf"},
    ExpiresIn=900,
)

# ссылка на загрузку от клиента
put_url = s3.generate_presigned_url(
    "put_object",
    Params={"Bucket": "uploads", "Key": "u/42/avatar.jpg",
            "ContentType": "image/jpeg"},
    ExpiresIn=300,
)

Lifecycle-политики

Правила применяются раз в сутки и работают по префиксу ключа и возрасту объекта.

lifecycle.json
{
  "Rules": [
    {
      "ID": "logs-90d",
      "Status": "Enabled",
      "Filter": { "Prefix": "logs/" },
      "Expiration": { "Days": 90 }
    },
    {
      "ID": "abort-stale-uploads",
      "Status": "Enabled",
      "Filter": { "Prefix": "" },
      "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
    }
  ]
}

rclone и бэкапы

~/.config/rclone/rclone.conf
[bdw]
type = s3
provider = Other
env_auth = false
access_key_id = BDWJ7K2QX9...
secret_access_key = ••••••••••••
endpoint = https://private.bigdataweb.ru
region = ru-1
force_path_style = true
chunk_size = 128M

Для restic используйте репозиторий вида s3:https://private.bigdataweb.ru/backups-restic.

Лимиты

ПараметрЗначениеИзменяется по запросу
Бакетов на аккаунт50да
Размер объекта5 ТБнет
Одиночный PUT5 ГБнет
Частей в multipart10 000нет
Запросов в секунду1 000 на аккаунтда
Полоса10 Гбит/с на аккаунтда
Срок presigned-ссылки7 сутокнет
Ключей доступа20 парда

Коды ошибок

HTTPКодЧто делать
400InvalidBucketNameИмя не соответствует правилам: только строчные буквы, цифры, дефис.
403SignatureDoesNotMatchПроверьте секретный ключ, регион ru-1 и path-style адресацию.
403RequestTimeTooSkewedЧасы клиента разошлись с сервером более чем на 15 минут.
404NoSuchKeyОбъект отсутствует либо удалён delete marker'ом при включённом версионировании.
409BucketNotEmptyУдалите объекты и прерванные multipart-загрузки.
429SlowDownПревышен лимит запросов. Включите экспоненциальный backoff в SDK.
503ServiceUnavailableВременная недоступность узла, повторите запрос. См. статус сервиса.

Не нашли нужного метода?

Напишите, какой вызов вам нужен — ответим, поддерживается ли он и когда появится.

support@bigdataweb.ru