nubes_kafka — ApacheKafka¶
Отказоустойчивый брокер сообщений Apache Kafka для потоковой обработки данных и обмена событиями между сервисами. Сервис создаёт кластер и отдаёт адреса подключения (bootstrap-серверы брокеров).
Инструкция по сервису Отдельная страница: руководство по сервису.
Специфика Nubes:
destroy≠ удалениеterraform destroyпо умолчанию усыпляет инстанс (suspend), а не удаляет. Подробности — в разделе «Жизненный цикл» и в общем руководстве «Как работает провайдер».
Пример использования¶
resource "nubes_kafka" "cluster" {
resource_name = "my-kafka"
operation_timeout = "20m"
startup_configuration = {
resource_realm = "k8s-4-ext-nubes-ru"
}
cluster_configuration = {
cpu = 2000
memory = 2048
disk = 1
replicas = 1 # ⚠️ обязателен: 1 | 3 | 5 | 7
}
access_configuration = {
allocation_external = false
master_access_list = jsonencode([])
}
}
Типовая связка с топиком и пользователем:
resource "nubes_kafka_topic" "events" {
kafka_id = nubes_kafka.cluster.id
name_topic = "events"
partitions = 3
replicas = 1
}
resource "nubes_kafka_user" "app" {
kafka_id = nubes_kafka.cluster.id
name_topic = "events"
username = "app-user"
operations = "Create,Describe,Read,Write" # без пробелов
}
Argument Reference¶
| Имя | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
resource_name |
string | да | — | Имя инстанса |
startup_configuration¶
| Имя | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
resource_realm |
string | да | — | Платформа: k8s-4-ext-nubes-ru, k8s-4-ext-nubes-ru |
cluster_configuration¶
| Имя | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
cpu |
integer | нет | 2000 |
Квота CPU пода (milicores) |
memory |
integer | нет | 2048 |
Квота памяти пода (MB) |
disk |
integer | нет | 1 |
Квота диска (GB) |
replicas |
integer | да | — | Число реплик: 1, 3, 5, 7 |
access_configuration¶
| Имя | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
allocation_external |
bool | нет | false |
Выделить внешний адрес |
master_access_list |
string (json) | нет | [] |
Список разрешённых адресов (JSON-массив) |
Общие атрибуты (есть у всех ресурсов):
| Имя | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
operation_timeout |
string | нет | — | Максимальное время ожидания операции (напр. 20m) |
log_level |
string | нет | none |
Логирование стадий: none, info, debug |
suspend_on_destroy |
bool | нет | true |
При destroy — усыпить вместо удаления |
keep_on_destroy |
bool | нет | false |
При destroy — ничего не делать в облаке (state_only) |
adopt_existing_on_create |
bool | нет | false |
Авто-подхват существующего инстанса при apply |
Attribute Reference¶
| Имя | Тип | Описание |
|---|---|---|
id |
string | UUID инстанса |
state_out.internalConnect |
string (json) | Точки подключения: bootstrap.fqdn, bootstrap.port (=9093), brokers.<name>.fqdn, brokers.<name>.port |
state_out.externalConnect |
string | Внешний адрес ("" без allocation_external = true) |
state_out.instanceUid |
string | UUID инстанса |
state_out_flat["monitoring.logs"] |
string | Ссылка на логи (Grafana) |
state_out_flat["monitoring.resourceMetrics"] |
string | Ссылка на метрики (Grafana) |
state_params / state_params_flat |
map | Параметры, отправленные в API |
vault_secrets |
map (sensitive) | Секреты из Vault |
vault_url / vault_user_path |
string | Адрес/путь Vault |
vault_fields |
list | Список доступных ключей секретов |
output "kafka_bootstrap" {
value = jsondecode(nubes_kafka.cluster.state_out_flat["internalConnect"])
}
Жизненный цикл ¶
| Флаг | Дефолт | Поведение при destroy |
|---|---|---|
suspend_on_destroy |
true |
Инстанс переводится в suspend (не удаляется) |
suspend_on_destroy |
false |
Выполняется операция delete — инстанс удаляется в облаке |
keep_on_destroy |
false |
Если true — ресурс вообще не трогается в облаке (state_only) |
Возврат из suspend: повторный terraform apply с adopt_existing_on_create = true
— провайдер найдёт инстанс по имени и выполнит resume (тот же id).
Зачем нужно усыпление
suspend— временная остановка: ресурсы высвобождаются, а инстанс можно вернуть в работу в любой момент повторнымapply.Удаление усыплённого инстанса Удалить усыплённый инстанс можно, когда он пробыл в
suspend14 дней.⚠️ Из Terraform это невозможно — операция
deleteдля усыплённого инстанса недоступна. Удаляйте его вручную в Личном кабинете (ЛК).
- Инстанс в статусе «not created» (после упавшего create) блокирует имя и не удаляется через API — чистится вручную в Личном кабинете.
Подресурсы¶
nubes_kafka_topic¶
| Имя | Тип | Обязательный | По умолчанию | Описание | Ограничения |
|---|---|---|---|---|---|
kafka_id |
string (uuid) | да | — | UUID кластера Kafka | — |
name_topic |
string | да | — | Имя топика | — |
partitions |
integer | да | — | Число партиций | можно увеличивать, уменьшать нельзя |
replicas |
integer | да | — | Число реплик | не больше числа реплик брокера |
Идентификатор: <kafka_uid>:topic:<hash>.
nubes_kafka_user¶
| Имя | Тип | Обязательный | По умолчанию | Описание | Ограничения |
|---|---|---|---|---|---|
kafka_id |
string (uuid) | да | — | UUID кластера Kafka | — |
username |
string | да | — | Имя пользователя | — |
name_topic |
string | да | — | Полное имя топика | маска запрещена |
operations |
list | да | — | Разрешённые операции | Create, Describe, Read, Write — без пробелов |
group |
string | нет | * |
Consumer-группа | — |
access_hosts |
string | нет | * |
Разрешённые хосты | — |
password |
string (sensitive) | — | из Vault | Пароль пользователя | только чтение |
Идентификатор: <kafka_uid>:user:<hash>.
Общие атрибуты подресурсов
adopt_existing_on_create,keep_on_destroy,skip_missing_on_delete,operation_timeout,log_level.
Operations¶
| Операция | Доступно из Terraform | Комментарий |
|---|---|---|
create |
✅ apply |
Создание кластера |
modify |
✅ apply |
Меняются cluster_configuration, access_configuration |
suspend |
✅ destroy (при suspend_on_destroy=true) |
Усыпление |
resume |
✅ apply (при adopt_existing_on_create=true) |
Пробуждение |
delete |
✅ destroy (suspend_on_destroy=false) |
Удаление инстанса в облаке. Только для работающего (running); усыплённый — вручную в ЛК |
create_topic / modify_topic / delete_topic |
✅ через nubes_kafka_topic |
Управление топиками |
create_user / modify_user / delete_user |
✅ через nubes_kafka_user |
Управление пользователями |