Files

53 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IoT на Nubes через Terraform
Разворачивает IoT-стек двумя HTTP-контейнерами провайдера `nubes-test` (ресурс `nubes_http`):
- `nubes_http.iot_emqx` — EMQX 5.5.1 (PG-auth) → `gitea.services.ngcloud.ru/nail/iot-emqx:v0.2.4`
- `nubes_http.iot_service` — монолит `iot-service` → `.../iot-service:v0.1.13` (bridge + consumer + api)
`iot-service` создаётся **после** EMQX (`depends_on`), подключается к shared-SQS (`sqs.sinefo.ru`),
managed PostgreSQL (инстанс `foriot`) и EMQX по внутреннему адресу.
> Источник провайдера: `tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes` (TEST-стенд),
> версия `3.1.0`. Референсный пример — `~/TF/tf_provider/TEST_STAND/Maria_CRUD`.
## Предусловия (готово на 2026-10-11)
- Образы в Gitea: `nail/iot-emqx:v0.2.4`, `nail/iot-service:v0.1.13`.
- PG (инстанс `foriot`): user `iotservice` (ddl_user → CREATEDB+CREATEROLE) + БД `iotdb`.
- shared-SQS (тенант `demo-service`): очереди `iot-telemetry` + `iot-telemetry-dlq`.
## Запуск
```bash
cd deploy/terraform
cp terraform.tfvars.example terraform.tfvars # заполнить секреты
terraform init
terraform plan
terraform apply # ← запускает ВЛАДЕЛЕЦ (не агент)
```
## Проверка
```bash
terraform output iot_service_url # → https://<iot_domain>/health
terraform output iot_mqtt_broker_url # → wss://<emqx_domain>/mqtt
curl -s https://<iot_domain>/health # {"status":"ok",...}
curl -s https://<emqx_domain>/mqtt # 400 (норма: Cowboy без subprotocol)
```
В логах `iot-service` (ссылка в ЛК): `bridge: MQTT connected` → `bridge: subscribed` →
`consumer: SQS queue resolved`.
## Нюансы
- **`MQTT_HOST`**: по умолчанию вычисляется как `<resource_name>.<instanceUid>.svc.cluster.local`.
Если при первом apply адрес окажется другим — задать `mqtt_host` в `terraform.tfvars` (взять из ЛК).
`ws://` внутри кластера (порт `8083`, путь `/mqtt`).
- **`realm`**: ресурсная платформа K8s; должна существовать в ЛК, иначе
«Ресурсной платформы '<realm>' нету в Личном кабинете». Сверить у PG-инстанса.
- **Имя PG-пользователя**: платформенный regex `^[A-Za-z0-9]+$` — подчёркивание нельзя (`iotservice`, не `iot_service`).
- **`destroy` усыпляет** (`suspend_on_destroy=true`), не удаляет: удаление усыплённого — вручную в ЛК через 14 дней.
- **`reconcile`/`redeploy`** из Terraform недоступны (только ЛК).
- Секреты: `terraform.tfvars` и `*.tfstate` в `.gitignore` — НЕ коммитить.