Открыть сервис

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). Событием может быть:

При получении события 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 МБ.

Классификация

По способу развёртывания

  1. Код в среде выполнения (runtime) — пользователь загружает код на одном из поддерживаемых языков (Node.js, Python, Java, Go, Ruby, .NET, C#) и указывает среду выполнения (runtime). AWS Lambda автоматически предоставляет необходимую среду.
  2. Контейнерные образы — пользователь упаковывает код и зависимости в образ Docker, соответствующий спецификации OCI, и загружает его в Amazon Elastic Container Registry (ECR). AWS Lambda запускает этот образ как функцию.

По типу вызова

  1. Синхронный вызов — вызывающий сервис (например, Amazon API Gateway) ожидает завершения функции и получения результата. Используется для обработки HTTP-запросов в реальном времени.
  2. Асинхронный вызов — вызывающий сервис (например, Amazon S3) отправляет событие в очередь, а функция выполняется в фоновом режиме. Результат не возвращается вызывающему.
  3. Вызов по потоку (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 →