0Pricing
Cloud & IT Cert Prep · Урок

Lambda@Edge и событийно-ориентированные шаблоны

Запускайте функции в периферийных местоположениях CloudFront и подключайте Lambda к SQS, SNS, потокам DynamoDB и Kinesis для событийно-ориентированных архитектур.

«Lambda@Edge и событийно-ориентированные шаблоны» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое Lambda@Edge

Lambda@Edge позволяет запускать функции Lambda в пограничных местоположениях CloudFront по всему миру — ближе к конечным пользователям, чем в централизованном регионе. Это позволяет настраивать HTTP-запросы и ответы, добавляя менее миллисекунды задержки на уровне CDN. Функции Lambda@Edge развёртываются глобально и вызываются при каждом событии попадания или промаха кэша CloudFront, поэтому идеально подходят для лёгкой обработки запросов.

Четыре точки запуска CloudFront

Lambda@Edge может перехватывать трафик в четырёх точках жизненного цикла запроса CloudFront:

  • Запрос от Viewer: выполняется, когда CloudFront получает запрос от пользователя, до проверки кэша
  • Запрос к Origin: выполняется, когда CloudFront пересылает промах кэша источнику
  • Ответ от Origin: выполняется, когда источник возвращает ответ, до его кэширования
  • Ответ для Viewer: выполняется перед возвратом ответа пользователю через CloudFront

Ограничения Lambda@Edge по сравнению с обычной Lambda

Lambda@Edge имеет более строгие ограничения, чем обычная Lambda: максимум 128 MB памяти (события Viewer), 1 GB (события Origin), максимальный тайм-аут 5 секунд (Viewer) и 30 секунд (Origin). Функции необходимо создавать в us-east-1 и развёртывать на периферии через CloudFront. Поддержка VPC, переменных среды и слоёв Lambda отсутствует. Поэтому Lambda@Edge предназначена для лёгких преобразований, а не для ресурсоёмкой обработки.

Распространённые варианты использования Lambda@Edge

Lambda@Edge особенно хорошо подходит для: A/B-тестирования (перезапись URL на разные пути источника на основе файлов cookie), аутентификации (проверка JWT на периферии до пересылки запроса источнику), изменения HTTP-заголовков (добавления заголовков безопасности, таких как HSTS, CSP и X-Frame-Options), нормализации URL (перенаправления с www на вариант без www или принудительного добавления завершающих косых черт) и персонализации (выдача разного содержимого в зависимости от страны пользователя из заголовка CloudFront-Viewer-Country).

// Viewer Request: Add security headers
exports.handler = async (event) => {
    const response = event.Records[0].cf.response;
    response.headers['strict-transport-security'] = [{
        key: 'Strict-Transport-Security',
        value: 'max-age=63072000; includeSubdomains; preload'
    }];
    response.headers['x-frame-options'] = [{
        key: 'X-Frame-Options',
        value: 'DENY'
    }];
    return response;
};

CloudFront Functions и Lambda@Edge

CloudFront Functions — это сверхлёгкие функции JavaScript, работающие только на этапах запроса и ответа Viewer, с ограничением времени выполнения 2 ms и значительно меньшей стоимостью. Для простых задач (перезаписи URL, изменения заголовков и нормализации ключа кэша) предпочтительнее CloudFront Functions, поскольку они быстрее и дешевле Lambda@Edge. Используйте Lambda@Edge, если Вам нужен доступ к сетевым вызовам, более крупным полезным нагрузкам или точкам запуска запроса и ответа Origin.

Архитектура, управляемая событиями, с Lambda

Архитектура, управляемая событиями, соединяет сервисы с помощью событий — сообщений, представляющих то, что произошло. В AWS Lambda является основным потребителем событий: она получает события из SQS, SNS, DynamoDB Streams, Kinesis, S3, EventBridge и других источников. Каждое событие запускает выполнение Lambda, благодаря чему системы могут реагировать асинхронно и независимо, без тесной связанности. Этот шаблон обеспечивает слабую связанность, независимое масштабирование и изоляцию сбоев.

Lambda как потребитель SQS

Lambda можно настроить как сопоставление источника событий для SQS. Lambda опрашивает очередь, получает до размера пакета сообщений (до 10 000 для стандартных очередей и 10 для FIFO) и один раз вызывает функцию для каждого пакета. Если функция завершается с ошибкой, весь пакет возвращается в очередь. Настройте окно формирования пакета, чтобы подождать дополнительные сообщения перед вызовом функции и повысить пропускную способность. Для сообщений, которые неоднократно обрабатываются с ошибкой, используйте DLQ в исходной очереди SQS.

