sless-primer/POSTGRES
2026-03-30 07:18:48 +03:00
..
code fix: sync vm stress test docs and ensure read-only behavior 2026-03-30 07:18:48 +03:00
scripts 1903 2026-03-19 10:29:26 +04:00
bug_hunter.sh 0 2026-03-22 17:08:18 +04:00
chaos_marathon.sh 0 2026-03-22 17:08:18 +04:00
deploy_and_run_chaos.sh 0 2026-03-22 17:08:18 +04:00
full_test.sh feat(POSTGRES): stress-тесты — 10 сервисов, full_test.sh 48/48 PASS 2026-03-21 08:45:19 +03:00
functions.tf fix: sync vm stress test docs and ensure read-only behavior 2026-03-30 07:18:48 +03:00
main.tf fix: sync vm stress test docs and ensure read-only behavior 2026-03-30 07:18:48 +03:00
postgres.tf chore(examples): remove stale examples, keep only POSTGRES 2026-03-21 07:49:23 +03:00
README.md chore(examples): remove stale examples, keep only POSTGRES 2026-03-21 07:49:23 +03:00
resources.tf chore(examples): remove stale examples, keep only POSTGRES 2026-03-21 07:49:23 +03:00
stress_destroy_apply.sh.disabled chore(examples): remove stale examples, keep only POSTGRES 2026-03-21 07:49:23 +03:00
stress_test.sh chore(examples): remove stale examples, keep only POSTGRES 2026-03-21 07:49:23 +03:00
test_cache_matrix.sh fix: sync vm stress test docs and ensure read-only behavior 2026-03-30 07:18:48 +03:00

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)

Запуск

# 1. Инициализация
terraform init

# 2. Проверка плана
terraform plan

# 3. Применение (создаст PG + сервисы, запустит init job)
terraform apply

Первый apply может занять 1015 минут: создание PG-инстанса + kaniko-сборка образов.

Переменные (terraform.tfvars)

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"

Вызов функций

# Информация о 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:

./stress_test.sh

stress_destroy_apply.sh.disabled — ранний тест PG lifecycle (destroy+apply цикл). Отключён из-за проблем с удалением postgres_user в определённых сценариях.