Files
IoT/deploy/terraform/resources.tf
T

84 lines
3.2 KiB
Terraform

# resources.tf — два HTTP-контейнера: EMQX (первым) и iot-service (вторым).
# Образы: gitea.services.ngcloud.ru/nail/{iot-emqx,iot-service}.
# Провайдер nubes_http: docs-rendered/http.md.
#
# Порядок важен: iot-service подключается к EMQX (MQTT) → depends_on.
locals {
# Внутренний адрес EMQX-контейнера (для bridge внутри кластера).
# Формат Nubes: <resource_name>.<instanceUid>.svc.cluster.local.
# Если окажется иным — переопредели var.mqtt_host (см. ЛК → инстанс EMQX).
emqx_internal_host = "${nubes_http.iot_emqx.resource_name}.${nubes_http.iot_emqx.state_out.instanceUid}.svc.cluster.local"
mqtt_host = var.mqtt_host != "" ? var.mqtt_host : local.emqx_internal_host
}
# ── EMQX (создаётся ПЕРВЫМ) ──
resource "nubes_http" "iot_emqx" {
resource_name = "iot-emqx"
resource_realm = var.realm
domain = var.emqx_domain
registry_path = "${var.registry}/iot-emqx:${var.iot_emqx_version}"
resource_cpu = 1000
resource_memory = 1024
resource_instances = 1
# EMQX auth/ACL — напрямую в PostgreSQL (таблица iot_devices).
# ⚠ НЕ задавать ...__URL (HTTP-auth старой схемы — уронит под).
json_env = jsonencode({
EMQX_AUTHENTICATION__1__SERVER = "${var.pg_host}:${var.pg_port}"
EMQX_AUTHENTICATION__1__DATABASE = var.pg_db
EMQX_AUTHENTICATION__1__USERNAME = var.pg_user
EMQX_AUTHENTICATION__1__PASSWORD = var.pg_password
EMQX_AUTHORIZATION__SOURCES__1__SERVER = "${var.pg_host}:${var.pg_port}"
EMQX_AUTHORIZATION__SOURCES__1__DATABASE = var.pg_db
EMQX_AUTHORIZATION__SOURCES__1__USERNAME = var.pg_user
EMQX_AUTHORIZATION__SOURCES__1__PASSWORD = var.pg_password
EMQX_LOG__CONSOLE_HANDLER__LEVEL = "warning"
})
adopt_existing_on_create = true
}
# ── iot-service (создаётся ВТОРЫМ, после EMQX) ──
resource "nubes_http" "iot_service" {
resource_name = "iot-service"
resource_realm = var.realm
domain = var.iot_domain
registry_path = "${var.registry}/iot-service:${var.iot_service_version}"
resource_cpu = 200
resource_memory = 512
resource_instances = 1
json_env = jsonencode({
IOT_PG_DSN = "postgresql://${var.pg_user}:${var.pg_password}@${var.pg_host}:${var.pg_port}/${var.pg_db}?sslmode=require"
SQS_ENDPOINT = var.sqs_endpoint
SQS_ACCESS_KEY = var.sqs_access_key
SQS_SECRET_KEY = var.sqs_secret_key
SQS_QUEUE_NAME = var.sqs_queue_name
SQS_DLQ_NAME = var.sqs_dlq_name
SQS_REGION = "us-east-1"
MQTT_HOST = local.mqtt_host
MQTT_PORT = "8083"
MQTT_WS_PATH = "/mqtt"
MQTT_USERNAME = var.mqtt_username
MQTT_PASSWORD = var.mqtt_password
JWT_HMAC_SECRET = var.jwt_hmac_secret
ADMIN_STATS_TOKEN = var.admin_stats_token
AUTH_TEST_MODE = "false"
LOG_LEVEL = "info"
API_PORT = "9090"
})
# iot-service стартует только после создания EMQX
depends_on = [nubes_http.iot_emqx]
adopt_existing_on_create = true
}