EventBridge: шина событий и правила
Публикуйте события в пользовательской шине EventBridge, создавайте правила шаблонов событий для фильтрации и маршрутизации событий к целевым Lambda, SQS или Step Functions.
«EventBridge: шина событий и правила» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Что такое Amazon EventBridge?
Amazon EventBridge (ранее CloudWatch Events) — это бессерверная шина событий, которая упрощает связывание приложений с помощью событий от сервисов AWS, собственных приложений и поставщиков SaaS. События представляют собой объекты JSON; EventBridge направляет их одной или нескольким целевым системам на основе правил шаблонов событий. В отличие от SQS (взаимодействие «точка — точка»), EventBridge — это уровень маршрутизации pub/sub: одно событие может одновременно направляться множеству целевых систем.
Шины событий: Default, Custom и Partner
В EventBridge есть три типа шин событий. Шина Default получает события от сервисов AWS (изменения состояния EC2, события S3, вызовы API CloudTrail и т. д.). Пользовательские шины создаются для событий собственных приложений — они отделяют события приложения от событий сервисов AWS. Шины партнёров получают события непосредственно от поставщиков SaaS (Zendesk, Datadog, GitHub, Shopify) через готовые интеграции, поэтому Lambda с периодическим опросом не требуется.
# Create a custom event bus for your application
aws events create-event-bus --name my-app-bus
# Put a custom event onto the bus
aws events put-events --entries '[{
"Source": "com.myapp.orders",
"DetailType": "OrderPlaced",
"Detail": "{\"orderId\": \"ORD-123\", \"total\": 99.99}",
"EventBusName": "my-app-bus"
}]'Правила шаблонов событий
Правило шаблона события определяет, какие события нужно сопоставлять, с помощью шаблона JSON, фильтрующего любые комбинации полей события (источник, тип сведений, account, регион или поля внутри объекта detail). EventBridge проверяет каждое событие по всем правилам шины. Сопоставленные события передаются целевым системам, настроенным для правила. На уровне правил действует логика OR, а внутри объекта шаблона — логика AND.
# Create a rule that matches EC2 instance state changes to 'stopped'
aws events put-rule \
--name ec2-stopped-alert \
--event-bus-name default \
--event-pattern '{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped"]
}
}' \
--state ENABLEDНастройка целевых систем
EventBridge может направлять сопоставленные события более чем 20 типам целевых систем, включая функции Lambda, очереди SQS, темы SNS, конечные автоматы Step Functions, потоки данных Kinesis, конечные точки API Gateway, задачи ECS и даже другую шину EventBridge (для маршрутизации между аккаунтами). Для каждого правила можно настроить до 5 целевых систем. EventBridge вызывает целевые системы асинхронно и при сбоях повторяет попытки с экспоненциальным увеличением интервала.
# Add an SNS topic and Lambda function as targets for the rule
aws events put-targets \
--rule ec2-stopped-alert \
--event-bus-name default \
--targets '[{
"Id": "notify-ops",
"Arn": "arn:aws:sns:us-east-1:123456789012:ops-alerts"
}, {
"Id": "auto-remediate",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:RestartEC2"
}]'Преобразование входных данных
По умолчанию EventBridge передаёт целевой системе весь объект события в формате JSON. Используйте преобразование входных данных, чтобы изменить структуру события перед доставкой: извлечь определённые поля, создать новый объект JSON или сформировать пользовательскую строку. Это особенно полезно, когда функции Lambda или конечной точке API требуется полезная нагрузка определённой структуры, а не полный конверт события EventBridge. Так можно обойтись без промежуточной Lambda, предназначенной только для изменения структуры данных.
# Input transformer: extract orderId and total from detail
# InputPathsMap extracts values by JSON path
{
'InputPathsMap': {
'orderId': '$.detail.orderId',
'total': '$.detail.total'
},
'InputTemplate': '{
"message": "New order <orderId> for $<total>",
"channel": "ops"
}'
}Правила по расписанию (Cron/Rate)
Правила EventBridge могут срабатывать не при сопоставлении события, а по расписанию. Используйте выражение rate (например, rate(5 minutes)) для запуска через фиксированные интервалы или выражение cron для расписания по календарю. Правила по расписанию отлично подходят для запуска функций Lambda, выполняющих пакетные задания очистки, отправки периодических отчётов или ночных задач DMS, заменяя задания cron на основе EC2.
# Create a scheduled rule that fires every day at midnight UTC
aws events put-rule \
--name nightly-cleanup \
--schedule-expression 'cron(0 0 * * ? *)' \
--state ENABLED
aws events put-targets \
--rule nightly-cleanup \
--targets '[{
"Id": "cleanup-lambda",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:NightlyCleanup"
}]'Архивирование и воспроизведение событий
EventBridge может архивировать все события шины или их отфильтрованное подмножество в архиве событий и хранить их в течение настраиваемого периода. Затем вы можете в любой момент воспроизвести архивированные события обратно в шину. Это полезно для повторной обработки событий новой версией Lambda, восстановления после ошибки, из-за которой целевая система пропустила события, или заполнения нового сервиса историческими событиями. Это мощный механизм операционной защиты, уникальный для EventBridge по сравнению с другими системами pub/sub.
# Create an event archive for the custom bus
aws events create-archive \
--archive-name my-app-archive \
--event-source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--retention-days 30
# Replay archived events from a specific time window
aws events start-replay \
--replay-name replay-missed-orders \
--event-source-arn arn:aws:events:us-east-1:123456789012:archive/my-app-archive \
--event-start-time 2024-01-10T00:00:00Z \
--event-end-time 2024-01-10T06:00:00Z \
--destination '{"Arn": "arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus"}'Маршрутизация между аккаунтами и регионами
EventBridge поддерживает маршрутизацию событий между аккаунтами: для целевой шины в другом аккаунте создаётся политика на основе ресурсов, разрешающая исходному аккаунту помещать события в шину. Это позволяет централизованному аккаунту мониторинга получать события от всех аккаунтов рабочих нагрузок или использовать архитектуру общей шины сервисов, в которой команда платформы направляет события на шины команд-потребителей. Маршрутизация между регионами работает аналогично — для неё явно указываются целевые шины событий в других регионах.
# Allow a source account (111111111111) to send events to this bus
aws events put-permission \
--event-bus-name my-central-bus \
--action events:PutEvents \
--principal 111111111111 \
--statement-id allow-source-accountEventBridge Pipes
EventBridge Pipes создаёт интеграции «точка — точка» между источником (SQS, Kinesis, DynamoDB Streams, Kafka) и целевой системой, поддерживая необязательные фильтрацию и обогащение данных между ними (с помощью Lambda, Step Functions или API Gateway). Pipes проще, чем написание потребителя на Lambda с периодическим опросом: они автоматически выполняют опрос, пакетную обработку, фильтрацию и маршрутизацию. Используйте Pipes, когда требуется прямое соединение источника с целевой системой без полноценной шины pub/sub.
# Create an EventBridge Pipe from SQS to Lambda
aws pipes create-pipe \
--name sqs-to-processor \
--source arn:aws:sqs:us-east-1:123456789012:incoming-orders \
--target arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder \
--role-arn arn:aws:iam::123456789012:role/PipeRole \
--source-parameters '{
"SqsQueueParameters": {"BatchSize": 10}
}' \
--filter-criteria '{
"Filters": [{"Pattern": "{\"body\": {\"orderType\": [\"PRIORITY\"]}}"}]
}'EventBridge, SNS и SQS
Эти три сервиса частично пересекаются по возможностям, но предназначены для разных сценариев. SNS: отправка данных подписчикам (электронная почта, HTTP, SQS, Lambda) по принципу push — простой pub/sub без фильтрации. SQS: надёжная очередь сообщений для развязки взаимодействия «точка — точка» с получением сообщений потребителем. EventBridge: шина маршрутизации на основе содержимого с реестром схем, архивированием и воспроизведением, партнёрами SaaS и доставкой между аккаунтами — лучший выбор для сложной маршрутизации событий между множеством сервисов. Используйте EventBridge, когда нужны сложные правила маршрутизации, а не только простая рассылка.
Реестр схем EventBridge
Реестр схем EventBridge автоматически обнаруживает и каталогизирует структуру событий, проходящих через шины событий. Он хранит схемы в формате OpenAPI 3.0, чтобы разработчики могли находить доступные события и генерировать привязки кода (Java, Python, TypeScript), десериализующие события в типизированные объекты. Это избавляет от необходимости вручную писать код для разбора JSON и обеспечивает безопасность типов в сервисах, управляемых событиями. Вы также можете вручную зарегистрировать пользовательские схемы событий, создаваемых собственными приложениями.
# Enable schema discovery on a custom event bus
aws schemas create-discoverer \
--source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--description 'Auto-discover schemas from app bus'
# List discovered schemas
aws schemas list-schemas \
--registry-name discovered-schemasКраткая проверка
Проверьте, насколько хорошо Вы усвоили концепции AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что EventBridge направляет события одновременно нескольким целевым системам с помощью правил шаблонов на основе содержимого, архивирование и воспроизведение позволяют хранить и повторно обрабатывать исторические события без изменения кода, а EventBridge Pipes предоставляет управляемые конвейеры от источника к целевой системе для потоковых источников. Далее мы рассмотрим Step Functions для оркестрации бессерверных рабочих процессов из нескольких этапов.
Часто задаваемые вопросы
Урок «EventBridge: шина событий и правила» бесплатный?
Да — полный текст урока «EventBridge: шина событий и правила» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «EventBridge: шина событий и правила»?
Публикуйте события в пользовательской шине EventBridge, создавайте правила шаблонов событий для фильтрации и маршрутизации событий к целевым Lambda, SQS или Step Functions. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «EventBridge: шина событий и правила»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- EventBridge: шина событий и правила
- Step Functions: оркестрация бессерверных рабочих процессов
- Kinesis Data Streams для обработки событий в реальном времени
- Шаблоны хореографии и оркестрации