Serverless функции на JavaScript: AWS Lambda и аналоги для разработчика

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Serverless на JavaScript: Как перестать думать о серверах и начать писать код

Представьте: вы написали крутой сервис, запустили, а через месяц он никому не нужен. Вы платите за сервер, который простаивает. Или наоборот — на вас обрушился хабраэффект, сервер падает, а вы в 3 часа ночи правите nginx. Знакомо? Есть способ избавиться от этой головной боли — serverless функции на JavaScript.

Serverless (или бессерверные вычисления) — это не магия, а модель, где вы пишете только код, а провайдер (AWS, Google, Yandex) сам решает, когда, где и сколько ресурсов выделить. Вы платите только за время выполнения и количество запросов. Никаких «вечно включенных» виртуалок. Для JavaScript-разработчика это особенно удобно: Node.js — родная среда для AWS Lambda, Google Cloud Functions и Yandex Cloud Functions.

В этой статье мы не просто расскажем теорию. Мы напишем реальные функции, сравним провайдеров и дадим чек-лист, чтобы вы не наступили на грабли. Поехали!

Что такое serverless функция и зачем она JS-разработчику?

Serverless функция — это кусочек кода (обычно одна функция), который выполняется в ответ на событие. Событием может быть HTTP-запрос, загрузка файла в S3, запись в базу данных или даже сигнал от таймера (cron).

Почему это удобно для JavaScript:

  • Быстрый старт — не нужно настраивать сервер, достаточно залить код.
  • Автомасштабирование — функция сама размножится под нагрузку.
  • Экономия — пока никто не обращается к функции, вы не платите ни копейки.
  • Экосистема — Node.js поддерживается всеми крупными провайдерами.

Типичные сценарии: обработка вебхуков, генерация превью изображений, рассылка писем, валидация форм, парсинг данных, создание микросервисов. Всё, что можно запустить по требованию.

AWS Lambda — король serverless JavaScript

Amazon Web Services Lambda — самый популярный сервис. Он появился первым и до сих пор задаёт стандарты. Давайте напишем простую функцию, которая принимает JSON и возвращает ответ.

Код для AWS Lambda на Node.js 20:

export const handler = async (event) => {
  try {
    const { name } = JSON.parse(event.body || '{}');
    const message = `Привет, ${name || 'гость'}! Ты успешно вызвал serverless функцию.`;
    
    return {
      statusCode: 200,
      headers: {
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*',
      },
      body: JSON.stringify({ message, timestamp: Date.now() }),
    };
  } catch (error) {
    return {
      statusCode: 400,
      body: JSON.stringify({ error: 'Некорректный JSON' }),
    };
  }
};

Обратите внимание: функция называется handler. Это стандартное имя для точки входа. Параметр event содержит всё, что пришло от API Gateway — заголовки, тело, параметры запроса. Вы возвращаете объект с statusCode и body.

Как это работает: вы создаёте функцию в консоли AWS, загружаете код (или используете SAM/Serverless Framework), настраиваете триггер — например, HTTP-эндпоинт через API Gateway. Всё. Мир стал проще.

Холодный старт и как с ним жить

Главный минус Lambda — холодный старт. Если функция долго не вызывалась, при первом запросе среда загружается заново. Это может занять 200-500 мс. Для высоконагруженных API это критично. Решения:

  • Держите функцию «тёплой» с помощью CloudWatch Events (каждые 5 минут пинговать).
  • Уменьшайте размер пакета — не тащите лишние npm-пакеты.
  • Используйте Provisioned Concurrency (но это дороже).

Для большинства микросервисов холодный старт — не проблема. Но если вы пишете чат-бота, где важна скорость, учитывайте это.

Google Cloud Functions — простота и интеграция с Firebase

Google Cloud Functions (GCF) — второй по популярности вариант. Он тесно связан с Firebase, что делает его идеальным для мобильных и веб-приложений. Код практически идентичен Lambda, но есть нюансы.

Пример Google Cloud Function на JavaScript:

const functions = require('@google-cloud/functions-framework');

functions.http('helloWorld', (req, res) => {
  const name = req.query.name || req.body.name || 'мир';
  res.json({
    message: `Привет, ${name}!`,
    platform: 'Google Cloud Functions',
  });
});

Здесь мы используем @google-cloud/functions-framework, чтобы запускать функции локально. Это удобно для отладки. В облаке вы просто загружаете код, и Google сам подхватывает экспортированную функцию.

Что крутого в GCF:

  • Бесплатный лимит — 2 миллиона запросов в месяц (щедрее, чем у AWS).
  • Firebase интеграция — можно триггерить функции от аутентификации, Realtime Database, Firestore.
  • Gen 2 — новое поколение функций с более быстрым холодным стартом.

Yandex Cloud Functions — российский аналог

Если вам нужно работать в России или с данными, которые должны храниться локально, Yandex Cloud Functions — отличный выбор. Он полностью совместим с Node.js и имеет понятную консоль.

Пример функции для Yandex Cloud:

exports.handler = async (event, context) => {
  const name = event.queryStringParameters?.name || 'мир';
  
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: `Привет, ${name}! Это Yandex Cloud Functions.`,
      requestId: context.requestId,
    }),
  };
};

Структура похожа на AWS Lambda, но есть особенности:

  • Вместо event.body нужно смотреть event.httpMethod и event.queryStringParameters.
  • Триггеры настраиваются через консоль — HTTP, таймер, Message Queue, Object Storage.
  • Есть бесплатный лимит — 1 миллион запросов в месяц.

Yandex Cloud Functions хорошо подходит для интеграции с другими сервисами Яндекса (например, YandexGPT, SpeechKit). Если вы строите AI-решения на русском — это ваш выбор.

Сравнение провайдеров serverless для JavaScript

Чтобы вам было проще выбрать, вот краткая таблица:

Параметр AWS Lambda Google Cloud Functions Yandex Cloud Functions
Холодный старт Средний (200-500 мс) Быстрый в Gen 2 Средний

Блоги

Рекомендаций по книгам