Yandex cloud storage – облачное хранение данных. Все файлы и папки – это объекты. А сами объекты размещаются в бакетах. Создадим бакет, и загрузим файлы. Загрузить файлы можно прямо через браузер. Мы поступим по-другому. Напишем небольшой скрипт на python для загрузки и подсчета файлов. Но все по порядку.
Создадим профиль в yandex.cloud c помощью yandex аккаунта.
После регистрации переходим в консоль. Далее нажимаем на вкладку все сервисы.
В поиске вводим object Storage и переходим по ссылке. Нажимаем создать бакет и выбираем нужные параметры.
Имя должно быть уникальным среди всех бакетов Yandex Cloud. Может содержать строчные буквы латинского алфавита, цифры, точку и дефис. Допустимая длина — от 3 до 63 символов.
Далее выбираем нужный размер хранилища. Про класс хранилища можно почитать в официальной документации (https://cloud.yandex.ru/docs/storage/concepts/storage-class).
Создадим бакет – teststoragetest, размером 1 ГБ. Класс хранилища выбираем стандартный. Если перейти в бакет, то появиться форма с кнопкой для загрузки файлов(объектов).
Переходим в настройки и переключаем ползунок на публичный. Это нужно если вы в рамках проекта хотите раздавать ссылки на объекты из бакета. Переключаем ползунок и нажимаем сохранить.
Дальше на потребуется создать сервисный аккаунт и дать ему права на чтение и запись данных в Yandex Storage. Переходим во вкладку все сервисы и выбираем yandex cloud console. На вкладке сервисный аккаунт создаем сервисный аккаунт.
Аккаунт может содержать строчные буквы латинского алфавита, цифры и дефисы. Первый символ должен быть буквой. Последний символ не должен быть дефисом. Допустимая длина — от 3 до 63 символов.
Вводим имя и указываем роли в каталоге. Нам нужны storage.uploader и storage.viewer. Для просмотра и загрузки данных. Можно дать аккаунту и роль storage.admin. (дает все права аккаунту в сервисе storage). И нажимаем создать. После этого заходим в сервисный аккаунт, выбираем создать ключи и нажимаем «Создать статический ключ доступа». Сохраняем «Идентификатор ключа» (AWS_ACCESS_KEY_ID) и «Ваш секретный ключ» (AWS_SECRET_ACCESS_KEY).
Возвращаемся в object Storage и выбираем у нашего бакета свойство ACL бакета.
И добавляем сервисный аккаунт. Должно получиться так:
Жмем сохранить. Все, бакет создан и к нему добавлен сервисный аккаунт, который может просматривать и загружать объекты в созданное облачное хранилище через скрипт на Python.
Загрузка фалов в yandex storage с помощью Python 3.х.
Я использую Visual Studio Code для написания скриптов. Создаем новый файл main.py и в нем будет следующий код.
Во-первых, нам надо подключиться к нашему бакету.
Библиотеку boto3 устанавливаем через pip3 install boto3.
Дальше пишем код для загрузки файла:
В строке №13 «teststoragetest» - это имя нашего бакета который мы создали. «one.txt» как будет называться наш загруженный файл в бакете. Подробно тут (https://cloud.yandex.ru/docs/storage/tools/boto). Например, мы загружаем файл one.txt, а когда он загрузится будет называться two.txt. Тогда код будет выглядеть так: s3.upload_file('C:\Python\test\one.txt', 'teststoragetest', 'two.txt').
Но что бы это все работало, надо выполнить следующие действия:
1. Перейдите в директорию C:\Users\<имя_пользователя>\.aws\ (если нет, то создать ее).
2. Создайте файл credentials с аутентификационными данными для Object Storage и скопируйте в него следующую информацию:
Это те данные которые нам выдали при создании секретного ключа в сервисном аккаунте.
1. Создайте файл config с параметрами региона по умолчанию и скопируйте в него следующую информацию:
После этих действий запустите наш код. И файл будет загружен.
Для просмотра всех объектов в бакете с помощью кода на Python документация yandex storage предлагают нам использовать следующий код (только вместо «bucket-name» указываем Ваше имя бакета:
Если вывести просто key, то можно увидеть различные ключи объекта. Например, key[‘Size’] выведет размер нашего файла.
Но данный код подойдет Вам, если у Вас объектов в бакете до 1000 включительно. Если их больше, то он будет работать неправильно. Для количества объектов больше 1000 я использую следующий код:
Вот тут можно почитать про boto3 (https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam/paginator/ListUsers.html).
По поводу папок. Самих папок нет. Но если при загрузке задать имя 2023/файл.txt и загрузить несколько фалов с одинаковой приставкой 2023/, то в бакете вы увидите, что у Вас как бы создалась пака 2023 и в нее загрузились все Ваши файлы с приставкой /2023.
Если интересно, могу написать про подключение yandex storage к yandex function.