Serverless: Lambda и API Gateway
Запускаем код в облаке вообще без серверов — на функциях Lambda.
Lambda — сервис запуска кода по событию без управления серверами; вы загружаете функцию, а AWS сам её запускает, масштабирует и тарифицирует по числу вызовов и времени работы.
Что такое serverless
«Serverless» не значит «без серверов» — серверы есть, но вы их не видите и не обслуживаете. Вы пишете функцию, а инфраструктуру — где запустить, как масштабировать — полностью берёт на себя AWS. Когда запросов нет, не работает ничего и платить не за что. Пришёл запрос — функция мгновенно запускается.
Как устроена Lambda
Функция Lambda — это просто код, который срабатывает на событие: HTTP-запрос, загрузка файла в S3, сообщение в очереди, расписание. Вы задаёте обработчик (handler), а AWS вызывает его, передавая данные события.
def handler(event, context):
name = event.get("name", "мир")
message = f"Привет, {name}!"
print(message)
return {"statusCode": 200, "body": message}
# имитация вызова Lambda для наглядности
print(handler({"name": "AWS"}))Вывод:
Привет, AWS!
{'statusCode': 200, 'body': 'Привет, AWS!'}API Gateway — дверь снаружи
Сама по себе Lambda не имеет адреса в интернете. Чтобы вызвать её HTTP-запросом, перед ней ставят API Gateway — сервис, который принимает HTTP-запросы и передаёт их в Lambda, а ответ возвращает клиенту. Так из функции получается полноценный REST-API.
Пользователь -> HTTP GET /hello?name=AWS
|
API Gateway (принимает запрос, проверяет, маршрутизирует)
|
Lambda handler(event) -> возвращает "Привет, AWS!"
|
Ответ 200 -> пользователюКак работает под капотом
При первом вызове AWS поднимает контейнер с вашим кодом — это занимает доли секунды и называется «холодный старт» (cold start). Контейнер затем какое-то время живёт и обслуживает следующие запросы быстро (тёплый старт). Под нагрузкой AWS запускает столько копий функции параллельно, сколько нужно, — масштабирование происходит автоматически и почти мгновенно. Тарификация — за число вызовов и за фактическое время работы, округлённое до миллисекунд. Поэтому за простаивающую функцию вы не платите ничего.
Частые ошибки
- Тащить в Lambda долгие задачи. У функции есть лимит времени; для длительной обработки берут другие сервисы.
- Забывать про холодный старт. Первый запрос после паузы может быть медленнее; для чувствительных API это учитывают.
- Хранить состояние в функции. Lambda без состояния (stateless): данные между вызовами держат в базе или S3, а не в памяти функции.
Итог
- Lambda запускает код по событию без управления серверами; платите только за вызовы и время работы.
- API Gateway даёт Lambda HTTP-адрес и превращает функцию в REST-API.
- Lambda масштабируется автоматически и работает без состояния; учитывайте лимит времени и холодный старт.