working with yandex cloud like a pro Привет, недавно в вечером в выходной я захотел поэкспериментировать с загрузкой/раздачей статики в/из yandex cloud и понял что заблудился, переходя по разным ссылкам в документации.

В итоге этого "увлекательного" путешествия родилась пара заметок, а заметки публикуются в блог, который ты сейчас читаешь)

Если тоже пишешь заметки и хочешь публиковать их как блог, то у меня тут есть серия статей - Блог на Gatsby + Obsidian from scratch ч.1

План такой

Перед созданием сервисного аккаунта у вас должен быть настроен платежный аккаунт, о том как это сделать (там быстро), я писал подробнее в 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 |
# +----------------------+---------+--------+--------+