Введение в мир Serverless и AWS Lambda
Современная облачная разработка всё чаще переходит на serverless (бессерверную) архитектуру. Несмотря на название, серверы никуда не исчезают — вы просто перестаёте о них думать. AWS Lambda — это сервис от Amazon, который позволяет запускать код без выделения и управления серверами. Вы платите только за фактическое время выполнения и количество запросов.
В этой статье мы разберём AWS Lambda на JavaScript (Node.js) от самых основ до реальных примеров. Вы узнаете, как создавать, настраивать и деплоить функции, а также познакомитесь с лучшими практиками.
Основы AWS Lambda для Node.js
Что такое Lambda-функция?
Lambda-функция — это изолированный блок кода, который выполняется в ответ на событие (триггер). Функция получает на вход event (данные события) и context (информация о среде выполнения) и возвращает результат.
Структура простейшей Lambda-функции
Базовая функция на Node.js выглядит так:
exports.handler = async (event, context) => {
const name = event.queryStringParameters?.name || 'Гость';
const response = {
statusCode: 200,
body: JSON.stringify({ message: `Привет, ${name}!` }),
};
return response;
};
- exports.handler — обязательная точка входа.
- event — содержит данные, переданные триггером (например, HTTP-запрос из API Gateway).
- context — предоставляет методы для работы с выполнением (время, логгер, идентификатор).
- Функция должна быть async или возвращать Promise.
Триггеры (источники вызова)
Lambda не существует в вакууме. Её могут вызывать:
- API Gateway — HTTP-запросы (REST/WebSocket).
- S3 — загрузка/удаление файлов.
- DynamoDB Streams — изменения в базе данных.
- SQS/SNS — очереди сообщений.
- CloudWatch Events — расписание (cron).
Создание и деплой Lambda-функции
Шаг 1: Настройка окружения
Вам понадобится:
- Учётная запись AWS.
- Установленный AWS CLI и настроенные credentials.
- Node.js (версия 18 или 20, рекомендовано AWS).
Шаг 2: Создание функции через консоль
Это самый быстрый способ для новичков:
- Зайдите в AWS Management Console → Lambda.
- Нажмите "Создать функцию" → "С нуля".
- Укажите имя, выберите runtime Node.js 20.x.
- Нажмите "Создать".
В редакторе кода вставьте наш пример выше и нажмите "Deploy". Готово!
Шаг 3: Деплой с помощью AWS CLI
Для автоматизации деплоя используйте команду:
zip -r function.zip index.js node_modules
aws lambda update-function-code \
--function-name my-first-lambda \
--zip-file fileb://function.zip
Продвинутые сценарии и лучшие практики
Работа с переменными окружения
Никогда не храните секреты в коде. Используйте process.env:
const dbPassword = process.env.DB_PASSWORD;
const tableName = process.env.TABLE_NAME;
Переменные задаются в настройках функции (Configuration → Environment variables).
Обработка ошибок и логирование
Используйте встроенный логгер console.log — он автоматически отправляет логи в CloudWatch:
exports.handler = async (event) => {
console.log('Получен event:', JSON.stringify(event, null, 2));
try {
// ваш код
} catch (error) {
console.error('Ошибка:', error.message);
throw error; // AWS вернёт ошибку инициатору
}
};
Холодный старт (Cold Start)
Если функция долго не используется, AWS "засыпает" её контейнер. При следующем вызове происходит задержка (холодный старт). Рекомендации:
- Используйте Provisioned Concurrency (резервирование контейнеров) для критичных функций.
- Минимизируйте размер пакета — не включайте лишние зависимости.
- Переносите тяжелые операции (подключение к БД) за пределы handler, в глобальную область видимости.
// Плохо: подключение внутри handler
exports.handler = async () => {
const db = await connectToDB(); // каждый раз
};
// Хорошо: глобальный кеш
let db;
exports.handler = async () => {
if (!db) db = await connectToDB();
};
Оптимизация размера и зависимостей
Lambda имеет лимит на размер пакета (50 MB zipped, 250 MB unzipped). Используйте Lambda Layers для общих библиотек (например, aws-sdk уже включён в среду).
Заключение
AWS Lambda на JavaScript — мощный инструмент для построения масштабируемых и экономичных серверных приложений. Вы научились:
- Создавать и деплоить функции.
- Работать с триггерами.
- Применять лучшие практики (логирование, кеширование, холодный старт).
Дальнейшие шаги: изучите AWS SAM или Serverless Framework для автоматизации инфраструктуры, а также попробуйте интегрировать Lambda с DynamoDB и S3. Бессерверная архитектура открывает безграничные возможности — начните с малого и масштабируйтесь!
Не забудьте очистить ресурсы после тестов, чтобы избежать лишних расходов.