Files
IoT/examples/README.md
T
Naeel 1a94241c62 feat: перенос IoT managed service из sless в отдельную репу
Компоненты:
- iot-operator: controller-manager (IoTDevice CRD) + REST API (порт 9090)
- mqtt-bridge: MQTT (EMQX) → Kafka bridge
- kafka-consumer: Kafka → Postgres pipeline

Модуль: gitea.services.ngcloud.ru/Nail/IoT
Все 3 бинарника собираются, import paths адаптированы.
2026-04-12 14:29:43 +03:00

2.6 KiB

IoT MVP — E2E Demo

Что делает этот пример

Показывает полную цепочку:

IoT Device (mosquitto_pub)
  → MQTT PUBLISH → EMQX (HTTP auth → sless-operator)
    → [iot-mqtt-bridge подписан на "+/telemetry/+"]
      → RabbitMQ queue "iot.{namespace}.telemetry"
        → event-dispatcher
          → POST → serverless function (handler.py)

Предусловия

  1. EMQX запущен: kubectl apply -f deployments/k8s/emqx.yaml
  2. iot-mqtt-bridge запущен: kubectl apply -f deployments/k8s/iot-mqtt-bridge.yaml
  3. event-dispatcher запущен (уже должен работать)

Запуск

# Установить переменные
export API_TOKEN="your-jwt-token"
export NAMESPACE="sless-abc123def456"  # твой namespace

# Инициализировать
terraform init
terraform apply \
  -var="namespace=${NAMESPACE}" \
  -var="api_token=${API_TOKEN}"

# Получить credentials
MQTT_USER=$(terraform output -raw mqtt_username)
MQTT_PASS=$(terraform output -raw mqtt_password)
MQTT_TOPIC=$(terraform output -raw mqtt_topic)

echo "MQTT user: ${MQTT_USER}"
echo "MQTT topic: ${MQTT_TOPIC}"

Отправить тестовое сообщение

# Через mosquitto_pub (из пода внутри кластера)
kubectl run mqtt-test --rm -i --image=eclipse-mosquitto --restart=Never -- \
  mosquitto_pub \
  -h emqx.sless.svc \
  -p 1883 \
  -u "${MQTT_USER}" \
  -P "${MQTT_PASS}" \
  -t "${MQTT_TOPIC}" \
  -m '{"temperature": 22.5, "humidity": 65, "unit": "celsius"}'

Проверить что функция вызвалась

# Логи event-dispatcher
kubectl logs -n sless deployment/event-dispatcher -f

# Логи функции (через invocations API)
curl -H "Authorization: Bearer ${API_TOKEN}" \
  https://sless.kube5s.ru/v1/namespaces/${NAMESPACE}/functions/iot-telemetry-handler/invocations

Структура файлов

examples/IOT/
  main.tf      # Terraform: function + trigger + iot_device
  handler.py   # Python обработчик телеметрии
  README.md    # Этот файл

Известные ограничения MVP

  • sless_iot_device Terraform ресурс требует реализации в terraform-provider-sless (Этап 6)
  • EMQX TLS отключён — включить для prod (настроить cert-manager secret)
  • iot-mqtt-bridge credentials создаются вручную (автоматизировать в будущем)
  • Нет обратного канала: Cloud → Device команды (Device Shadow — вне MVP)