# 2026-03-11 # function.tf — HTTP-функция: читает из PostgreSQL и возвращает список записей. # Нет джобов, нет инициализации — только функция + HTTP триггер. resource "sless_function" "product_catalog" { # объявляем serverless-функцию; "product_catalog" — локальное имя в tf-state name = "product-catalog" # имя функции в кластере; по нему формируется URL и имя k8s-объекта runtime = "python3.11" # базовый образ рантайма; определяет как собирается и запускается код entrypoint = "catalog.list_products" # файл.функция которую вызывает рантайм: catalog.py → def list_products(event) memory_mb = 128 # лимит памяти пода в мегабайтах timeout_sec = 10 # максимальное время выполнения одного запроса в секундах source_dir = "${path.module}/code" # директория с кодом функции; провайдер упакует её в zip и загрузит # DSN передаётся через env — функция не знает об инфраструктуре env_vars = { PG_DSN = var.pg_dsn # строка подключения к PostgreSQL; берётся из переменной (variables.tf) } } resource "sless_trigger" "product_catalog_http" { # триггер публикует функцию наружу; без него функция существует, но недоступна name = "product-catalog-http" # имя триггера в кластере type = "http" # тип триггера: "http" создаёт публичный URL; альтернатива — "cron" function = sless_function.product_catalog.name # ссылка на имя функции выше; terraform гарантирует порядок создания enabled = true # триггер активен сразу после создания } output "catalog_url" { value = sless_trigger.product_catalog_http.url # URL вида https://sless-api.../fn//; выводится после apply }