aws lambda create-event-source-mapping \
  --function-name 'OrderProcessor' \
  --event-source-arn 'arn:aws:sqs:us-east-1:123456789012:OrderQueue' \
  --batch-size 10 \
  --maximum-batching-window-in-seconds 5

Lambda и DynamoDB Streams

DynamoDB Streams фиксируют каждое изменение на уровне элемента (INSERT, MODIFY, REMOVE) в виде упорядоченной последовательности событий. Lambda читает поток с помощью сопоставления источника событий, используя TRIM_HORIZON (начать с самых старых записей) или LATEST (начать с самых новых). Lambda обрабатывает записи в порядке внутри раздела. Пакеты с ошибками блокируют дальнейшую обработку того же раздела до устранения проблемы — используйте разделение пакета при ошибке, чтобы разделять неудачные пакеты и изолировать проблемные записи.

aws lambda create-event-source-mapping \
  --function-name 'StreamProcessor' \
  --event-source-arn 'arn:aws:dynamodb:us-east-1:123456789012:table/Orders/stream/...' \
  --starting-position TRIM_HORIZON \
  --batch-size 100 \
  --bisect-batch-on-function-error

Lambda и потоки данных Kinesis

Lambda обрабатывает записи Kinesis так же, как записи DynamoDB Streams, — одно параллельное выполнение на сегмент. К важным параметрам конфигурации относятся коэффициент параллелизации (до 10 параллельных вызовов Lambda на сегмент с параллельной обработкой подмножества пакета) и расширенное распределение (выделенная пропускная способность 2 MB/s на сегмент для потребителя Lambda). Эти параметры значительно повышают пропускную способность потоков с большим объёмом данных без увеличения числа сегментов.

EventBridge как маршрутизатор событий

Amazon EventBridge — рекомендуемая шина событий для соединения сервисов AWS и пользовательских приложений. События поступают на шину, а правила фильтруют их по шаблону и направляют целевым объектам, включая Lambda, SQS, Step Functions и другие сервисы. EventBridge полностью разделяет производителей и потребителей событий: ни один из них не знает о другом. Шина событий по умолчанию получает события от сервисов AWS; для событий Вашего приложения создайте пользовательскую шину событий.

aws events put-rule \
  --name 'OrderPlacedRule' \
  --event-pattern '{"source": ["com.myapp.orders"], "detail-type": ["OrderPlaced"]}' \
  --state ENABLED

aws events put-targets \
  --rule 'OrderPlacedRule' \
  --targets 'Id=LambdaTarget,Arn=arn:aws:lambda:us-east-1:123456789012:function:InventoryUpdater'

Шаблон распределения: SNS для нескольких функций Lambda

Распространённый шаблон архитектуры, управляемой событиями, — распределение: одно событие запускает несколько параллельных конвейеров обработки. Опубликуйте сообщение в теме SNS, и несколько подписанных функций Lambda будут независимо реагировать на него. Например, событие размещения заказа может распределиться между функцией, отправляющей письмо с подтверждением, функцией, обновляющей запасы, и функцией, уведомляющей склад. Каждый потребитель работает независимо и масштабируется отдельно — ни один потребитель не может заблокировать остальных.

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03), рассмотренных в этом уроке.

Итоги урока

В этом уроке Вы узнали, что Lambda@Edge запускает функции в пограничных местоположениях CloudFront с четырьмя точками запуска (запрос и ответ Viewer, запрос и ответ Origin) для таких задач, как аутентификация, перезапись URL и изменение заголовков; CloudFront Functions являются более дешёвой альтернативой с меньшей задержкой для простых преобразований на этапе Viewer; а шаблоны, управляемые событиями, с использованием SQS, DynamoDB Streams, Kinesis, EventBridge и распределения через SNS обеспечивают слабосвязанные архитектуры, в которых Lambda реагирует на события в реальном времени. Далее мы рассмотрим стандартные очереди SQS и очереди FIFO.

Часто задаваемые вопросы

Урок «Lambda@Edge и событийно-ориентированные шаблоны» бесплатный?

Да — полный текст урока «Lambda@Edge и событийно-ориентированные шаблоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Lambda@Edge и событийно-ориентированные шаблоны»?

Запускайте функции в периферийных местоположениях CloudFront и подключайте Lambda к SQS, SNS, потокам DynamoDB и Kinesis для событийно-ориентированных архитектур. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Lambda@Edge и событийно-ориентированные шаблоны»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Функции Lambda: среды выполнения, триггеры и обработчики
  2. Параллелизм, ограничение частоты и зарезервированный параллелизм
  3. Слои Lambda и пакеты развёртывания
  4. Lambda@Edge и событийно-ориентированные шаблоны
← Назад к Cloud & IT Cert Prep