docs: README для примера pg-list-python
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# 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-ресурсы.
|
||||
Reference in New Issue
Block a user