Как автоматизировать настройку проектов с помощью API
Сообщества DataSphere позволяют организовать групповую работу и совместный доступ к материалам и ресурсам. Например, Docker-образы с предустановленными библиотеками, подключения к бакетам Yandex Object Storage и подготовленные датасеты, созданные в одном проекте, можно опубликовать, чтобы открыть к ним доступ для всех проектов сообщества. Это может быть полезно при подготовке учебных заданий или работе нескольких разработчиков над одним исследованием.
Создать и настроить проекты DataSphere можно с помощью интерфейса DataSphere
Чтобы создать и настроить сообщество и несколько проектов:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость автоматизации входит плата за использование вычислительных ресурсов DataSphere.
Получите IAM-токен
Чтобы получить доступ к вашей организации из DataSphere, вам понадобится IAM-токен.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Получите IAM-токен:
yc iam create-token
Внимание
Если вы владелец облака и работаете через API со своего аккаунта, помните — владелец облака может выполнять любые операции с ресурсами в облаке.
Рекомендуем выполнять операции от имени сервисного аккаунта, которому вы можете назначить только необходимые для работы роли.
-
Войдите
в ваш аккаунт на Яндексе. -
Получите OAuth-токен в сервисе Яндекс.OAuth. Для этого перейдите по ссылке
, нажмите Разрешить и скопируйте полученный OAuth-токен. -
Обменяйте OAuth-токен на IAM-токен:
-
с помощью curl
в Bash:curl \ --request POST \ --data '{"yandexPassportOauthToken":"<OAuth-токен>"}' \ https://iam.api.cloud.yandex.net/iam/v1/tokens
-
с помощью встроенной функции в PowerShell:
$yandexPassportOauthToken = "<OAuth-токен>" $Body = @{ yandexPassportOauthToken = "$yandexPassportOauthToken" } | ConvertTo-Json -Compress Invoke-RestMethod -Method 'POST' -Uri 'https://iam.api.cloud.yandex.net/iam/v1/tokens' -Body $Body -ContentType 'Application/json' | Select-Object -ExpandProperty iamToken
-
Создайте проекты
Чтобы создать проекты, скопируйте код в ячейки ноутбука и запустите их.
-
Откройте проект DataSphere:
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
- Откройте вкладку с ноутбуком.
-
-
Укажите полученный IAM-токен:
iam_token = "<IAM-токен>"
-
Импортируйте необходимую библиотеку:
import requests
-
Выведите на экран список всех доступных организаций и их идентификаторы:
res = requests.get('https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds', headers={"Authorization" : "Bearer {}".format(iam_token)}) res.json()
-
Укажите идентификатор организации, в которой должно быть создано сообщество:
ORGANIZATION_ID = "<идентификатор_организации>"
-
Получите список доступных платежных аккаунтов:
res = requests.get('https://billing.api.cloud.yandex.net/billing/v1/billingAccounts', headers={"Authorization" : "Bearer {}".format(iam_token)}) res.json()
-
Создайте сообщество, подставив его имя, описание, а также идентификатор активного платежного аккаунта:
data={} data['name'] = "<имя_сообщества>" data['description'] = "<описание_сообщества>" data['organizationId'] = ORGANIZATION_ID data['billingAccountId'] = "<идентификатор_платежного_аккаунта>" res = requests.post('https://datasphere.api.cloud.yandex.net/datasphere/v2/communities', json=data, headers={"Authorization" : "Bearer {}".format(iam_token)}) community_res = res.json() community_res
-
Получите список идентификаторов ролей в DataSphere:
res = requests.get('https://iam.api.cloud.yandex.net/iam/v1/roles', headers={"Authorization" : "Bearer {}".format(iam_token)}) roles = res.json()['roles'] datasphere_roles = [role for role in roles if 'datasphere' in role['id']] datasphere_roles
-
Получите список участников организации:
res = requests.get("https://organization-manager.api.cloud.yandex.net/organization-manager/v1/organizations/{}/users".format(ORGANIZATION_ID), headers={"Authorization" : "Bearer {}".format(iam_token)}) res.json()
Идентификаторы из поля
sub
понадобятся вам на следующем шаге. -
Создайте проекты, задайте ограничения и настройте роли участников:
# Укажите список идентификаторов участников из поля 'sub', для которых должны быть созданы проекты user_organization_ids = ['<идентификатор_участника_1>','<идентификатор_участника_2>'] projects = {} for user_id in user_organization_ids: # Создайте проект для пользователя data={} data['name'] = "Student {}".format(user_id) data['communityId'] = community_res['metadata']['communityId'] data['description'] = "This is a workplace and create code and store resources" data['limits'] = { # Задайте ограничение на максимальное количество юнитов в час для проекта "maxUnitsPerHour": 10000, # Задайте ограничение на максимальное количество юнитов на один запуск ячейки для проекта "maxUnitsPerExecution": 5000 } res = requests.post('https://datasphere.api.cloud.yandex.net/datasphere/v2/projects', json=data, headers={"Authorization" : "Bearer {}".format(iam_token)}) print("Project for {} is created with response: {}".format(user_id, res)) data={} data['communityId'] = community_res['metadata']['communityId'] data['projectNamePattern'] = "Student {}".format(user_id) res = requests.get('https://datasphere.api.cloud.yandex.net/datasphere/v2/projects', json=data, headers={"Authorization" : "Bearer {}".format(iam_token)}) projects[user_id] = res.json()['projects'][0] project_id = res.json()['projects'][0]['id'] # Добавьте в проект себя с ролью datasphere.community-projects.admin # и пользователя с ролью datasphere.community-projects.developer data={} data['accessBindings'] = [{ "roleId": 'datasphere.community-projects.admin', "subject": { "id": "<идентификатор_администратора_проекта>", # Укажите идентификатор администратора проекта "type": "userAccount" }}, { "roleId": 'datasphere.community-projects.developer', "subject": { "id": "<идентификатор_разработчика_проекта>", # Укажите идентификатор разработчика проекта "type": "userAccount" }} ] res = requests.post('https://datasphere.api.cloud.yandex.net/datasphere/v2/projects/{}:setAccessBindings'.\ format(project_id), json=data, headers={"Authorization" : "Bearer {}".format(iam_token)}) print("Admin was added to project {} with response: {}".format(project_id, res))
-
Получите список созданных проектов:
projects
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, удалите проект.