Перейти к содержимому

Создание виртуальной машины при помощи OpenAPI

Чтобы работать с сервисами облака MWS при помощи API, у вас должны быть созданы:

  1. Учетная запись в облаке MWS. Как зарегистрироваться…
  2. Платежный аккаунт. Подробнее…

Для подключения того или иного сервиса Облака на балансе вашего платежного аккаунта должны присутствовать средства в соответствующем объеме. Также вы можете использовать гранты.


Для создания виртуальной машины (сервис Compute Cloud) потребуются:

  1. Авторизационный токен$TOKEN.

    Все API запросы выполняются от имени пользователя. Токен генерируется для пользователя при выполнении запроса на авторизацию. Также можно использовать токен, созданный для сервисного аккаунта. Подробнее…

    json
    eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMmVmY2U2My01Y2YzLTQxOWEtOTllYi1kYzNiNWVkNGM3NzYiLCJleHAiOjE2ODUwMjYxNzcsImlhdCI6MTY4NTAxMTc4OCwidiI6MiwicCI6Im1uKlRyQEx6cDIvU20oSGQpS3p4OXU5WFx1MDAzZUBXNGdCRzJxPXdcdTAwM2V9bmNPeUE2Yz9BUkJBcF4hbmI3XHUwMDNjeGdbJD1xNkFGU0kyLXVCa15IckItMHpqZ2lbOi5dUUIjOU1NUkJve3ZcdTAwMjZieGJ0fUwyNCFVNTpYckRGRlI3QjlzR0wlSF50XnY4UnJVSC86OTNwXWNiLSF9QHUkXVNIVkIkU2JKZ0chP3g6WWhUUDJGIy1zSmJcdTAwM2VrVS5Wb0A5bEN3RElRVVd4L0Eld1NpNlVlRSppY2JPSXVPKXNVMkdyNFVnVCNCXHUwMDNleTJ4d1hNaFQhVXF0RkwzbXNIa312Sl1pdH0_MWVIZmNXc2FpRC9BfUVxWV1uQTYxTjdMISVbKSRGUSMpTFQ9azd0R3pjKzJCPVNlTiRQT0Z6NXpyTkdxYkF6cz8vVTgyZ2NMLVx1MDAzZWNcdTAwM2NyLiNUdEBVMDlkc2l5bnNKOmxZbWFBcTUxMnslbmZZTnMqMFd3R3trKTAvdio_QV5lW14rXHUwMDI2WTZxezp6ckdJaFx1MDAzY083cWFATFx1MDAzY01YW0UrVElFVVBmeSgoanVDS2NQOGNXQUl0XlJpOUcqYk9yIn0.foWauILeaASkOnzCHgaWinGPlj5SNT44xqpQPLFNAY3f-1oUmtWPcmCGeRjMKLYQ2A9ZAOk9ZLaT49oOtjXjVAdY46Ni4MHJOkHtzRksgl9rZHdNwSQbQwTnjbR0sgf2BUaGkdoR3yY3udXYOCGfpbL5nAZKEZoeVyc0fHWtGvy2V9ocjWQiP12hiJhfd2vl1s8gpX4PofP9KaaurpbmTDQ8rfHY1i4u33bU0HtabnkcgmeplU0J_2gFbsBsLpcXszgPeiUAg8ep5JB3A1_PNmz86dcM3m7e223y3KUP3vxlmejDZQFJImvlcL0727JC-_RSRWeUHiyArbjrwyNgowZtbmnsH65ssPTZwoMNhU5X5yVIj_um2EesEd2FIt1R4T56vXeagF2Bln8GRfZLaut06kN2a6i4lWr-JV7xZbeT9n9t58Yyyk6Z7IjwwsDVGOJTPY_jhBP8U4mpFBAo__bjtfi4u6cNgoo6bSrNR0ud9wLTta8aUxqz47bCmjtgmovhTLXWw0pOJmMb7UiBcL3IKNoVSkoiqTJSqArMO72fMquizKXyT4HVghPIt5mgDQOdsxKiZ-2L4dvBW_72U8mkd4VwOAcRwYcM6xfQcko6aPYiaGrAgpvWZ8iRUdFfqaW63V6SSweRcbnU9UwDfUSVZ7i3lZsPqhalLmUEj9c
  2. Идентификатор проекта$PROJECTID.

    Любой сервис в облаке MWS создается в рамках проекта. Вы можете:

    • Создать новый проект при помощи API-запроса.
    • Использовать уже созданный проект (например, тот, который был создан автоматически при регистрации вашей учетной записи в облаке). Его идентификатор можно узнать на Дашборде в консоли управления (правая верхняя часть экрана).

    Идентификатор проекта имеет формат UUID, пример: 09b992c3-1223-41e7-bd81-cfeae5f7fb5c.

  3. Идентификатор сетиnetwork_id, идентификатор подсетиsubnetwork_id и IP-адрес — (ip_address).

    Для создания ВМ нужна выделенная виртуальная сеть и подсеть, а также IP-адрес. Если у вас уже есть созданные сеть/подсеть/IP, используйте их. Также вы можете создать новые при помощи API-запросов.

    Идентификаторы сети/подсети/IP-адреса имеют формат UUID.


Последовательность шагов для создания виртуальной машины на базе сервиса Compute Cloud в облаке MWS через API — следующая:

  1. Авторизуйтесь (опционально; можете использовать токен сервисного аккаунта, если он создан).
  2. Создайте проект (опционально; можете использовать существующий).
  3. Создайте виртуальную сеть (опционально; можете использовать существующую, если она уже создана).
  4. Создайте виртуальную подсеть (опционально; можете использовать существующую, если она уже создана).
  5. Создайте IP адрес (опционально; можете использовать существующую, если она уже создана).
  6. Сгенерируйте SSH-ключ для доступа к виртуальной машине.
  7. Создайте виртуальную машину.
