# Создано: 2026-04-04 # E2E Demo: IoT Device → MQTT → RabbitMQ → Serverless Function # # Порядок применения: # 1. terraform init # 2. terraform apply # 3. Получить credentials: terraform output mqtt_password # 4. Отправить тестовое MQTT сообщение (см. README.md ниже) terraform { required_providers { sless = { source = "kube5s.ru/naeel/sless" version = ">= 0.1" } } } # Адрес API sless оператора provider "sless" { api_url = "https://sless.kube5s.ru" } # Переменные variable "namespace" { description = "Namespace пользователя (создаётся через EnsureNamespace)" type = string } variable "api_token" { description = "JWT токен для аутентификации в sless API" type = string sensitive = true } # Python функция-обработчик IoT-телеметрии resource "sless_function" "iot_telemetry_handler" { namespace = var.namespace name = "iot-telemetry-handler" runtime = "python3.11" entrypoint = "handler.handle" memory_mb = 128 timeout_sec = 30 env_vars = { LOG_LEVEL = "INFO" } } # Event Trigger: подписка на IoT telemetry queue # event-dispatcher читает из этой очереди и вызывает функцию resource "sless_trigger" "iot_telemetry_trigger" { namespace = var.namespace name = "iot-telemetry-events" type = "event" function_ref = sless_function.iot_telemetry_handler.name # queue = "iot.{namespace}.telemetry" — формируется mqtt-bridge автоматически queue = "iot.${var.namespace}.telemetry" enabled = true } # IoT устройство — температурный датчик resource "sless_iot_device" "temperature_sensor" { namespace = var.namespace name = "temperature-sensor" device_id = "temp-sensor-01" enabled = true metadata = { model = "DHT22" location = "server-room" owner = "ops-team" } } # ——— Outputs ——— output "mqtt_broker" { value = "emqx.sless.svc:1883" description = "MQTT broker адрес (доступен внутри кластера)" } output "mqtt_username" { value = sless_iot_device.temperature_sensor.mqtt_username description = "MQTT username для устройства" } output "mqtt_password" { value = sless_iot_device.temperature_sensor.mqtt_password sensitive = true description = "MQTT пароль для устройства (sensitive)" } output "mqtt_topic" { value = "${var.namespace}/telemetry/temp-sensor-01" description = "MQTT topic для публикации телеметрии" } output "iot_device_phase" { value = sless_iot_device.temperature_sensor.phase description = "Статус IoT устройства (Active/Pending/Disabled/Error)" }