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.4nubes_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): useriotservice(ddl_user → CREATEDB+CREATEROLE) + БДiotdb. - shared-SQS (тенант
demo-service): очередиiot-telemetry+iot-telemetry-dlq.
Запуск
cd deploy/terraform
cp terraform.tfvars.example terraform.tfvars # заполнить секреты
terraform init
terraform plan
terraform apply # ← запускает ВЛАДЕЛЕЦ (не агент)
Проверка
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; должна существовать в ЛК, иначе «Ресурсной платформы '' нету в Личном кабинете». Сверить у PG-инстанса.- Имя PG-пользователя: платформенный regex
^[A-Za-z0-9]+$— подчёркивание нельзя (iotservice, неiot_service). destroyусыпляет (suspend_on_destroy=true), не удаляет: удаление усыплённого — вручную в ЛК через 14 дней.reconcile/redeployиз Terraform недоступны (только ЛК).- Секреты:
terraform.tfvarsи*.tfstateв.gitignore— НЕ коммитить.