# pg-list-python Python-функция, которая читает из PostgreSQL и возвращает JSON. Таблица с демо-данными создаётся автоматически при первом вызове — никакой инициализации руками. ## Что тут есть ``` code/ catalog.py — функция list_products(event): SELECT из demo_products requirements.txt — psycopg2-binary function.tf — sless_function + sless_trigger + output main.tf — конфигурация провайдера variables.tf — token, pg_dsn terraform.tfvars — значения переменных (не в git) ``` ## Запуск **1. Впишите токен в `terraform.tfvars`:** ```hcl # terraform.tfvars token = "ваш токен Nubes API" # ← заменить на реальный токен из личного кабинета Nubes ``` **2. Деплой:** ```bash terraform init terraform apply -auto-approve curl -s $(terraform output -raw catalog_url) ``` Ответ: ```json { "products": [ {"id": 1, "name": "Ноутбук", "price": 89999.0}, {"id": 2, "name": "Мышь", "price": 1299.0}, {"id": 3, "name": "Клавиатура", "price": 3499.0}, {"id": 4, "name": "Монитор", "price": 32000.0} ], "count": 4 } ``` ## Переменные | Переменная | Обязательна | Описание | |---|---|---| | `token` | ✅ | JWT-токен облака. Задаётся в `terraform.tfvars` | | `pg_dsn` | — | DSN подключения к PostgreSQL. Дефолт — внутрикластерный адрес | `terraform.tfvars` не коммитится в git. Минимальное содержимое: ```hcl token = "ваш токен Nubes API" ``` ## Как работает ``` terraform apply → загружает код в S3 → kaniko собирает Docker-образ (pip install psycopg2-binary) → Deployment поднимается в кластере → Ingress публикует URL GET /fn//product-catalog → рантайм вызывает list_products(event) → psycopg2 подключается к PostgreSQL → если таблица demo_products не существует — создаёт и заполняет демо-данными → возвращает JSON со списком ``` Таблица `demo_products` создаётся один раз — при первом GET. Повторные вызовы просто читают данные. ## Изменение данных Функция только читает. Чтобы добавить/изменить записи — подключитесь к PostgreSQL напрямую: ```sql INSERT INTO demo_products (name, price) VALUES ('Кабель', 499.00); UPDATE demo_products SET price = 95000 WHERE name = 'Ноутбук'; ``` ## Пересборка если изменили код ```bash terraform apply -replace=sless_function.product_catalog -auto-approve ``` ## Удаление ```bash terraform destroy -auto-approve ``` Таблица `demo_products` в PostgreSQL **не удаляется** — только k8s-ресурсы.