Перейти к основному содержимому

Serverless-функции

Serverless-функции позволяют запускать код без управления серверами — аналог AWS Lambda / Cloudflare Workers. Это отдельная сущность от приложений: свой редактор, свой жизненный цикл, без привязки к Git.

:::info Тарифный план Создание функций доступно на платных планах. Если функции недоступны, панель предложит обновить план. :::

Рантаймы

Поддерживаются Go, Python и Node.js. Код пишется прямо в многофайловом редакторе (Monaco) — Git-репозиторий не требуется. Функция может состоять из нескольких файлов, включая файл зависимостей (go.mod, requirements.txt или package.json).

Обработчик

Контракт совместим с AWS Lambda Function URL (payload v2.0): обработчик принимает (event, context) и возвращает ответ со statusCode, headers и body. В event передаются метод, путь, заголовки, query-параметры и тело запроса.

Точка входа указывается в формате файл.метод — имя файла без расширения и имя экспортированной функции (например, handler.Handler, main.handler, index.handler).

Go

Точка входа: handler.Handler

package handler

import (
"context"

"github.com/aws/aws-lambda-go/events"
)

func Handler(ctx context.Context, req events.LambdaFunctionURLRequest) (events.LambdaFunctionURLResponse, error) {
return events.LambdaFunctionURLResponse{
StatusCode: 200,
Headers: map[string]string{"Content-Type": "application/json"},
Body: `{"message": "Hello from Go!"}`,
}, nil
}

Python

Точка входа: main.handler

def handler(event, context):
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": '{"message": "Hello from Python!"}',
}

Node.js

Точка входа: index.handler

export const handler = async (event, context) => {
return {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ message: "Hello from Node.js!" }),
};
};

Бинарные данные

Поддерживаются бинарные тела запроса и ответа:

  • Запрос — сырые байты доступны как rawBody (Node, Buffer), raw_body (Python, bytes) или body_base64 (Go, base64-строка).
  • Ответ — верните Buffer/bytes либо установите isBase64Encoded (Node) / is_base64_encoded (Python, Go).

Создание и деплой

  1. Откройте проект → Функции → создать функцию.
  2. Выберите рантайм, отредактируйте файлы и укажите точку входа.
  3. При необходимости задайте переменные окружения и подключите приватную сеть (VPC).
  4. Нажмите «Создать и задеплоить».

Прогресс отображается по шагам (создание → сборка и деплой), статус приходит в реальном времени. После успешного деплоя открывается страница функции.

Вызов

Каждая функция получает публичный HTTP-эндпоинт и принимает любой HTTP-метод:

POST https://fn.tatnet.app/{project_id}/{function_id}

Сборка и версии

  • При деплое код собирается в изолированной микро-ВМ, артефакт сохраняется в объектном хранилище.
  • Каждый деплой создаёт версию — снимок кода, к которому можно вернуться.
  • Статус сборки приходит в реальном времени через SSE.

Масштабирование до нуля

Простаивающие функции автоматически останавливаются и поднимаются заново при следующем вызове.

Переменные окружения

Переменные окружения задаются в панели или через API. Для Node.js доступен встроенный AWS SDK — можно работать с объектным хранилищем без дополнительной установки зависимостей.

Приватная сеть (VPC)

Функцию можно подключить к VPC аккаунта, чтобы из её кода обращаться к приватным ресурсам (например, к ВМ) по внутренней сети.