sless-primer/pg-list-python/README.md
2026-03-11 17:32:40 +04:00

94 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
```
## Запуск
```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 = аш_jwt_токен"
```
## Как работает
```
terraform apply
→ загружает код в S3
→ kaniko собирает Docker-образ (pip install psycopg2-binary)
→ Deployment поднимается в кластере
→ Ingress публикует URL
GET /fn/<namespace>/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-ресурсы.