Files
IoT/deploy/terraform/README.md
T

3.0 KiB
Raw Blame History

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.

Запуск

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 — НЕ коммитить.