30 lines
2.5 KiB
HCL
30 lines
2.5 KiB
HCL
# 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/<namespace>/<name>; выводится после apply
|
||
}
|