sless-primer/POSTGRES/README.md
Naeel 4b04cde84b chore(examples): remove stale examples, keep only POSTGRES
- Deleted: TNAR, demo-event-log, demo-managed-functions, hello-go, hello-node,
  k8s, notes-python, pg-list-python, simple-node, simple-python
- POSTGRES: removed luceUNDnode.tf (commented-out legacy), stress_log_1.txt,
  funcs_list.py; disabled stress_destroy_apply.sh (PG lifecycle stress has
  delete_user bug); added README.md
- examples/README.md: updated to reflect current state (sless_service + sless_job)
2026-03-21 07:49:23 +03:00

101 lines
4.1 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.

# POSTGRES — Пример: Serverless-функции с Managed PostgreSQL
Демонстрирует интеграцию sless (serverless functions) с управляемым PostgreSQL (nubes_postgres).
## Что делает этот пример
1. **Создаёт Managed PostgreSQL** через Terraform (nubes_postgres + nubes_postgres_user + nubes_postgres_database)
2. **Инициализирует БД**: одноразовый `sless_job` создаёт таблицу `terraform_demo_table`
3. **Запускает 3 HTTP-сервиса**:
- `pg-info` (Node.js 20) — версия PostgreSQL-сервера + количество строк в таблице
- `pg-table-reader` (Python 3.11) — чтение всех строк из таблицы
- `pg-table-writer` (Python 3.11) — добавление новой строки
## Структура файлов
```
POSTGRES/
├── main.tf # terraform + провайдеры (sless, nubes_cloud)
├── postgres.tf # Managed PostgreSQL: DB, пользователь, locals с credentials
├── resources.tf # Namespace и сетевые ресурсы
├── functions.tf # sless_job (init) + 3 x sless_service
├── terraform.tfvars # Переменные: realm, s3_uid, token
├── stress_test.sh # Стресс-тест функций (не трогает PG lifecycle)
├── stress_destroy_apply.sh.disabled # ОТКЛЮЧЁН — стресс-тест PG lifecycle
├── code/
│ ├── sql-runner/ # Python: одноразовое выполнение SQL (CREATE TABLE)
│ ├── pg-info/ # Node.js: версия PG + строки
│ ├── table-rw/ # Python: list_rows + add_row
│ ├── pg-stats/ # Python: расширенная статистика PG
│ ├── funcs-list/ # Утилита: листинг функций
│ └── stress-*/ # Функции для стресс-тестирования
└── scripts/ # Вспомогательные скрипты
```
## Как запустить
### Предварительные требования
- Terraform >= 1.3
- Токен sless: `SLESS_TOKEN` (или в `terraform.tfvars`)
- Токен nubes_cloud: `NUBES_TOKEN`
- Доступ к realm (например, `ffd1f598c169b0ae`)
### Запуск
```bash
# 1. Инициализация
terraform init
# 2. Проверка плана
terraform plan
# 3. Применение (создаст PG + сервисы, запустит init job)
terraform apply
```
> Первый `apply` может занять 1015 минут: создание PG-инстанса + kaniko-сборка образов.
### Переменные (`terraform.tfvars`)
```hcl
realm = "ffd1f598c169b0ae" # Реалм (namespace в sless)
s3_uid = "s01234" # S3 bucket для nubes_postgres бэкапов
sless_token = "..." # Bearer-токен для sless API
nubes_token = "..." # Bearer-токен для nubes_cloud API
```
### Вывод после apply
```
Outputs:
table_reader_url = "https://sless.kube5s.ru/v1/namespaces/.../services/pg-table-reader/invoke"
table_writer_url = "https://sless.kube5s.ru/v1/namespaces/.../services/pg-table-writer/invoke"
```
### Вызов функций
```bash
# Информация о PG (Node.js)
curl https://.../services/pg-info/invoke
# Список строк таблицы (Python)
curl https://.../services/pg-table-reader/invoke
# Добавить строку (Python)
curl -X POST https://.../services/pg-table-writer/invoke \
-H "Content-Type: application/json" \
-d '{"title": "Hello from sless!"}'
```
## Стресс-тест
`stress_test.sh` — нагружает функции HTTP-запросами. Запускать после `terraform apply`:
```bash
./stress_test.sh
```
> `stress_destroy_apply.sh.disabled` — ранний тест PG lifecycle (destroy+apply цикл).
> **Отключён** из-за проблем с удалением postgres_user в определённых сценариях.