Загрузка и скачивание файлов с объектного хранилища Selectel

Tags: облачные технологии , Selectel , S3

Published 25 августа 2024 г. 8:51

Доброго времени суток, дорогой читатель! Не так давно мне необходимо было настроить загрузку файлов в объектное хранилище одного из российских провайдеров облачных решений Selectel. Признаюсь честно, это было весьма интересно, попробовать отечественное решение для своего пет проекта и во время этого эксперимента я обнаружила некоторые неочевидные моменты 👀.

Итак, начнём!

Прежде всего необходимо создать хранилище, учитывая особенности использования данных. Так как мне необходимо было лишь редко использовать хранилище по сети, я выбрала холодное хранения. Подробнее про особенности хранения можно посмотреть здесь

Хранилище есть, осталось настроить к нему доступ через API. Хотя конечно можно и с помощью веб-интерфейса файлы загружать, но здесь рекомендуется грузить файлы не более 1 ГБ.

Для работы с хранилищем использовалась библиотека boto3. Делаем s3 клиента:

И здесь начинается забавная вещь. Нам необходимо указать endpoint_url, и если мы зайдем в панель хранилища, то увидим следующее:

Здесь указан тип адресации, который необходимо использовать для API. Можно заметить, что Virtual-Hosted адресацию нельзя отключить.

Если указать в endpoint_url данный адрес, то вы сможете загружать файлы в ваше хранилище без проблем. Но если вам нужно скачать файлы с хранилища:

,

использовать ту же конфигурацию клиента не получится. При попытке скачивания файла получим ошибку NoSuchKey.


Дисклеймер:

Вы также можете получить ошибку SSL сертификата, для этого необходимо установить библиотеку certifi


Заходим в документацию и видим следующее:

Меняем endpoint_url:

И спокойно скачиваем файл с хранилища!

PS:

При virtual-hosted адресации название контейнера уже включено в url, поэтому имя bucket'а будет другим. Допустим, у вас есть контейнер с именем my_container, внутри лежат папки с префиксами data1/files/..., data1/files2/..., и т д. В случае, когда используется virtual-hosted адресация, имя bucket'а будет data1, а префиксы files1/... и files2/... соответственно.

Если использовать url https://s3.ru-1.storage.selcloud.ru, то имя bucket'а будет my_container и префиксы data1/files/..., data1/files2/...


Похожие публикации

Нет похожих публикаций