Node.js 22 serverless-функции с нативными модулями и тёплыми пулами
Обработчики в стиле Lambda на Node.js 22: ES modules, <code>fetch</code> из коробки, нативные npm-пакеты через слои и тёплые пулы под частые вызовы инструментов агента.
Обновлено: 2026-06-28
Кратко
Суть ответа
Node.js 22 serverless-функции с нативными модулями и тёплыми пулами. Node.js 22 с ES modules, fetch, crypto, fs и полным npm-реестром. Нативные пакеты подключаются через слои — без изменений кода.
Когда подходит и когда нет
- Нативные npm-пакеты: sharp, puppeteer, pg
- Существующий Lambda-код на Node.js для миграции
На что обратить внимание
- Простая маршрутизация без нативных зависимостей — Cloudflare Workers быстрее по геолокации.
- Если бандл маленький и нативных пакетов нет, edge-деплой даст меньшую задержку рядом с пользователем.
Ситуация: нагрузка и где обычно ломается
Когда edge-рантайм не подходит для Node.js
Cloudflare Workers и Deno Edge ограничивают набор Node.js API и нативные пакеты: require("fs"), sharp, pg и puppeteer там недоступны.
Верификация JWT, работа с буферами, нативные crypto-расширения — для таких задач надёжнее полноценный Node.js в изолированном контейнере.
Компромиссы
Когда хватает edge или лёгкого рантайма
Простая маршрутизация без нативных зависимостей — Cloudflare Workers быстрее по геолокации.
Если бандл маленький и нативных пакетов нет, edge-деплой даст меньшую задержку рядом с пользователем.
Как Inquir помогает в этом сценарии
Полноценный Node.js 22 в изолированном контейнере
Node.js 22 с ES modules, fetch, crypto, fs и полным npm-реестром. Нативные пакеты подключаются через слои — без изменений кода.
Тот же контракт хендлера, что у AWS Lambda: export async function handler(event). Миграция с Lambda минимальна.
Что вы получаете на платформе
Что даёт рантайм Node.js 22
ES Modules
import/export из коробки, top-level await и встроенный fetch.
Нативные пакеты
Sharp, puppeteer, pg, bcrypt и canvas подключаются через слои — без обходных путей.
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 дешевле и быстрее по геолокации
Вопросы и ответы
Вопросы и ответы
Совместимо с 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.