Важно

Каждый API запрос на создание объекта (проект, сеть/подсеть, IP-адрес, виртуальная машина и так далее) должен содержать ключ идемпотентности:

  • ключ в формате UUID передается в HTTP заголовке Idempotency-Key;
  • сгенерировать ключ можно при помощи сторонней библиотеки или онлайн-сервиса, например https://www.uuidgenerator.net/version4;
  • в примерах API запросов ниже значение ключа идемпотентности обозначено как $IDEMPOTENCYKEY;
  • пример ключа идемпотентности — 79b3b7fd-0c15-478a-9431-f212f0464a9e.
  • Если у вас есть токен сервисного аккаунта — пропустите этот шаг.

  • Если у вас нет токена сервисного аккаунта:

    • Авторизуйтесь при помощи запроса POST /iam/v2/tokens — в ответе будет возвращен токен. Используйте его в дальнейших запросах.
  • Если вы хотите использовать уже созданный проект — пропустите этот шаг.
  • Для создания нового проекта выполните запрос POST /apis/projects/public/v4/projects.

Пример запроса:

bash
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.

Пример запроса:

bash
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.

Пример запроса:

bash
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-адреса выполните запрос POST /ocs/v1/services.

Пример запроса:

bash
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 любым удобным способом:

Выполняется запросом POST /ocs/v1/services, в котором необходимо передать:

  • prodjectId, network_id, subnetwork_id, ip_address — их можно взять из ответов предыдущих API-запросов.

  • параметры создаваемой виртуальной машины (описание приведено ниже).

    В параметрах создаваемой виртуальной машины также указываются SSH-ключ, и (опционально) логин и пароль — если нужен доступ через веб-терминал Compute Cloud.


    Platform

    Platform IDCPU Type
    compute.v2Intel® Xeon® Gold 6238R (2.2 GHz)
    compute.v3Intel® Xeon® Gold 6348 (2.6 GHz)
    compute.gpu.v1Intel® Xeon® Gold 6348 (2.6 GHz) with GPU

    Instance Type для compute.v2

    Instance TypevCpuMemory, Mb
    c1.small11024
    c1.medium12048
    c1.large14096
    c2.small22048
    c2.medium24096
    c2.large28192
    c4.small44096
    c4.medium48192
    c4.large416384
    c6.small66144
    c6.medium612288
    c6.large618432
    c8.small88192
    c8.medium816384
    c8.large824576
    c10.small1010240
    c10.medium1020480
    c10.large1030720
    c12.small1212288
    c12.medium1224576
    c12.large1249152
    c16.small1616384
    c16.medium1632768
    c16.large1665536
    c20.small2020480
    c20.medium2040960
    c20.large2081920
    c24.small2424576
    c24.medium2449152
    c24.large2498304
    с1.xlarge18192
    с2.xlarge216384
    с4.xlarge432768
    с6.xlarge649152
    с8.xlarge865536
    с10.xlarge1081920
    с12.xlarge1298304
    с16.xlarge16131072
    с20.xlarge20163840
    с24.xlarge24196608

    Instance Type для compute.v3

    Instance TypevCpuMemory, Mb
    c1.small11024
    c1.medium12048
    c1.large14096
    c2.small22048
    c2.medium24096
    c2.large28192
    c4.small44096
    c4.medium48192
    c4.large416384
    c6.small66144
    c6.medium612288
    c6.large618432
    c8.small88192
    c8.medium816384
    c8.large824576
    c10.small1010240
    c10.medium1020480
    c10.large1030720
    c12.small1212288
    c12.medium1224576
    c12.large1249152
    c16.small1616384
    c16.medium1632768
    c16.large1665536
    c20.small2020480
    c20.medium2040960
    c20.large2081920
    c24.small2424576
    c24.medium2449152
    c24.large2498304
    с1.xlarge18192
    с2.xlarge216384
    с4.xlarge432768
    с6.xlarge649152
    с8.xlarge865536
    с10.xlarge1081920
    с12.xlarge1298304
    с16.xlarge16131072
    с20.xlarge20163840
    с24.xlarge24196608

    Instance Type для compute.gpu.v1

    Instance TypevCpuMemory, MbGPU, count
    c32.g1.large321638401
    c64.g2.large643276802

    Disk Type

    Disk TypeIOPS per GbMin IOPS
    ssd.basic0.4200
    ssd.fast2.0500
    ssd.ultra10.01000

    OS Images

    Идентификаторы образов ОС приводятся для региона Москва, Авантаж ("zoneCode": "msk-avntg").

    OS NameImage UUID
    CentOS Stream 9b251649e-e993-4957-be9c-b0c2c9976c40
    CentOS Stream 83273989e-a173-4ae5-8d3f-e2fe20f641e0
    CentOS 740c18a90-f4de-407d-b7ac-d425b1064aab
    Debian 1151d25ab7-7e48-455c-826d-9e66491580bd
    Debian 10e4461471-8d18-4bd7-b336-c5d1820605cc
    Debian 9c3016071-e995-411e-a78b-1569cf690540
    Rocky Linux 9176ecee5-f64b-414e-b540-c27e6c11709f
    Rocky Linux 8a1f7390d-145a-451e-aed2-7fb4199a5cc8
    Ubuntu 22.04 LTS Servercd354813-aff7-423b-9d16-6820bce249f9

Пример запроса:

bash
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-адреса.

Процесс подключения к созданной виртуальной машине описан в данном разделе документации.