AWS Lambda
AWS Lambda — это сервис бессерверных вычислений, предоставляемый компанией Amazon Web Services (AWS), который позволяет выполнять код в ответ на события без необходимости управления серверной инфраструктурой. Пользователи платят только за фактически использованные вычислительные ресурсы и время выполнения кода, а не за предварительно выделенные или простаивающие мощности. AWS Lambda относится к категории «Функция как услуга» (FaaS) и является одним из ключевых компонентов облачной платформы AWS, запущенным в 2014 году.
История
Разработка AWS Lambda началась в 2012 году как внутренняя инициатива Amazon по созданию сервиса, позволяющего автоматически масштабировать выполнение кода в облачной среде без участия администратора. Официальный запуск состоялся 13 ноября 2014 года на конференции re:Invent. Первоначально сервис поддерживал только языки Node.js и Java, а также ограниченный набор триггеров (Amazon S3, Amazon DynamoDB, Amazon API Gateway и некоторые другие).
В 2015 году была добавлена поддержка Python, а в 2016 году — C# и Go. В 2018 году AWS Lambda получила поддержку Ruby, а в 2020 году — Java 11 и Python 3.8. В 2021 году появилась поддержка .NET 6 и Java 17. В 2023 году AWS анонсировала поддержку Go 1.20 и Python 3.11.
Значительным этапом развития стало введение в 2018 году функций работы с контейнерами (Lambda Container Image), позволяющих упаковывать код и его зависимости в образы Docker, соответствующие спецификации Open Container Initiative (OCI). В 2020 году был запущен сервис Lambda Extensions для интеграции с инструментами мониторинга и безопасности.
Архитектура и принцип работы
Инфраструктура
AWS Lambda работает на общей инфраструктуре AWS, которая автоматически управляет масштабированием, балансировкой нагрузки и обеспечением отказоустойчивости. Каждая функция выполняется в изолированной среде, называемой «контейнером выполнения» (execution environment). Этот контейнер создаётся при первом вызове функции (холодный старт) и может быть переиспользован для последующих вызовов (тёплый старт), если они происходят в течение короткого промежутка времени (обычно 5–15 минут).
Модель выполнения
Функция AWS Lambda активируется в ответ на событие (event). Событием может быть:
- изменение данных в хранилище Amazon S3 (загрузка, удаление объекта);
- запись в таблицу Amazon DynamoDB;
- HTTP-запрос через Amazon API Gateway;
- сообщение из очереди Amazon SQS или Amazon Kinesis;
- вызов по расписанию через Amazon CloudWatch Events (cron-подобный триггер);
- действие из других сервисов AWS (Amazon Cognito, AWS CloudFormation и др.).
При получении события AWS Lambda создаёт новый экземпляр функции или использует уже существующий, передаёт ему событие в формате JSON и запускает код. После завершения выполнения функция возвращает результат (если применимо) и освобождает ресурсы.
Холодный и тёплый старт
Холодный старт — это задержка, возникающая при первом вызове функции или после длительного периода бездействия, когда AWS Lambda вынуждена создать новый контейнер выполнения. Время холодного старта зависит от:
- размера развёртываемого пакета (deployment package);
- используемого языка программирования (например, Java и .NET имеют более длительный холодный старт, чем Python или Node.js);
- количества зависимостей;
- наличия VPC (виртуального частного облака) — подключение к VPC увеличивает время старта на 1–2 секунды.
Тёплый старт происходит, когда контейнер выполнения уже существует и может быть переиспользован. В этом случае задержка минимальна (обычно менее 10 миллисекунд).
Ограничения
AWS Lambda имеет ряд технических ограничений:
- максимальное время выполнения одной функции — 15 минут (900 секунд);
- максимальный объём памяти — 10 240 МБ (с шагом 1 МБ);
- максимальный размер развёртываемого пакета — 50 МБ (сжатый), 250 МБ (несжатый);
- максимальный размер тела события — 256 КБ для синхронных вызовов, 6 МБ для асинхронных;
- максимальное количество одновременных выполнений (concurrency) — по умолчанию 1000 на регион (может быть увеличено по запросу);
- максимальный размер временного хранилища (/tmp) — 10 240 МБ.
Классификация
По способу развёртывания
- Код в среде выполнения (runtime) — пользователь загружает код на одном из поддерживаемых языков (Node.js, Python, Java, Go, Ruby, .NET, C#) и указывает среду выполнения (runtime). AWS Lambda автоматически предоставляет необходимую среду.
- Контейнерные образы — пользователь упаковывает код и зависимости в образ Docker, соответствующий спецификации OCI, и загружает его в Amazon Elastic Container Registry (ECR). AWS Lambda запускает этот образ как функцию.
По типу вызова
- Синхронный вызов — вызывающий сервис (например, Amazon API Gateway) ожидает завершения функции и получения результата. Используется для обработки HTTP-запросов в реальном времени.
- Асинхронный вызов — вызывающий сервис (например, Amazon S3) отправляет событие в очередь, а функция выполняется в фоновом режиме. Результат не возвращается вызывающему.
- Вызов по потоку (stream-based) — функция обрабатывает записи из потоков данных (Amazon Kinesis, Amazon DynamoDB Streams) с гарантией обработки каждой записи.
Применение
Веб-приложения и API
AWS Lambda часто используется в сочетании с Amazon API Gateway для создания бессерверных API. Функция обрабатывает HTTP-запросы, выполняет бизнес-логику (например, проверку данных, обращение к базе данных) и возвращает ответ. Такой подход позволяет создавать масштабируемые веб-приложения без управления серверами.
Обработка данных
Сервис применяется для обработки данных в реальном времени или по расписанию:
- преобразование изображений и видео при загрузке в Amazon S3;
- агрегация и очистка логов;
- обработка потоков данных из Amazon Kinesis или Amazon DynamoDB Streams;
- выполнение ETL-задач (извлечение, преобразование, загрузка).
Автоматизация инфраструктуры
AWS Lambda используется для автоматизации задач управления облачной инфраструктурой:
- создание резервных копий;
- мониторинг и реагирование на события (например, автоматическое масштабирование);
- управление доступом и безопасностью.
Бэкенд для мобильных и IoT-приложений
Функции Lambda могут обрабатывать запросы от мобильных приложений и устройств Интернета вещей (IoT), выполняя аутентификацию, обработку данных и взаимодействие с другими сервисами AWS.
Преимущества и недостатки
Преимущества
- Отсутствие управления серверами — AWS полностью управляет инфраструктурой, включая масштабирование, обновление и обеспечение отказоустойчивости.
- Автоматическое масштабирование — количество выполняемых функций автоматически увеличивается или уменьшается в зависимости от нагрузки.
- Оплата за использование — пользователь платит только за количество вызовов и время выполнения (с округлением до 1 миллисекунды).
- Интеграция с экосистемой AWS — Lambda легко интегрируется с большинством сервисов AWS (S3, DynamoDB, API Gateway, SQS, Kinesis и др.).
- Поддержка множества языков — Node.js, Python, Java, Go, Ruby, .NET, C#.
Недостатки
- Холодный старт — задержка при первом вызове функции может достигать нескольких секунд, что критично для приложений, требующих низкой задержки.
- Ограничение времени выполнения — функция не может выполняться дольше 15 минут, что исключает возможность длительных задач.
- Ограниченные ресурсы — максимальный объём памяти и временного хранилища ограничены, что может быть недостаточно для ресурсоёмких приложений.
- Сложность отладки — локальная отладка функций Lambda менее удобна по сравнению с традиционными приложениями, хотя существуют инструменты (AWS SAM, LocalStack).
- Привязка к провайдеру — код, написанный для AWS Lambda, может быть трудно перенести на другие облачные платформы (Azure Functions, Google Cloud Functions) без изменений.
Альтернативы
Основными конкурентами AWS Lambda на рынке бессерверных вычислений являются:
- Azure Functions (Microsoft Azure) — сервис с аналогичной функциональностью, поддерживающий множество языков и интеграцию с экосистемой Azure.
- Google Cloud Functions (Google Cloud) — бессерверный сервис, ориентированный на обработку событий в облаке Google.
- Cloudflare Workers — бессерверная платформа, выполняющая код на границе сети (edge computing) с низкой задержкой.
- OpenFaaS — открытая платформа для бессерверных вычислений, которую можно развернуть на собственной инфраструктуре.
Интересные факты
- Название «Lambda» происходит от лямбда-исчисления в математике и программировании, где λ-выражения используются для анонимных функций.
- В 2019 году AWS Lambda обрабатывала более 100 миллиардов вызовов в месяц.
- Сервис используется такими крупными компаниями, как Netflix, Airbnb, Coca-Cola и The New York Times для обработки данных и автоматизации.
- AWS Lambda поддерживает выполнение кода на Rust через интерфейс внешних сред выполнения (custom runtime).
Источники
- Amazon Web Services. «AWS Lambda Developer Guide». AWS Documentation.
- Amazon Web Services. «AWS Lambda FAQs». AWS Official Website.
- Wagner, T. (2020). «Serverless Architectures on AWS». Manning Publications.
- Sbarski, P. (2017). «Serverless Architectures on AWS: With examples using AWS Lambda». Manning Publications.
- AWS re:Invent 2014 Keynote. «Introducing AWS Lambda». YouTube.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →