Привет, недавно в вечером в выходной я захотел поэкспериментировать с загрузкой/раздачей статики в/из yandex cloud и понял что заблудился, переходя по разным ссылкам в документации.
В итоге этого "увлекательного" путешествия родилась пара заметок, а заметки публикуются в блог, который ты сейчас читаешь)
Если тоже пишешь заметки и хочешь публиковать их как блог, то у меня тут есть серия статей - Блог на Gatsby + Obsidian from scratch ч.1
План такой
- Создание сервисного аккаунта
- Установка yc cli - (в итоге я понял - yc для загрузки статики не предназначен, с помощью этой тулзы можно делать много чего, но именно операции с s3 сильно ограничены и для этого потребуется дополнительно установить AWS CLI)
- Загружаем статику через cli - в отдельной заметке (Yandex Cloud - загружаем статику используя aws cli (2))
Перед созданием сервисного аккаунта у вас должен быть настроен платежный аккаунт, о том как это сделать (там быстро), я писал подробнее в Chat с GPT в Telegram боте - пишем своего бота (api openai)
![[aws-cli-create-service-account.png]]
Итак, у нас есть платежный аккаунт, дальше кликаем в сайдбаре На нужное облако (default или "Создать каталог" в меню), выбираем вкладку "Сервисные аккаунты", нажимаем кнопку создать сервисный аккаунт и вбиваем все необходимое во всплывающем окне - Бам! Сервисный аккаунт создан, идем дальше!
Теперь накинем этому аккаунту роль editor во вкладке "Права доступа"
![[aws-cli-add-roles2.png]]
Установка cli
У меня macos, для линукса скорее всего все будет 1в1, так что просто копируем это в терминал. Вообще установка описана тут
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
После этого можно вбить в терминал (Если нет, попробуй перезапустить терминал) yc --version
и увидеть что CLI для яндекс клауда установлен и все хорошо :)
Это еще не все, дальше нам потребуется токен паспорта, который можно получить по ссылке
И сохранить (или оставить в буфере обмена), скоро он нам потребуется для инициализации
Инициализация CLI
Вводим в терминале
yc init
После чего проходим по инструкции в терминале (конфигурируем default аккаунт или создаем новый), когда предложат Do you want to configure a default Compute zone?
- жмякаем Y
и выбираем одну из зон (я выбрал a, в доке b - думаю, что это не имеет сейчас большого значения)
Все, cli инициализирован и сконфигурирован, можем проверить с помощью yc config list
:)
Команда должна выдать
token: <токен из яндекс паспорта>
cloud-id: ...
folder-id: ...
compute-default-zone: ...
Cloud ID и Folder ID должны совпадать с тем, что вы видите в веб интерфейсе Yandex Cloud (Далее YC).
Если вы думаете сейчас "Ну наконец я могу пользоваться CLI, ведь я скормил ему свой токен" - я вас разочарую, мы будем ходить в YC используя сервисный аккаунт, который мы создали ранее, а чтобы его использовать, для него нужно создать авторизованный ключ
Вводим в терминал
yc iam key create --folder-name <default или другая директория, которую вы создали> --service-account-name <имя робота> --output key.json
id: ...
service_account_id: <Идентификатор сервисного аккаунта>
created_at: "2024-02-18T16:10:35.697109814Z"
key_algorithm: RSA_2048
В итоге у нас появился файлик key.json в котором лежит вся информация из вывода выше и еще поля public_key и private_key - они-то нам и понадобятся
У нас остался последний шаг погружения в эту кроличью нору - создаем профиль для этого сервисного аккаунта - от его имени и будут выполняться операции (<awesome-robot-name>
нужно заменить на свой вариант)
yc config profile create <awesome-robot-name>
# Profile '<awesome-robot-name>' created and activated
Указываем путь с credentials для робота
yc config set service-account-key key.json
Наконец, мы можем проверить что все работает и робот видит доступные ему ресурсы с помощью команды
yc resource-manager folder list
Упс! В результате выполнения команды я лично получаю ошибку
ERROR: rpc error: code = InvalidArgument desc = Validation failed:
- cloud_id: Field is required
После чего я пробую получить список облаков - и что же я вижу ? НИ-ЧЕ-ГО
yc resource-manager cloud list
# +----+------+-----------------+
# | ID | NAME | ORGANIZATION ID |
# +----+------+-----------------+
# +----+------+-----------------+
Troubleshooting
Самое первое, что мне пришло в голову - мне (точнее роботу) не хватает прав (но ведь при создании сервисного аккаунта я указал для него роль editor, ЧЯДНТ ???)
В итоге я сделал три вещи
- Создал бакет в object storage директории (Это ничего не дало)
- Добавил роль
editor
иviewer
в настройках ролей ( вкладка "Права доступа") cloud и folder. Это полечило командуyc resource-manager cloud list
но вотyc resource-manager fodler list
по-прежнему возвращало ошибку с cloud_id - Повторно ввел
yc init
и выбрал пункт reinitialize для нужной мне директории. После этого я успешно получил список директорий в клауде - Ура!
yc resource-manager folder list
# +----------------------+---------+--------+--------+
# | ID | NAME | LABELS | STATUS |
# +----------------------+---------+--------+--------+
# | b1.................. | default | | ACTIVE |
# | b1.................. | static | | ACTIVE |
# +----------------------+---------+--------+--------+