Functions-as-a-Service на нашем edge в РФ. Node 22, Python 3.12, Bun, Go, Rust — деплой одной командой. Cold-start 38 мс, посекундный биллинг с округлением до 100 мс. HTTP, Schedule, Queue, S3 events — из коробки.
AWS Lambda — медленный cold-start, доллары, странные event-объекты. Свой контейнер — платите за idle. Мы попробовали взять лучшее из двух миров.
Никаких event.requestContext.authorizer. Стандартный Request/Response — как везде. Деплой через CLI, Terraform или GitHub Action.
# 1. деплой одной командой
$ h3 fn deploy ./api/handler.ts \
--runtime=node22 \
--memory=256 \
--timeout=30s \
--domain=api-handler.h3llo.cloud
✓ Bundling (esbuild) 142 ms
✓ Uploading 1.8 MB 980 ms
✓ Deployed v17 · cold-start 38 ms
$ curl https://api-handler.h3llo.cloud/health
{"ok":true,"region":"msk-1","cold":true}
$ curl https://api-handler.h3llo.cloud/health
{"ok":true,"region":"msk-1","cold":false}// handler.ts — стандартный HTTP, никаких кастомных event'ов
import { kv } from "@h3llo/edge";
export default async (req: Request): Promise<Response> => {
const url = new URL(req.url);
if (url.pathname === "/health") {
return Response.json({ ok: true, region: "msk-1" });
}
if (url.pathname === "/count") {
const n = await kv.incr("hits");
return Response.json({ hits: n });
}
return new Response("not found", { status: 404 });
};Замерены при пакете 1.8 MB, no-op handler, 256 MB памяти, регион msk-1. Цифры с нашего production-кластера, не из лабораторных условий.
| Runtime | Версия | Cold-start | Warm latency | Размер пакета |
|---|---|---|---|---|
| Bunbest · cold-start | 1.x | 25 мс | 5 мс | до 50 MB |
| Node.js | 22 / 20 | 38 мс | 8 мс | до 50 MB |
| Deno | 2.x | 42 мс | 9 мс | до 50 MB |
| Python | 3.12 / 3.11 | 60 мс | 12 мс | до 50 MB |
| Go | 1.23 | 18 мс | 4 мс | до 50 MB (binary) |
| Rust | stable | 12 мс | 3 мс | до 50 MB (binary) |
| Custom · Docker | OCI | 120 мс | 8 мс | до 250 MB |
Бинарные runtimes (Go, Rust) запускаются быстрее, но потребуют чуть больше работы при деплое — нужен правильно собранный binary под Linux/amd64.
1 млн вызовов и 400 000 ГБ-секунд в месяц — бесплатно. Дальше — посекундно с округлением до 100 мс. Фиксированный warm pool — для SLA-критичных API.
Реальные практики, бенчмарки, миграции. Без воды и маркетинга — забираете PDF, в понедельник применяете.
Cold-start, idempotency, retry, idempotency keys, observability — что обязательно проверить.
Что под капотом нашего FaaS. Снапшоты процесса, smart-routing, V8 isolates.
Что переписали (немного), что оставили (почти всё), что сломалось (только IAM).
Как держать API-ключи, что писать в audit log, как изолировать вторжение в одну функцию.
Cold/warm latency, p50/p95/p99, цены за 1М вызовов. Цифры с реальных тестов.
Production-ready: function, custom domain, очередь, метрики Grafana. Dev/staging/prod.
Без портала, без YAML-манифестов, без сборки контейнеров. Просто handler → деплой.
Поехали →brew install h3llo/tap/cli · или curl get.h3llo.cloud | sh(req) => Response на Node, Python, Bun, Go, Rust. Без кастомных event-объектов.h3 fn deploy ./handler.ts · 11 секунд. Custom domain выдаём сразу.Стандартный HTTP-handler, посекундный биллинг, cold-start 38 мс, 1 млн вызовов бесплатно. Без vendor lock — забираете handler-файл и деплоите куда угодно.