Go to file
2026-03-19 10:29:26 +04:00
demo-event-log fix: all examples use test endpoints (deck-api-test, sless-api.kube5s.ru) 2026-03-17 2026-03-17 18:53:49 +03:00
demo-managed-functions 1903 2026-03-19 10:29:26 +04:00
hello-go 1903 2026-03-19 10:29:26 +04:00
hello-node 1903 2026-03-19 10:29:26 +04:00
notes-python 1903 2026-03-19 10:29:26 +04:00
pg-list-python 1903 2026-03-19 10:29:26 +04:00
POSTGRES 1903 2026-03-19 10:29:26 +04:00
simple-node 1903 2026-03-19 10:29:26 +04:00
simple-python 1903 2026-03-19 10:29:26 +04:00
TNAR 1903 2026-03-19 10:29:26 +04:00
.gitignore change 2026-03-11 18:41:01 +04:00
README.md 1903 2026-03-19 10:29:26 +04:00

Примеры использования sless

Обзор платформы

sless — система управления serverless-функциями на базе Kubernetes. Разработчик загружает код функции, платформа собирает из него Docker-образ, разворачивает его в кластере и предоставляет HTTP-эндпоинт для вызова. Всё описывается декларативно через Terraform.

Основные ресурсы провайдера

Ресурс Назначение
sless_function Описывает функцию: язык, точку входа, лимиты, переменные окружения. При создании загружает код и запускает его сборку в образ. Сама по себе недоступна снаружи — нужен триггер или задание.
sless_trigger Публикует функцию: тип http создаёт публичный URL, тип cron — запуск по расписанию.
sless_job Запускает функцию однократно и ожидает завершения. Используется для одноразовых операций: инициализация БД, миграции, пакетная обработка.

Стандартная связка для HTTP API: sless_function + sless_trigger с type = "http" — в результате функция доступна по URL вида https://sless.kube5s.ru/fn/<namespace>/<имя-функции>.


Требования

  • Terraform >= 1.0
  • JWT-токен для аутентификации в sless API
  • Доступ к https://sless.kube5s.ru

Конфигурация провайдера

Во всех примерах файл main.tf содержит блок провайдера. Токен передаётся через переменную, значение которой задаётся в terraform.tfvars:

provider "sless" {
  endpoint       = "https://sless.kube5s.ru"
  token          = var.token
  nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1"
}

Namespace функций вычисляется автоматически из JWT-токена: sless-{sha256[:8]}.

Перед запуском любого примера откройте файл terraform.tfvars в директории примера и впишите свой токен Nubes API:

token = "ваш токен Nubes API"

Токен выдаётся в личном кабинете Nubes. Файл terraform.tfvars добавлен в .gitignore — он не попадёт в репозиторий.


Примеры

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

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

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

# Вызов HTTP-функции с передачей имени:
curl -s -X POST https://sless.kube5s.ru/fn/<namespace>/hello-http \
  -H 'Content-Type: application/json' -d '{"name":"World"}'

# Результат задания:
terraform output job_message

hello-go — минимальный пример на Go 1.23

Аналог hello-node, но на Go. Демонстрирует поддержку Go-рантайма: HTTP-функция и одноразовое задание. Код пользователя оформляется как пакет handler с функцией Handle(event).

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

terraform output job_message
terraform output trigger_url

pg-list-python — выборка данных из PostgreSQL (Python)

Минимальный пример работы с базой данных: одна HTTP-функция читает список записей из таблицы PostgreSQL и возвращает их в JSON. Таблица с тестовыми данными создаётся автоматически при первом вызове. Нет заданий, нет инициализации — только функция и триггер.

Переменные:

Переменная Описание Значение по умолчанию
pg_dsn Строка подключения к PostgreSQL postgres://sless:sless-pg-password@postgres.sless.svc.cluster.local:5432/sless?sslmode=disable
cd pg-list-python
terraform init
terraform apply -auto-approve

# URL функции выводится после применения:
terraform output catalog_url

# Запрос к функции:
curl -s $(terraform output -raw catalog_url)

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

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

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

terraform output job_result
curl -s https://sless.kube5s.ru/fn/<namespace>/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.kube5s.ru/fn/<namespace>/simple-node-time-display

notes-python — CRUD API на Python с PostgreSQL

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

Переменные:

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

# Статус инициализации базы данных:
terraform output db_init_table_status
terraform output db_init_index_status

# Создать запись:
curl -s -X POST "$(terraform output -raw notes_url)/add?title=Hello&body=World"

# Получить список записей:
curl -s $(terraform output -raw notes_list_url)

# Обновить запись (id из предыдущего ответа):
curl -s -X POST "$(terraform output -raw notes_url)/update?id=1&title=Updated&body=New+body"

# Удалить запись:
curl -s -X POST "$(terraform output -raw notes_url)/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            — ресурсы: функции, триггеры, задания
├── variables.tf    — входные переменные
├── terraform.tfvars — значения переменных (не коммитится в git)
└── code/           — исходный код функций