Контактна форма на React-сайті при 2000+ заявок на день почала падати: відповідь приходила через 30 секунд, листи губилися. Старий моноліт на EC2 не справлявся з піками. Замінили його на AWS Lambda — час відповіді впав до 300 мс, вартість обробки однієї форми — частки цента ($0.0002 за запит). Серверлес-архітектура позбавляє від управління серверами: ви фокусуєтеся на коді, а AWS масштабує навантаження. Але холодний старт і робота з базами даних потребують акуратного проєктування. Ми розберемо типові сценарії, покажемо код і дамо готові рішення. За 5 років роботи ми виконали понад 50 проектів на AWS Lambda, гарантуємо якість завдяки сертифікованим інженерам.
Сфери застосування Lambda
Lambda ефективна для асинхронних та епізодичних завдань. Порівняно з класичним сервером на EC2, Lambda масштабується автоматично та коштує у понад 100 разів дешевше при невеликому навантаженні (наприклад, $0.05/міс проти $8/міс).
| Критерій | AWS Lambda | AWS EC2 |
|---|---|---|
| Управління сервером | Не потрібно | Повне управління |
| Масштабування | Автоматичне | Ручне / автоскейлінг |
| Холодний старт | 100–500 мс | Немає |
| Ціна | За виконання | За час роботи |
| Ліміт часу | 15 хвилин | Безліміт |
Підходить: обробка форм зворотного зв'язку, генерація PDF/зображень за запитом, вебхуки від платіжних систем та CRM, ресайз зображень при завантаженні, планувальники завдань (cron через EventBridge), API-проксі для сторонніх сервісів.
Не підходить: довготривалі з'єднання (WebSocket потребує окремого сервісу), завдання довше 15 хвилин, високочастотні операції з БД без connection pooling. У таких випадках Lambda не тільки дорожча, але й повільніша: при 5000 запитів/с EC2 з автоскейлінгом обійдеться дешевше, ніж Provisioned Concurrency.
Чому AWS Lambda вигідніша за традиційний сервер?
З точки зору витрат Lambda виграє при нерівномірному навантаженні. На EC2 ви платите за запущений сервер 24/7, навіть якщо він обробляє запити раз на годину. Lambda оплачується за викликами — економія на простої сягає 90%. AWS Lambda Developer Guide наводить приклад: сайт з 10 000 запитів на день на EC2 t3.micro обійдеться ≈ $8/міс, а Lambda — $0.05 за виконання. При цьому не потрібно налаштовувати автоскейлінг, патчити ОС та стежити за моніторингом. Наші клієнти економлять до 70% на інфраструктурі, переходять на Lambda.
Як Lambda обробляє форму? Приклад коду
Контактна форма на React-сайті відправляє POST-запит на API Gateway, який тригерить Lambda. Функція валідує дані за допомогою Zod і відправляє email через SES. Код:
import { APIGatewayProxyHandler } from "aws-lambda";
import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
import { z } from "zod";
const ses = new SESClient({ region: "eu-west-1" });
const ContactSchema = z.object({
name: z.string().min(2).max(100),
email: z.string().email(),
message: z.string().min(10).max(2000),
});
export const handler: APIGatewayProxyHandler = async (event) => {
const headers = {
"Access-Control-Allow-Origin": "https://your-site.com",
"Content-Type": "application/json",
};
try {
const body = JSON.parse(event.body || "{}");
const data = ContactSchema.parse(body);
await ses.send(new SendEmailCommand({
Source: "[email protected]",
Destination: { ToAddresses: ["[email protected]"] },
Message: {
Subject: { Data: `Нове повідомлення від ${data.name}` },
Body: {
Text: { Data: `Від: ${data.name} <${data.email}>\n\n${data.message}` }
}
}
}));
return { statusCode: 200, headers, body: JSON.stringify({ ok: true }) };
} catch (error) {
if (error instanceof z.ZodError) {
return { statusCode: 400, headers, body: JSON.stringify({ errors: error.errors }) };
}
console.error(error);
return { statusCode: 500, headers, body: JSON.stringify({ error: "Internal error" }) };
}
};
Методи зниження холодного старту
Холодний старт — затримка на ініціалізацію після тривалого простою. На Node.js 20 він становить 200–500 мс, на Python — 100–300 мс. Якщо для вас критичний субсекундний час відповіді, використовуйте один із методів:
| Метод | Опис | Додаткові витрати |
|---|---|---|
| Provisioned Concurrency | N прогрітих екземплярів | $0.015 за екземпляр/год |
| esbuild + tree-shaking | Зменшення розміру бандла | Немає |
| SnapStart (Java) | Знімок стану після ініціалізації | Немає |
| Пінг-запити | EventBridge раз на 5 хвилин | Мізерно |
Приклад підготовки клієнтів поза handler (виконується один раз):
const dbClient = new DynamoDBClient({ region: "eu-west-1" });
const sesClient = new SESClient({ region: "eu-west-1" });
export const handler = async (event) => {
// handler використовує вже ініціалізовані клієнти
};
Типові помилки та їх уникнення
- Надмірний розмір бандла: включення всіх залежностей без tree-shaking збільшує холодний старт на 200–500 мс.
- Створення клієнтів всередині handler: кожен виклик створює нове з'єднання з базою — призводить до проблеми N+1.
- Ігнорування ліміту часу: якщо функція виконується довше таймауту (макс. 15 хв), вона завершується з помилкою.
- Відсутність обробки помилок: не перехоплені винятки призводять до повторних викликів і витрат.
Як підключити Lambda до бази даних?
Стандартне TCP-з'єднання до PostgreSQL/MySQL у Lambda створює нове з'єднання на кожен виклик — при 1000 RPS база захлинається. Рішення:
| Рішення | Особливості | Ціна |
|---|---|---|
| RDS Proxy | Пул з'єднань перед RDS | +$0.015 за vCPU/год |
| DynamoDB | Нативний serverless, без з'єднань | За запитами |
| PlanetScale / Neon | Serverless-БД з HTTP API | За використанням |
Для великої кількості одночасних викликів RDS Proxy може стати вузьким місцем — у таких випадках переходять на DynamoDB або шардування.
Процес розробки та деплою
- Проєктування: визначення тригерів, ролей IAM, таймаутів та пам'яті.
- Розробка: написання функції на TypeScript з валідацією та обробкою помилок.
- Локальне тестування: запуск через SAM CLI або Docker з емуляцією API Gateway.
- Збірка: використання esbuild для бандла (tree-shaking, мініфікація).
- Деплой: через AWS SAM (template.yaml) — перший раз
sam deploy --guided, потімsam deploy. - Моніторинг: налаштування дашбордів CloudWatch, алертів за помилками та часом виконання.
Ми використовуємо AWS SAM для інфраструктури як код. Приклад template.yaml:
AWSTemplateFormatVersion: "2010-10-09"
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: nodejs20.x
Timeout: 10
MemorySize: 256
Environment:
Variables:
NODE_ENV: production
Resources:
ContactFormFunction:
Type: AWS::Serverless::Function
Properties:
Handler: dist/handlers/contact-form.handler
Events:
Api:
Type: HttpApi
Properties:
Path: /contact
Method: POST
Policies:
- SESCrudPolicy:
IdentityName: your-site.com
Команди:
npm run build
sam build
sam deploy --guided
sam deploy
Логування та трейсинг
AWS Lambda Powertools — офіційна бібліотека для структурованого логування, трейсингу через X-Ray та метрик через CloudWatch EMF.
import { Logger } from "@aws-lambda-powertools/logger";
import { Tracer } from "@aws-lambda-powertools/tracer";
const logger = new Logger({ serviceName: "contact-form" });
const tracer = new Tracer({ serviceName: "contact-form" });
export const handler = tracer.captureLambdaHandler(async (event) => {
logger.addContext(context);
logger.info("Processing contact form", { email: event.body?.email });
// ...
});
Детальніше про ціноутворення
Вартість Lambda: $0.20 за 1M запитів + час виконання ($0.0000166667 за кожну 1ms). Для функції з MemorySize 256 MB і часом 300 ms один запит коштує ~$0.00000125. 10 000 запитів на день обійдуться у $0.375 на місяць.
Що входить в роботу
- Архітектурне проєктування: вибір тригерів, балансування холодного старту
- Розробка функцій на TypeScript з валідацією та обробкою помилок
- Налаштування CI/CD через GitHub Actions: збірка, тести, деплой
- Документація API та опис інфраструктури
- Моніторинг: дашборди CloudWatch, алерти на помилки та час виконання
- Навчання команди: code-review, керівництво з подальшої підтримки
Строки
Одна Lambda-функція з деплоєм через SAM — 1–2 дні. Набір з 5–7 функцій з CI/CD та моніторингом — 5–7 днів. Наші інженери мають багаторічний досвід, виконали десятки проєктів різної складності. Точні строки залежать від інтеграцій. Отримайте консультацію з архітектури рішення — підготуємо детальну пропозицію під ключ.
Серверлес архітектура сайту на Lambda дозволяє гнучко масштабуватися. Порівняння Lambda vs EC2 показує, що Lambda виграє за вартістю та простотою обслуговування. Приклади serverless функцій включають обробку форм, генерацію PDF, вебхуки.







