# 2026-03-07 # main.tf — e2e тест: создать serverless функцию, которая читает из PostgreSQL. # # Использование: # 1. zip handler.py + requirements.txt: # zip handler.zip handler.py requirements.txt # 2. terraform init && terraform apply # 3. После apply (ждёт ~2 мин пока kaniko соберёт образ): # curl -s -X POST -d '{}' # # Оператор запущен в кластере: https://sless-api.kube5s.ru # Функция подключается к postgres.sless.svc.cluster.local:5432 изнутри кластера. # PG_DSN задаётся как env_var ресурса sless_function. terraform { required_providers { sless = { source = "terra.k8c.ru/naeel/sless" version = "~> 0.1.7" } } } provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = "dev-token-change-me" } resource "sless_function" "pg_query" { namespace = "default" name = "pg-query" runtime = "python3.11" entrypoint = "handler.handle" memory_mb = 128 timeout_sec = 30 # DSN для подключения к postgres внутри кластера # Хост: postgres.sless.svc.cluster.local (Service в namespace sless) env_vars = { PG_DSN = "postgres://sless:sless-pg-password@postgres.sless.svc.cluster.local:5432/sless?sslmode=disable" } code_path = "${path.module}/handler.zip" code_hash = filesha256("${path.module}/handler.py") } resource "sless_trigger" "pg_query_http" { namespace = "default" name = "pg-query-http" type = "http" function = sless_function.pg_query.name } output "function_phase" { value = sless_function.pg_query.phase } output "function_image" { value = sless_function.pg_query.image_ref } output "trigger_url" { value = sless_trigger.pg_query_http.url }