# 2026-03-09 # notes.tf — CRUD функция для управления заметками (CREATE / UPDATE / DELETE). # # Одна функция обрабатывает все операции — роутинг по sub-path URL. # Sub-path и query string пробрасывает прокси (invoke.go) → runtime добавляет # их в event как _path и _query. # # Маршруты (все методы принимаются, рекомендуется POST): # /fn/default/notes/add?title=...&body=... → INSERT, возвращает запись # /fn/default/notes/update?id=1&title=...&body=... → UPDATE, возвращает запись # /fn/default/notes/delete?id=1 → DELETE, возвращает {deleted: id} # Упаковка исходников notes_crud.py в zip. data "archive_file" "notes_crud_zip" { type = "zip" source_dir = "${path.module}/code/notes" output_path = "${path.module}/dist/notes.zip" } # CRUD функция в кластере. # entrypoint = "notes_crud.crud" → файл notes_crud.py, функция crud(). resource "sless_function" "notes_crud" { namespace = "default" name = "notes" runtime = "python3.11" entrypoint = "notes_crud.crud" memory_mb = 128 timeout_sec = 30 env_vars = { PG_DSN = var.pg_dsn } code_path = data.archive_file.notes_crud_zip.output_path code_hash = filesha256("${path.module}/code/notes/notes_crud.py") } # HTTP-триггер для CRUD функции. # Создаёт Ingress в кластере, URL доступен в outputs.tf. # Базовый URL: https://sless-api.kube5s.ru/fn/default/notes resource "sless_trigger" "notes_crud_http" { namespace = "default" name = "notes-http" type = "http" function = sless_function.notes_crud.name }