Рантайм · Inquir Compute

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-деплой даст меньшую задержку рядом с пользователем.

Полноценный 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 функцию

1

Написать handler

Экспортируйте handler(event); event.body приходит строкой JSON.

2

Добавить зависимости

package.json для обычных пакетов, слой — для нативных.

3

Задеплоить

Загрузите через браузерный редактор или 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.

api/resize.mjs
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.