Go to file
2026-03-11 10:49:36 +04:00
hello-node test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах 2026-03-11 10:49:36 +04:00
notes-python test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах 2026-03-11 10:49:36 +04:00
push-sample test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах 2026-03-11 10:49:36 +04:00
simple-node test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах 2026-03-11 10:49:36 +04:00
simple-python test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах 2026-03-11 10:49:36 +04:00
DESTROY_ROUTE_CLEANUP_BUG.md docs: update progress.md, errors/log.md; add gitignore for dist/ and tfstate backups 2026-03-09 20:29:27 +04:00
README.md docs: clarify sless_function description 2026-03-09 20:24:59 +04:00
run_terraform_examples.sh docs: update progress.md, errors/log.md; add gitignore for dist/ and tfstate backups 2026-03-09 20:29:27 +04:00

Примеры sless

Что такое sless

sless — платформа для запуска serverless-функций в Kubernetes-кластере.

Код на Python или Node.js загружается в платформу, которая собирает Docker-образ, деплоит его в кластер и публикует HTTP-эндпоинт. Всё управляется через Terraform.

Ресурсы

Ресурс Что делает
sless_function Загружает код и собирает Docker-образ. Сама по себе не принимает запросы — нужен триггер или джоб
sless_trigger Публикует функцию — либо как HTTP-эндпоинт, либо по расписанию (cron)
sless_job Запускает функцию один раз (например, для инициализации БД) и ждёт результата

Типичный сценарий: sless_function с кодом + sless_trigger с type = "http" → публичный URL вида https://sless-api.kube5s.ru/fn/default/имя-функции.


Примеры показывают различные сценарии использования serverless функций через Terraform провайдер terra.k8c.ru/naeel/sless.

Требования

  • Terraform >= 1.0
  • Доступ к https://sless-api.kube5s.ru

Провайдер

Во всех примерах main.tf содержит:

provider "sless" {
  endpoint = "https://sless-api.kube5s.ru"
  token    = "dev-token-change-me"
}

Примеры

simple-python — джоб передаёт результат в HTTP-функцию (Python)

При apply запускается джоб, его вывод передаётся в HTTP-функцию через env_vars.

cd simple-python
terraform init
terraform apply -auto-approve

# Что вернул джоб (время на момент деплоя):
terraform output job_result

# Проверить функцию:
curl -s https://sless-api.kube5s.ru/fn/default/simple-py-time-display

simple-node — то же самое, но на Node.js 20

cd simple-node
terraform init
terraform apply -auto-approve

terraform output job_result
curl -s https://sless-api.kube5s.ru/fn/default/simple-node-time-display

hello-node — минимальный пример на Node.js

Две независимые функции: HTTP-функция (возвращает приветствие) и одноразовый джоб (суммирует числа).

cd hello-node
terraform init
terraform apply -auto-approve

# Проверить HTTP-функцию:
curl -s -X POST https://sless-api.kube5s.ru/fn/default/hello-http \
  -H 'Content-Type: application/json' -d '{"name":"World"}'

# Посмотреть результат джоба:
terraform output job_message

notes-python — CRUD API на Python + PostgreSQL

Полноценное приложение: инициализация схемы БД через джобы, CRUD-функция, read-only функция для списка записей.

Переменные:

Переменная Описание Дефолт
pg_dsn DSN для подключения к PostgreSQL postgres://sless:sless-pg-password@postgres.sless.svc.cluster.local:5432/sless?sslmode=disable
cd notes-python
terraform init

# Опционально — переопределить DSN:
# export TF_VAR_pg_dsn="postgres://user:pass@host:5432/db?sslmode=disable"

terraform apply -auto-approve

# Проверить инициализацию БД:
terraform output db_init_table_status
terraform output db_init_index_status

# URL функций:
terraform output notes_url       # CRUD
terraform output notes_list_url  # список всех записей

# Создать запись:
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/add?title=Hello&body=World"

# Список записей:
curl -s https://sless-api.kube5s.ru/fn/default/notes-list

# Обновить (id из предыдущего ответа):
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/update?id=1&title=Updated&body=New+body"

# Удалить:
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/delete?id=1"

Общие команды

# Посмотреть текущее состояние ресурсов:
terraform show

# Пересоздать конкретный ресурс:
terraform apply -replace=sless_function.имя -auto-approve

# Повторно запустить джоб — увеличить run_id в .tf файле, затем:
terraform apply -auto-approve

# Удалить все ресурсы примера:
terraform destroy -auto-approve

Структура каждого примера

пример/
├── main.tf        — провайдер
├── *.tf           — ресурсы (функции, триггеры, джобы)
├── outputs.tf     — URLs и статусы после apply
├── variables.tf   — входные переменные (если есть)
└── code/          — исходный код функций