sless-primer/pg-list-python
2026-03-19 10:29:26 +04:00
..
code w golang 2026-03-11 17:22:08 +04:00
function.tf w golang 2026-03-11 17:22:08 +04:00
main.tf 1903 2026-03-19 10:29:26 +04:00
README.md tvars 2026-03-11 17:43:06 +04:00
terraform.tfvars.change change 2026-03-11 18:41:01 +04:00
variables.tf w golang 2026-03-11 17:22:08 +04:00

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-ресурсы.