Введение:

В сфере бессерверных вычислений AWS Lambda стала краеугольным камнем технологии. Его способность запускать код без хлопот по настройке и управлению серверами изменила наш подход к разработке приложений. Однако, как и в случае с любым мощным инструментом, понимание его нюансов имеет решающее значение. В этой статье мы разберем различные способы запуска и выполнения функций AWS Lambda, чтобы их было легче понять.

Понимание типов вызова:

AWS Lambda предлагает три различных типа вызовов, каждый из которых предназначен для определенных сценариев.

  • Синхронный вызов
  • Асинхронный вызов
  • Сопоставления источников событий

Синхронный вызов

  • Синхронный вызов вступает в действие, когда функция Lambda запускается прямо или косвенно человеком с помощью команд CLI или API. Этот режим имеет решающее значение для взаимодействия в реальном времени, например, когда важны немедленные результаты.
  • При использовании синхронного вызова мы обязаны изучить ответ, выявить потенциальные ошибки, такие как тайм-ауты, и принять решения относительно потенциальных повторных попыток вызова.
  • Различные способы синхронного запуска функций Lambda — через консоль Lambda, использование URL-адресов HTTP(S), API Lambda, AWS SDK, AWS CLI и наборов инструментов AWS.
  • Вы также можете настроить синхронный вызов других сервисов AWS. Примеры включают API-шлюз, использующий лямбда-выражение в качестве серверной части в бессерверных архитектурах, CloudFront (Lambda@Edge) и Elastic Load Balancer.

Асинхронный вызов:

  • Теперь давайте рассмотрим асинхронный вызов в AWS Lambda. Это когда сервисы AWS запускают функции Lambda автоматически, не дожидаясь немедленного ответа. Это все равно, что запустить процесс и двигаться дальше, делая его ключевой частью того, как события запускают действия в AWS Lambda.

Почему асинхронный вызов имеет значение:

  • Представьте, что у вас есть сегмент в AWS S3, и вы хотите, чтобы функция Lambda запускалась всякий раз, когда кто-то загружает файл. Вместо того, чтобы ждать завершения функции, S3 просто запускает функцию Lambda и продолжает заниматься своими делами. Это асинхронный вызов в действии.

Правила повтора для асинхронного вызова:

В этом асинхронном мире у нас есть правила повтора, которые помогут справиться с любыми сбоями:

  • Вы можете указать Lambda попытаться запустить функцию еще раз (до двух раз).
  • Если что-то пойдет не так во время работы функции или после ее завершения, Lambda может автоматически дать ей еще один шанс.
  • Чтобы все было в порядке, код вашей функции должен быть идемпотентным.

Рассмотрим сценарий, в котором лямбда-выражение вставляет запись в базу данных при каждом вызове. Идемпотент в этом случае, во время повторной попытки, он должен проверить, существует ли эта запись, прежде чем вставлять ее снова. «Идемпотент» гарантирует отсутствие повторяющихся записей, независимо от того, сколько повторений делает Lambda.

  • Если Lambda не может обработать событие даже после повторных попыток, он может отправить его в специальную очередь, что-то вроде списка «сделать на потом», называемую Очередь недоставленных писем (очередь SQS).

Отправка событий в разные места назначения:

  • Самое замечательное в асинхронном вызове то, что вы можете отправлять события в разные места.
  • События, которые проходят нормально или успешно, могут быть помещены в одно место (например, в назначенную папку).
  • События, которые не сработали или не увенчались успехом, могут оказаться в другом месте (например, в папке «Требует внимания»).
  • Параметры для этих мест назначения включают очередь SQS, тему SNS, лямбда-функцию и мост событий.

Сопоставления источников событий (ESM):

Раскрытие скрытого сервиса AWS Lambda

  • AWS Lambda предоставляет замечательную функцию, известную как сопоставление источников событий, которая является настоящим героем в сценариях, где определенные сервисы AWS не генерируют события в качестве триггеров. Этим службам, в отличие от простых событий S3, требуется небольшой толчок, чтобы активировать Lambda.
  • Давайте углубимся в это на примере: сервис Kinesis Data Stream. В мире Kinesis производители данных постоянно генерируют сообщения, а потребители с нетерпением ждут этих сообщений. Однако есть одна особенность: Kinesis Data Stream не подает флаг при поступлении нового фрагмента данных.
  • Итак, что нам делать, если мы хотим, чтобы Lambda обрабатывала эти данные по мере их поступления в Kinesis? Именно здесь в игру вступают сопоставления источников событий.

Как работают сопоставления источников событий:

  • Роль ESM аналогична роли преданных наблюдателей: он постоянно ищет свежие данные из определенных источников, таких как очереди или потоки.

Вот как они работают:

  • ESM объединяет источники, регулярно проверяя наличие обновлений.
  • Когда они замечают что-то новое, они собирают это группами.
  • Эти пакеты данных затем корректно отправляются в Lambda в соответствии с конфигурацией пакета, установленной в вашей функции Lambda.
  • Важно отметить, что каждый пакет запускает вызов Lambda, поэтому ваша функция Lambda должна быть спроектирована так, чтобы комфортно обрабатывать все события внутри пакета, соблюдая 15-минутный лимит времени ожидания.
  • В сфере ESM AWS Lambda не получает события сразу по их прибытии, как в случае асинхронного вызова. Вместо этого Lambda берет на себя роль активного исследователя, активно проверяя любые новые данные, поступающие из этих источников. Для выполнения этой задачи Lambda требуются соответствующие разрешения IAM в роли выполнения Lambda.
  • Именно здесь проявляют себя функции сопоставления источников событий, которые переводят ряд сервисов AWS, таких как Kinesis, SQS Queue и DynamoDB Streams, в область бессерверных архитектур, управляемых событиями.

Заключение:

  • AWS Lambda в мире бессерверных вычислений выступает мощным инструментом. Благодаря различным типам вызовов он позволяет разработчикам создавать гибкие и быстро реагирующие приложения.
  • Синхронный вызов обеспечивает результаты в режиме реального времени, а асинхронный вызов обеспечивает управляемую событиями архитектуру, быстро запускаемую сервисами AWS. Сопоставления источников событий даже интегрируют сервисы, которые не генерируют события естественным образом.
  • Освоение этих типов раскрывает весь потенциал AWS Lambda для создания не только эффективных, но и отказоустойчивых приложений. Итак, погружайтесь, экспериментируйте и позвольте AWS Lambda улучшить ваше бессерверное путешествие.
  • С AWS Lambda нет предела тому, чего вы можете достичь в бессерверной сфере.