feat(deploy): Terraform-стек IoT (nubes_http: EMQX + iot-service) — провайдер nubes-test 3.1.0
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# 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` — НЕ коммитить.
|
||||
Reference in New Issue
Block a user