Go to file
2026-03-09 17:45:45 +04:00
hello-node feat: provider v0.1.10 — source_dir (zip внутри провайдера), убран archive провайдер из всех примеров 2026-03-09 17:45:45 +04:00
notes-python feat: provider v0.1.10 — source_dir (zip внутри провайдера), убран archive провайдер из всех примеров 2026-03-09 17:45:45 +04:00
pg-query feat: provider v0.1.9 — namespace hardcoded in client, removed from provider schema and all examples 2026-03-09 15:27:55 +04:00
simple-node feat: provider v0.1.10 — source_dir (zip внутри провайдера), убран archive провайдер из всех примеров 2026-03-09 17:45:45 +04:00
simple-python feat: provider v0.1.10 — source_dir (zip внутри провайдера), убран archive провайдер из всех примеров 2026-03-09 17:45:45 +04:00
README.md feat: provider v0.1.10 — source_dir (zip внутри провайдера), убран archive провайдер из всех примеров 2026-03-09 17:45:45 +04:00

Примеры sless

Примеры показывают различные сценарии использования 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"
}

Примеры

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/          — исходный код функций