Введение:
В сфере бессерверных вычислений 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 нет предела тому, чего вы можете достичь в бессерверной сфере.