| .. | ||
| code | ||
| functions.tf | ||
| main.tf | ||
| postgres.tf | ||
| README.md | ||
| resources.tf | ||
POSTGRES — Пример: Serverless-функции с Managed PostgreSQL
Демонстрирует интеграцию sless (serverless functions) с управляемым PostgreSQL (nubes_postgres).
Что делает этот пример
- Создаёт Managed PostgreSQL через Terraform (nubes_postgres + nubes_postgres_user + nubes_postgres_database)
- Инициализирует БД: одноразовый
sless_jobсоздаёт таблицуterraform_demo_table - Запускает 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может занять 10–15 минут: создание 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 в определённых сценариях.