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

Создание кластера Kafka при помощи OpenAPI

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

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

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


Для создания кластера Kafka (сервис Managed Kafka) потребуются:

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

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

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


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

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

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

  • ключ в формате 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 сети, в которой создается подсеть.
Примечание

Данный шаг необходим только если вам требуется в дальнейшем подключаться к созданному кластеру Kafka извне MWS (то есть, из интернета).

  • Если вы хотите использовать уже созданный 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-адрес.

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

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

    Instance Type

    Instance TypeDescription
    c1.medium1 CPU, 2 GB RAM
    c1.large1 CPU, 4 GB RAM
    c2.small2 CPU, 2 GB RAM
    c2.medium2 CPU, 4 GB RAM
    c2.large2 CPU, 8 GB RAM
    c4.small4 CPU, 4 GB RAM
    c4.medium4 CPU, 8 GB RAM
    c4.large4 CPU, 16 GB RAM
    c6.small6 CPU, 6 GB RAM
    c6.medium6 CPU, 12 GB RAM
    c6.large6 CPU, 18 GB RAM
    c8.small8 CPU, 8 GB RAM
    c8.medium8 CPU, 16 GB RAM
    c8.large8 CPU, 24 GB RAM
    c10.small10 CPU, 10 GB RAM
    c10.medium10 CPU, 20 GB RAM
    c10.large10 CPU, 30 GB RAM
    c12.small12 CPU, 12 GB RAM
    c12.medium12 CPU, 24 GB RAM
    c12.large12 CPU, 48 GB RAM
    c16.small16 CPU, 16 GB RAM
    c16.medium16 CPU, 32 GB RAM
    c16.large16 CPU, 64 GB RAM
    c20.small20 CPU, 20 GB RAM
    c20.medium20 CPU, 40 GB RAM
    c20.large20 CPU, 80 GB RAM
    c24.small24 CPU, 24 GB RAM
    c24.medium24 CPU, 48 GB RAM
    c24.large24 CPU, 96 GB RAM

    Disk Type

    Disk TypeMin IOPS
    ssd.basic200
    ssd.fast500
    ssd.ultra1000
    ssd.ultra-plus5000

    CPU Utilization Level

    CPU Utilization LevelDescription
    low20%
    medium50%
    high100%

    Kafka version

    Kafka version
    2.8.1
    3.1.0

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

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": "mts-kafka",
"regionCode": "msk"
},
"kind": "compute",
"metadata": {
"description": "kafka-openapi",
"title": "kafka-openapi-test"
},
"projectId": "'$PROJECTID'",
"spec": {
"mts.extensions.kafka": {
"instance_count": 1,
"instance_cpu_utilization": "low",
"instance_disk_size": 50,
"instance_disk_type": "ssd.basic",
"instance_type": "c1.medium",
"kafka_version": "3.1.0",
"network_id": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3",
"subnetwork_cidr": "10.100.15.0/24",
"subnetwork_id": "16eddc2e-97a5-4960-b870-ee5a7797cb59"
}
},
"zoneCode": "msk-avntg"
}'

В примере запроса выше:

  • при помощи параметра "network_id", "subnetwork_cidr" и subnetwork_id указываются ID созданных сети/подсети.

Если вам требуется в дальнейшем подключаться к созданному кластеру Kafka извне MWS, то помимо параметров кластера в примере выше, дополнительно укажите публичный IP-адрес для подключения к кластеру:
"white_host": "<IPv4 адрес в формате a.b.c.d>"

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": "mts-kafka",
"regionCode": "msk"
},
"kind": "compute",
"metadata": {
"description": "kafka-openapi",
"title": "kafka-openapi-test"
},
"projectId": "'$PROJECTID'",
"spec": {
"mts.extensions.kafka": {
"instance_count": 1,
"instance_cpu_utilization": "low",
"instance_disk_size": 50,
"instance_disk_type": "ssd.basic",
"instance_type": "c1.medium",
"kafka_version": "3.1.0",
"network_id": "8d114c29-d579-41b3-a4d9-7fd0ac20a0d3",
"subnetwork_cidr": "10.100.15.0/24",
"subnetwork_id": "16eddc2e-97a5-4960-b870-ee5a7797cb59",
"white_host": "10.21.192.131"
}
},
"zoneCode": "msk-avntg"
}'

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

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

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": "mts-kafka",
"regionCode": "msk"
},
"kind": "topic",
"metadata": {
"description": "topic-1",
"title": "topic-1"
},
"parentBinding": {
"targetId": "fb1f4d31-114e-4422-86d5-7c1c0bb6ed18"
},
"projectId": "09b992c3-1223-41e7-bd81-cfeae5f7fb5c",
"spec": {
"mts.extensions.topic":{
"name":"topic-1",
"num_partitions":30,
"replication_factor":3,
"compression_type":"producer",
"max_message_bytes":1048588,
"min_insync_replicas":2,
"cleanup_policy":"delete",
"min_compaction_lag_ms":"0",
"max_compaction_lag_ms":"9223372036854775807",
"delete_retention_ms":"86400000",
"retention_bytes":"-1",
"retention_ms":"604800000"
}
},
"zoneCode": "msk-avntg"
}'

В примере выше:

  • в параметре "targetId": "fb1f4d31-114e-4422-86d5-7c1c0bb6ed18" указывается ID созданного кластера Kafka.

Выполняется запросом POST /ocs/v1/services, параметры учетной записи пользователя передаются в теле запроса.

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

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": "mts-kafka",
"regionCode": "msk"
},
"kind": "user",
"metadata": {
"description": "user-1",
"title": "user-1"
},
"parentBinding": {
"targetId": "fb1f4d31-114e-4422-86d5-7c1c0bb6ed18"
},
"projectId": "09b992c3-1223-41e7-bd81-cfeae5f7fb5c",
"spec": {
"mts.extensions.user":{
"acls":[{
"pattern":"*",
"pattern_type":"literal",
"operation":"rw"
}],
"name":"user-1",
"password":"password-1",
"groups_acls":[{
"pattern":"*",
"pattern_type":"literal"
}]
}
},
"zoneCode": "msk-avntg"
}'

В примере выше:

  • в параметре "targetId": "fb1f4d31-114e-4422-86d5-7c1c0bb6ed18" указывается ID созданного кластера Kafka.

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