Создание виртуальной машины при помощи OpenAPI
Общая информация
Чтобы работать с сервисами облака MWS при помощи API, у вас должны быть созданы:
- Учетная запись в облаке MWS. Как зарегистрироваться...
- Платежный аккаунт. Подробнее...
Для подключения того или иного сервиса Облака на балансе вашего платежного аккаунта должны присутствовать средства в соответствующем объеме. Также вы можете использовать гранты.
Для создания виртуальной машины (сервис Compute Cloud) потребуются:
Авторизационный токен —
$TOKEN
.Все API запросы выполняются от имени пользователя. Токен генерируется для пользователя при выполнении запроса на авторизацию. Также можно использовать токен, созданный для сервисного аккаунта. Подробнее...
Пример авторизационного токена
jsoneyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMmVmY2U2My01Y2YzLTQxOWEtOTllYi1kYzNiNWVkNGM3NzYiLCJleHAiOjE2ODUwMjYxNzcsImlhdCI6MTY4NTAxMTc4OCwidiI6MiwicCI6Im1uKlRyQEx6cDIvU20oSGQpS3p4OXU5WFx1MDAzZUBXNGdCRzJxPXdcdTAwM2V9bmNPeUE2Yz9BUkJBcF4hbmI3XHUwMDNjeGdbJD1xNkFGU0kyLXVCa15IckItMHpqZ2lbOi5dUUIjOU1NUkJve3ZcdTAwMjZieGJ0fUwyNCFVNTpYckRGRlI3QjlzR0wlSF50XnY4UnJVSC86OTNwXWNiLSF9QHUkXVNIVkIkU2JKZ0chP3g6WWhUUDJGIy1zSmJcdTAwM2VrVS5Wb0A5bEN3RElRVVd4L0Eld1NpNlVlRSppY2JPSXVPKXNVMkdyNFVnVCNCXHUwMDNleTJ4d1hNaFQhVXF0RkwzbXNIa312Sl1pdH0_MWVIZmNXc2FpRC9BfUVxWV1uQTYxTjdMISVbKSRGUSMpTFQ9azd0R3pjKzJCPVNlTiRQT0Z6NXpyTkdxYkF6cz8vVTgyZ2NMLVx1MDAzZWNcdTAwM2NyLiNUdEBVMDlkc2l5bnNKOmxZbWFBcTUxMnslbmZZTnMqMFd3R3trKTAvdio_QV5lW14rXHUwMDI2WTZxezp6ckdJaFx1MDAzY083cWFATFx1MDAzY01YW0UrVElFVVBmeSgoanVDS2NQOGNXQUl0XlJpOUcqYk9yIn0.foWauILeaASkOnzCHgaWinGPlj5SNT44xqpQPLFNAY3f-1oUmtWPcmCGeRjMKLYQ2A9ZAOk9ZLaT49oOtjXjVAdY46Ni4MHJOkHtzRksgl9rZHdNwSQbQwTnjbR0sgf2BUaGkdoR3yY3udXYOCGfpbL5nAZKEZoeVyc0fHWtGvy2V9ocjWQiP12hiJhfd2vl1s8gpX4PofP9KaaurpbmTDQ8rfHY1i4u33bU0HtabnkcgmeplU0J_2gFbsBsLpcXszgPeiUAg8ep5JB3A1_PNmz86dcM3m7e223y3KUP3vxlmejDZQFJImvlcL0727JC-_RSRWeUHiyArbjrwyNgowZtbmnsH65ssPTZwoMNhU5X5yVIj_um2EesEd2FIt1R4T56vXeagF2Bln8GRfZLaut06kN2a6i4lWr-JV7xZbeT9n9t58Yyyk6Z7IjwwsDVGOJTPY_jhBP8U4mpFBAo__bjtfi4u6cNgoo6bSrNR0ud9wLTta8aUxqz47bCmjtgmovhTLXWw0pOJmMb7UiBcL3IKNoVSkoiqTJSqArMO72fMquizKXyT4HVghPIt5mgDQOdsxKiZ-2L4dvBW_72U8mkd4VwOAcRwYcM6xfQcko6aPYiaGrAgpvWZ8iRUdFfqaW63V6SSweRcbnU9UwDfUSVZ7i3lZsPqhalLmUEj9c
Идентификатор проекта —
$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-ключ для доступа к виртуальной машине.
- Создайте виртуальную машину.
Важно
Каждый 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
.
Пример запроса:
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-адреса выполните запрос
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 любым удобным способом:
- как описано здесь, или
- при помощи онлайн-сервиса, например: https://8gwifi.org/sshfunctions.jsp.
Создание виртуальной машины
Выполняется запросом POST /ocs/v1/services
, в котором необходимо передать:
prodjectId
,network_id
,subnetwork_id
,ip_address
— их можно взять из ответов предыдущих API-запросов.параметры создаваемой виртуальной машины (описание приведено ниже).
В параметрах создаваемой виртуальной машины также указываются SSH-ключ, и (опционально) логин и пароль — если нужен доступ через веб-терминал Compute Cloud.
Параметры виртуальной машины
Platform
Platform ID | CPU Type |
---|---|
compute.v2 | Intel® Xeon® Gold 6238R (2.2 GHz) |
compute.v3 | Intel® Xeon® Gold 6348 (2.6 GHz) |
compute.gpu.v1 | Intel® Xeon® Gold 6348 (2.6 GHz) with GPU |
Instance Type для compute.v2
Instance Type | vCpu | Memory, Mb |
---|---|---|
c1.small | 1 | 1024 |
c1.medium | 1 | 2048 |
c1.large | 1 | 4096 |
c2.small | 2 | 2048 |
c2.medium | 2 | 4096 |
c2.large | 2 | 8192 |
c4.small | 4 | 4096 |
c4.medium | 4 | 8192 |
c4.large | 4 | 16384 |
c6.small | 6 | 6144 |
c6.medium | 6 | 12288 |
c6.large | 6 | 18432 |
c8.small | 8 | 8192 |
c8.medium | 8 | 16384 |
c8.large | 8 | 24576 |
c10.small | 10 | 10240 |
c10.medium | 10 | 20480 |
c10.large | 10 | 30720 |
c12.small | 12 | 12288 |
c12.medium | 12 | 24576 |
c12.large | 12 | 49152 |
c16.small | 16 | 16384 |
c16.medium | 16 | 32768 |
c16.large | 16 | 65536 |
c20.small | 20 | 20480 |
c20.medium | 20 | 40960 |
c20.large | 20 | 81920 |
c24.small | 24 | 24576 |
c24.medium | 24 | 49152 |
c24.large | 24 | 98304 |
с1.xlarge | 1 | 8192 |
с2.xlarge | 2 | 16384 |
с4.xlarge | 4 | 32768 |
с6.xlarge | 6 | 49152 |
с8.xlarge | 8 | 65536 |
с10.xlarge | 10 | 81920 |
с12.xlarge | 12 | 98304 |
с16.xlarge | 16 | 131072 |
с20.xlarge | 20 | 163840 |
с24.xlarge | 24 | 196608 |
Instance Type для compute.v3
Instance Type | vCpu | Memory, Mb |
---|---|---|
c1.small | 1 | 1024 |
c1.medium | 1 | 2048 |
c1.large | 1 | 4096 |
c2.small | 2 | 2048 |
c2.medium | 2 | 4096 |
c2.large | 2 | 8192 |
c4.small | 4 | 4096 |
c4.medium | 4 | 8192 |
c4.large | 4 | 16384 |
c6.small | 6 | 6144 |
c6.medium | 6 | 12288 |
c6.large | 6 | 18432 |
c8.small | 8 | 8192 |
c8.medium | 8 | 16384 |
c8.large | 8 | 24576 |
c10.small | 10 | 10240 |
c10.medium | 10 | 20480 |
c10.large | 10 | 30720 |
c12.small | 12 | 12288 |
c12.medium | 12 | 24576 |
c12.large | 12 | 49152 |
c16.small | 16 | 16384 |
c16.medium | 16 | 32768 |
c16.large | 16 | 65536 |
c20.small | 20 | 20480 |
c20.medium | 20 | 40960 |
c20.large | 20 | 81920 |
c24.small | 24 | 24576 |
c24.medium | 24 | 49152 |
c24.large | 24 | 98304 |
с1.xlarge | 1 | 8192 |
с2.xlarge | 2 | 16384 |
с4.xlarge | 4 | 32768 |
с6.xlarge | 6 | 49152 |
с8.xlarge | 8 | 65536 |
с10.xlarge | 10 | 81920 |
с12.xlarge | 12 | 98304 |
с16.xlarge | 16 | 131072 |
с20.xlarge | 20 | 163840 |
с24.xlarge | 24 | 196608 |
Instance Type для compute.gpu.v1
Instance Type | vCpu | Memory, Mb | GPU, count |
---|---|---|---|
c32.g1.large | 32 | 163840 | 1 |
c64.g2.large | 64 | 327680 | 2 |
Disk Type
Disk Type | IOPS per Gb | Min IOPS |
---|---|---|
ssd.basic | 0.4 | 200 |
ssd.fast | 2.0 | 500 |
ssd.ultra | 10.0 | 1000 |
OS Images
Идентификаторы образов ОС приводятся для региона Москва, Авантаж ("zoneCode": "msk-avntg"
).
OS Name | Image UUID |
---|---|
CentOS Stream 9 | b251649e-e993-4957-be9c-b0c2c9976c40 |
CentOS Stream 8 | 3273989e-a173-4ae5-8d3f-e2fe20f641e0 |
CentOS 7 | 40c18a90-f4de-407d-b7ac-d425b1064aab |
Debian 11 | 51d25ab7-7e48-455c-826d-9e66491580bd |
Debian 10 | e4461471-8d18-4bd7-b336-c5d1820605cc |
Debian 9 | c3016071-e995-411e-a78b-1569cf690540 |
Rocky Linux 9 | 176ecee5-f64b-414e-b540-c27e6c11709f |
Rocky Linux 8 | a1f7390d-145a-451e-aed2-7fb4199a5cc8 |
Ubuntu 22.04 LTS Server | cd354813-aff7-423b-9d16-6820bce249f9 |
Пример запроса:
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-адреса.
Процесс подключения к созданной виртуальной машине описан в данном разделе документации.