Node.js 22 serverless-функции с нативными модулями и тёплыми пулами
Handlers в Lambda-стиле на Node.js 22: ES modules, `fetch` из коробки, нативные npm-пакеты через слои, тёплые пулы для AI agent tool loops.
Last updated: 2026-04-20
Answer first
Direct answer
Node.js 22 serverless-функции с нативными модулями и тёплыми пулами. Node.js 22 с ES modules, `fetch`, `crypto`, `fs` и полным npm-реестром. Нативные пакеты — через слои без изменений кода.
When it fits
- Нативные npm-пакеты: sharp, puppeteer, pg
- Существующий Lambda-код на Node.js для миграции
Tradeoffs
- Простая маршрутизация без нативных зависимостей — Cloudflare Workers быстрее по геолокации.
- Если бандл укладывается в 1 МБ и нет нативных пакетов — edge-деплой с меньшей задержкой.
Нагрузка и где ломается
Когда edge-рантайм не подходит для Node.js
Cloudflare Workers и Deno Edge ограничивают набор Node.js API и нативные пакеты. `require("fs")`, `sharp`, `pg`, `puppeteer` — недоступны.
Верификация JWT, работа с буферами, нативные crypto-extensions — полноценный Node.js с изолированным контейнером надёжнее.
Компромиссы
Когда хватает edge или лёгкого рантайма
Простая маршрутизация без нативных зависимостей — Cloudflare Workers быстрее по геолокации.
Если бандл укладывается в 1 МБ и нет нативных пакетов — edge-деплой с меньшей задержкой.
Как помогает Inquir
Полноценный Node.js 22 в изолированном контейнере
Node.js 22 с ES modules, `fetch`, `crypto`, `fs` и полным npm-реестром. Нативные пакеты — через слои без изменений кода.
Тот же handler-контракт, что AWS Lambda: `export async function handler(event)`. Миграция с Lambda — минимальная.
Что получаете
Что даёт Node.js 22 рантайм
ES Modules
`import/export` из коробки, top-level await, встроенный `fetch`.
Нативные пакеты
Sharp, puppeteer, pg, bcrypt, canvas через слои без workaround.
Lambda-совместимый контракт
`export async function handler(event) { return { statusCode, body } }` — как AWS Lambda.
TypeScript
Компиляция при деплое; TypeScript-файлы деплоятся напрямую.
Что делать дальше
Как задеплоить Node.js функцию
Написать handler
Экспортировать `handler(event)`, получить `event.body` — строка JSON.
Добавить зависимости
package.json или слой для нативных пакетов.
Задеплоить
Загрузить через браузерный редактор или CLI; шлюз получает URL.
Пример кода
HTTP handler with native module
The gateway passes an HTTP-shaped event: path, headers, body (string), queryStringParameters. Return statusCode + body. Native modules like sharp work because the runtime is a real container.
import sharp from 'sharp'; // native module — works in containers, not in edge isolates export async function handler(event) { const params = event.queryStringParameters ?? {}; const width = Number(params.width ?? 320); const height = Number(params.height ?? 240); if (!event.body) return { statusCode: 400, body: JSON.stringify({ error: 'body required' }) }; const input = Buffer.from(event.body, 'base64'); const resized = await sharp(input).resize(width, height).jpeg({ quality: 85 }).toBuffer(); return { statusCode: 200, headers: { 'Content-Type': 'image/jpeg' }, body: resized.toString('base64'), isBase64Encoded: true, }; }
Когда подходит
Когда выбирать Node.js
Когда это уместно
- Нативные npm-пакеты: sharp, puppeteer, pg
- Существующий Lambda-код на Node.js для миграции
Когда лучше не трогать
- Простая маршрутизация без зависимостей — edge дешевле по геолокации
FAQ
Вопросы и ответы
Совместимо с AWS Lambda?
Да. Тот же `handler(event)` контракт. `event.body` — строка; парсите через `JSON.parse`. Большинство Lambda-хендлеров портируется без изменений.
Поддерживается TypeScript?
Да. `.ts` файлы компилируются при деплое; отдельный `tsc` шаг не нужен.
How do I handle binary uploads through the gateway?
Binary bodies arrive as base64-encoded strings when the gateway receives binary content. Decode with Buffer.from(event.body, "base64") before processing.