Функции на Node.js с нативными модулями и тёплыми пулами
Функции на Node.js 22 работают в изолированных контейнерах: вся экосистема npm, нативные аддоны и возможности ES2024 без ограничений V8-изолятов. Подключайте функции к HTTP-маршрутам, вебхукам или шагам пайплайна. Регулярные запуски настраиваются в расписании пайплайна из того же рабочего пространства.
Обновлено: 2026-10-26
Где edge-среды выполнения ограничивают Node.js
Среды выполнения на edge (Cloudflare Workers, Vercel Edge Functions) запускают подмножество Node.js внутри V8-изолятов. Нативные аддоны вроде sharp, bcrypt и grpc-node, доступ к файловой системе, сабпроцессы и соединения с приватной сетью там ограничены или недоступны.
Платформы в стиле Lambda, как AWS Lambda, поддерживают полный Node.js, но требуют самостоятельно собрать API Gateway, EventBridge, CloudWatch и Layers, прежде чем первая функция увидит трафик.
Чего не хватает и Lambda, и edge
Lambda даёт полный Node.js, но стоимость эксплуатации связки API Gateway + CloudWatch + IAM-роли для небольшой команды ощутима.
Среды выполнения на edge быстры по всему миру, но вы теряете нативные модули и всё, чему нужно настоящее POSIX-окружение.
Полноценный Node.js за одним шлюзом
Inquir запускает Node.js 22 в Docker-контейнерах — тот же Node.js, что у вас локально, с той же поддержкой нативных модулей. Объявите зависимости, включая нативные аддоны, в inquir.yaml или package.json — артефакт деплоя соберёт платформа.
HTTP-маршруты, обработчики вебхуков и шаги пайплайнов вызывают одни и те же ID функций Node.js. Расписание запускает пайплайн, а его шаги используют эти функции. Один деплой, одна модель секретов, одна история выполнения.
Возможности среды выполнения Node.js
Вся экосистема npm
sharp, bcrypt, better-sqlite3, grpc, canvas и любой нативный аддон, который собирается под Node.js 22, работают без прослоек.
ES2024 и top-level await
Используйте свежие возможности ECMAScript, ESM-импорты и top-level await в обработчиках .mjs без транспиляции.
Тёплые контейнеры для постоянного трафика
Включите тёплые пулы, чтобы прогревать контейнеры Node.js, — это срезает задержку p99 на оживлённых HTTP-маршрутах и в циклах вызова инструментов агентами.
Шлюз и пайплайны вместе
Используйте одну функцию в HTTP-маршрутах и шагах пайплайнов. Пайплайны могут работать по расписанию или продолжать обработку в фоне.
Как развернуть функцию на Node.js
Написать обработчик
Экспортируйте async-функцию handler(event) из файла .mjs. Используйте ESM-импорты. Форма события совпадает с HTTP-событиями AWS Lambda для совместимости.
Объявить зависимости
Перечислите npm-пакеты в build.dependencies в inquir.yaml или в package.json. Нативные аддоны собираются при деплое; их библиотеки ОС добавьте в build.system. Dockerfile не требуется.
Подключить маршруты и шаги пайплайна
Привяжите функцию к HTTP-маршруту шлюза или шагу пайплайна. Расписание и фоновое выполнение настраиваются у пайплайна, который использует тот же обработчик.
HTTP-обработчик с нативным модулем
Шлюз передаёт событие в форме HTTP-запроса: path, headers, body (строка), queryStringParameters. Верните statusCode + body. Нативные модули вроде sharp работают, потому что среда выполнения — настоящий контейнер.
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, bcrypt, grpc), которым нужен настоящий контейнер Node.js.
- Нужно, чтобы HTTP API, обработчики вебхуков и пайплайны с фоновыми запусками и расписаниями использовали один каталог функций Node.js.
Когда лучше выбрать другое
- Крошечная логика на чистом JS, которой выгодно работать в сотнях edge-точек ради миллисекундной задержки по всему миру, — для этого возьмите edge-среду выполнения на V8-изолятах.
Частые вопросы
Какая версия Node.js в Inquir?
Node.js 22. Поддерживаются ESM (.mjs), CommonJS (.cjs) и TypeScript (компилируется перед деплоем).
Можно ли использовать ES-модули (import/export)?
Да. Назовите файлы .mjs или задайте "type": "module" в package.json. Top-level await в ESM-обработчиках работает.
Как принимать бинарные загрузки через шлюз?
Когда шлюз получает бинарное содержимое, тело приходит строкой в base64. Перед обработкой декодируйте его через Buffer.from(event.body, "base64").