| .. | ||
| code | ||
| function.tf | ||
| main.tf | ||
| README.md | ||
| terraform.tfvars.change | ||
| variables.tf | ||
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:
# terraform.tfvars
token = "ваш токен Nubes API" # ← заменить на реальный токен из личного кабинета Nubes
2. Деплой:
terraform init
terraform apply -auto-approve
curl -s $(terraform output -raw catalog_url)
Ответ:
{
"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. Минимальное содержимое:
token = "ваш токен Nubes API"
Как работает
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 напрямую:
INSERT INTO demo_products (name, price) VALUES ('Кабель', 499.00);
UPDATE demo_products SET price = 95000 WHERE name = 'Ноутбук';
Пересборка если изменили код
terraform apply -replace=sless_function.product_catalog -auto-approve
Удаление
terraform destroy -auto-approve
Таблица demo_products в PostgreSQL не удаляется — только k8s-ресурсы.