# 2026-03-07 # handler.py — пример serverless функции, работающей с PostgreSQL. # Подключается к postgres.sless.svc.cluster.local:5432 (внутри кластера). # DSN берётся из env переменной PG_DSN (задаётся через env_vars ресурса sless_function). # handle(event) — принимает JSON event, возвращает список записей из таблицы invocations. import os import json def handle(event): # psycopg2 входит в python:3.11-slim через pip install ниже, # либо нужно добавить в Dockerfile — для этого примера устанавливаем через requirements.txt. try: import psycopg2 import psycopg2.extras except ImportError: return {"error": "psycopg2 not installed — add requirements.txt with psycopg2-binary"} dsn = os.environ.get("PG_DSN", "") if not dsn: return {"error": "PG_DSN env variable is not set"} limit = event.get("limit", 5) conn = psycopg2.connect(dsn) try: cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) cur.execute("SELECT id, namespace, function_name, status, created_at FROM invocations ORDER BY created_at DESC LIMIT %s", (limit,)) rows = cur.fetchall() # RealDictCursor возвращает объекты, сериализуем вручную result = [] for row in rows: r = dict(row) # datetime → str if r.get("created_at"): r["created_at"] = str(r["created_at"]) result.append(r) return {"invocations": result, "count": len(result)} finally: conn.close()