Skip to content
На этой странице:

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

Общая информация

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

  1. Учетная запись в облаке CloudMTS. Как зарегистрироваться...
  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.

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

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

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

  3. Идентификатор сетиnetwork_id и идентификатор подсетиsubnetwork_id, а также (опционально) IP-адрес — публичный IP-адрес.

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

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


Последовательность шагов для создания сервиса Kafka в облаке CloudMTS через 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 сети, в которой создается подсеть.

Создание IP-адреса

Примечание

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

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

Создание кластера с публичным IP-адресом

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

Пример запроса с публичным IP-адресом
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.

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