Создание виртуальной машины при помощи OpenAPI
Общая информация
Заголовок раздела «Общая информация»Чтобы работать с сервисами облака MWS при помощи API, у вас должны быть созданы:
- Учетная запись в облаке MWS. Как зарегистрироваться…
- Платежный аккаунт. Подробнее…
Для подключения того или иного сервиса Облака на балансе вашего платежного аккаунта должны присутствовать средства в соответствующем объеме. Также вы можете использовать гранты.
Для создания виртуальной машины (сервис Compute Cloud) потребуются:
Авторизационный токен —
$TOKEN.Все API запросы выполняются от имени пользователя. Токен генерируется для пользователя при выполнении запроса на авторизацию. Также можно использовать токен, созданный для сервисного аккаунта. Подробнее…
Идентификатор проекта —
$PROJECTID.Любой сервис в облаке MWS создается в рамках проекта. Вы можете:
- Создать новый проект при помощи API-запроса.
- Использовать уже созданный проект (например, тот, который был создан автоматически при регистрации вашей учетной записи в облаке). Его идентификатор можно узнать на Дашборде в консоли управления (правая верхняя часть экрана).
Идентификатор проекта имеет формат UUID, пример:
09b992c3-1223-41e7-bd81-cfeae5f7fb5c.Идентификатор сети —
network_id, идентификатор подсети —subnetwork_idи IP-адрес — (ip_address).Для создания ВМ нужна выделенная виртуальная сеть и подсеть, а также IP-адрес. Если у вас уже есть созданные сеть/подсеть/IP, используйте их. Также вы можете создать новые при помощи API-запросов.
Идентификаторы сети/подсети/IP-адреса имеют формат UUID.
Последовательность шагов для создания виртуальной машины на базе сервиса Compute Cloud в облаке MWS через API — следующая:
- Авторизуйтесь (опционально; можете использовать токен сервисного аккаунта, если он создан).
- Создайте проект (опционально; можете использовать существующий).
- Создайте виртуальную сеть (опционально; можете использовать существующую, если она уже создана).
- Создайте виртуальную подсеть (опционально; можете использовать существующую, если она уже создана).
- Создайте IP адрес (опционально; можете использовать существующую, если она уже создана).
- Сгенерируйте SSH-ключ для доступа к виртуальной машине.
- Создайте виртуальную машину.
Авторизация
Заголовок раздела «Авторизация»Если у вас есть токен сервисного аккаунта — пропустите этот шаг.
Если у вас нет токена сервисного аккаунта:
- Авторизуйтесь при помощи запроса
POST /iam/v2/tokens— в ответе будет возвращен токен. Используйте его в дальнейших запросах.
Создание проекта
Заголовок раздела «Создание проекта»- Если вы хотите использовать уже созданный проект — пропустите этот шаг.
- Для создания нового проекта выполните запрос
POST /apis/projects/public/v4/projects.
Пример запроса:
curl --location --request POST 'https://gateway.cloud.mts.ru/apis/projects/public/v4/projects' \--header "Idempotency-Key: $IDEMPOTENCYKEY" \--header 'Content-Type: application/json' \--header "Authorization: Bearer $TOKEN" \--data '{ "name": "Test OpenAPI", "description": "Проект для тестирования OpenAPI"}'Создание сети
Заголовок раздела «Создание сети»- Если вы хотите использовать уже созданную виртуальную сеть — пропустите этот шаг.
- Для создания новой сети выполните запрос
POST /ocs/v1/services.
Пример запроса:
curl --location --request POST 'https://gateway.cloud.mts.ru/ocs/v1/services' \--header "Idempotency-Key: $IDEMPOTENCYKEY" \--header 'Content-Type: application/json' \--header "Authorization: Bearer $TOKEN" \--data '{ "platform": { "productCode": "network", "regionCode": "msk" }, "kind": "network", "metadata": { "description": "test OpenAPI network", "title": "openapi-network" }, "projectId": "'$PROJECTID'", "spec": { "mts.extensions.network": { "bandwidth_mbps": 100, "default_gfw_rule_action": "allow" } }, "zoneCode": "msk-avntg"}'Создание подсети
Заголовок раздела «Создание подсети»- Если вы хотите использовать уже созданную подсеть — пропустите этот шаг.
- Для создания новой подсети выполните запрос
POST /ocs/v1/services.
Пример запроса:
curl --location --request POST 'https://gateway.cloud.mts.ru/ocs/v1/services' \--header "Idempotency-Key: $IDEMPOTENCYKEY" \--header 'Content-Type: application/json' \--header "Authorization: Bearer $TOKEN" \--data '{ "platform": { "productCode": "network", "regionCode": "msk" }, "kind": "subnet", "metadata": { "description": "test OpenAPI subnetwork", "title": "openapi-subnetwork" }, "parentBinding": { "targetId": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3" }, "projectId": "'$PROJECTID'", "spec": { "mts.extensions.subnet": { "cidr": "10.100.15.0/24" } }, "zoneCode": "msk-avntg"}'В примере выше:
- в параметре
"targetId": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3"указывается ID сети, в которой создается подсеть.
Создание IP-адреса
Заголовок раздела «Создание IP-адреса»- Если вы хотите использовать уже созданный IP-адрес — пропустите этот шаг.
- Для создания нового IP-адреса выполните запрос
POST /ocs/v1/services.
Пример запроса:
curl --location --request POST 'https://gateway.cloud.mts.ru/ocs/v1/services' \--header "Idempotency-Key: $IDEMPOTENCYKEY" \--header 'Content-Type: application/json' \--header "Authorization: Bearer $TOKEN" \--data '{ "platform": { "productCode": "network", "regionCode": "msk" }, "kind": "ip", "metadata": { "description": "test OpenAPI ip", "title": "openapi-ip-address" }, "parentBinding": { "targetId": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3" }, "projectId": "'$PROJECTID'", "spec": {}, "zoneCode": "msk-avntg"}'В примере выше:
- в параметре
"targetId": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3"указывается ID сети, в которой создается IP-адрес.
Создание SSH-ключа
Заголовок раздела «Создание SSH-ключа»Создайте ключ для доступа к виртуальной машине по SSH любым удобным способом:
- как описано здесь, или
- при помощи онлайн-сервиса, например: https://8gwifi.org/sshfunctions.jsp.
Создание виртуальной машины
Заголовок раздела «Создание виртуальной машины»Выполняется запросом POST /ocs/v1/services, в котором необходимо передать:
prodjectId,network_id,subnetwork_id,ip_address— их можно взять из ответов предыдущих API-запросов.параметры создаваемой виртуальной машины (описание приведено ниже).
В параметрах создаваемой виртуальной машины также указываются SSH-ключ, и (опционально) логин и пароль — если нужен доступ через веб-терминал Compute Cloud.
Пример запроса:
curl --location --request POST 'https://gateway.cloud.mts.ru/ocs/v1/services' \--header 'Content-Type: application/json' \--header 'Accept: application/json' \--header "Idempotency-Key: $IDEMPOTENCYKEY" \--header "Authorization: Bearer $TOKEN" \--data-raw '{ "platform": { "productCode": "compute-cloud", "regionCode": "msk" }, "kind": "compute", "metadata": { "title": "my-vm", "description": "Тестовая ВМ, созданная с помощью OpenAPI" }, "projectId": "'$PROJECTID'", "spec":{ "instance":{ "instanceType":"c1.small", "platformId":"compute.v2" }, "bootDisk":{ "sizeGb":20, "diskType":"ssd.basic", "sourceImageId": "b251649e-e993-4957-be9c-b0c2c9976c40" }, "secondaryDisks":[
], "users":[ { "name":"example", "password":"", "sshKeys":[ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCENmvn+AC2a/uOBmqCZD5fIoan2yRcb10tgkJFxN+dHZlxcDbYTEpMd0LY5mWMuNObKiOhoZyrO3TOZ4/PUy6mcQIHvK+eY4k5KGk6GYiCKr3gUH6+V8KS+xfOWlRSn+5IHDFWhWCcLCFHZcXSINC+uLo88iBNb217902WWLYzujhQcT7/dP/w+r5TBLXLtH2xA2lRKeWwKwfYKUkfCQzm49u81EBzXykWlSOS9GeyOh5eJVSSjpPeC+bJJJGnX6PFKRHeTxjRK8q1kmEMZQovCg63VhfQjJEjpJuvh795G9TLJEg6alxPsilG+QZdjhwAre8CT16zu03YWeHNRVfJ" ] } ], "networkInterfaces":[ { "networkId": "a46f1de2-e24d-4912-baa9-cfe2759a49d6", "subnetworkId": "afd1af0a-2da9-4d89-a45b-b5fb3badba84", "natIpId": "6ae9ec56-b34f-4a8a-87e7-416672b8c903" } ], "mts.extensions.promo":{ "is_promo":false } }, "zoneCode": "msk-avntg"}'В примере запроса выше:
- в параметре
"sourceImageId": "694f7882-8db6-410d-a899-d522ff5be2d7"указывается ID образа ОС (в приведенном примере - CentOS Stream 9); - при помощи параметра
"networkInterfaces": [...]"указываются ID созданных сети/подсети/IP-адреса.
Процесс подключения к созданной виртуальной машине описан в данном разделе документации.