Добавить в корзинуПозвонить
Найти в Дзене
zreto

Yandex Storage + Python

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 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 бакета.

ACL
ACL

И добавляем сервисный аккаунт. Должно получиться так:

Редактирование ACL
Редактирование 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 и скопируйте в него следующую информацию:

Файл credentials
Файл credentials

Это те данные которые нам выдали при создании секретного ключа в сервисном аккаунте.

1. Создайте файл config с параметрами региона по умолчанию и скопируйте в него следующую информацию:

Файл config
Файл config

После этих действий запустите наш код. И файл будет загружен.

Для просмотра всех объектов в бакете с помощью кода на Python документация yandex storage предлагают нам использовать следующий код (только вместо «bucket-name» указываем Ваше имя бакета:

Что предлагает yandex
Что предлагает yandex

Если вывести просто key, то можно увидеть различные ключи объекта. Например, key[‘Size’] выведет размер нашего файла.

Но данный код подойдет Вам, если у Вас объектов в бакете до 1000 включительно. Если их больше, то он будет работать неправильно. Для количества объектов больше 1000 я использую следующий код:

Если файлов больше 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.