Что такое EventBridge и чем он отличается от SNS?
EventBridge — event bus с content-based routing rules, schema registry, archive/replay и 200+ SaaS-интеграций; SNS — pub/sub topic для быстрого fan-out broadcast. Выбирайте SNS для простых уведомлений, EventBridge — для маршрутизации domain events по содержимому.
EventBridge и SNS: разные инструменты для разных задач
Amazon SNS (Simple Notification Service) — это pub/sub-сервис с моделью topic → subscriptions. Один producer публикует сообщение в topic, SNS fan-out доставляет копию всем подписчикам (Lambda, SQS, HTTP, email). Фильтрация ограничена subscription filter policy по атрибутам сообщения.
Amazon EventBridge — это fully managed event bus с content-based routing через rules. Правило содержит event pattern (JSON-матчер по любым полям события) и список targets. Помимо custom buses EventBridge получает события из более 200 SaaS-источников и из самого AWS (default bus).
Ключевые различия
- Routing logic — в SNS фильтрация только по message attributes; в EventBridge паттерн может матчить любое поле
detail,source,detail-type, account, region, время и т.д. - Targets — SNS доставляет подписчикам; EventBridge targets включают Lambda, SQS, Step Functions, API Gateway, Kinesis, EventBridge API Destinations (внешние HTTP), Pipes и другие — всего 20+ типов.
- Archive & Replay — EventBridge позволяет архивировать события и воспроизводить их заново; SNS этого не умеет.
- Schema Registry — EventBridge обнаруживает схемы событий, генерирует code bindings (Python, Java, TypeScript).
- Latency & throughput — SNS быстрее (single-digit ms) и дешевле для high-throughput broadcast; EventBridge добавляет latency (~100–500 ms) на rule evaluation.
- SaaS-интеграции — только EventBridge принимает события от Salesforce, Zendesk, Auth0 и других партнёров напрямую.
Пример: custom EventBridge bus + rule
import boto3, json
events = boto3.client("events", region_name="eu-west-1")
# 1. Создать custom bus
events.create_event_bus(Name="order-service")
# 2. Опубликовать событие
events.put_events(Entries=[
{
"Source": "com.talento.orders",
"DetailType": "OrderPlaced",
"Detail": json.dumps({"orderId": "ord-123", "amount": 49.99}),
"EventBusName": "order-service",
}
])
// EventBridge Rule pattern — матчит только крупные заказы
{
"source": ["com.talento.orders"],
"detail-type": ["OrderPlaced"],
"detail": {
"amount": [{ "numeric": [">", 100] }]
}
}
Пример: SNS fan-out к SQS
import boto3
sns = boto3.client("sns", region_name="eu-west-1")
# Публикация в topic — SNS сам рассылает копию всем subscribers
sns.publish(
TopicArn="arn:aws:sns:eu-west-1:123456789012:alerts",
Message="Disk usage > 90%",
MessageAttributes={
"env": {"DataType": "String", "StringValue": "prod"}
}
)
Когда что выбирать
- Простой broadcast уведомлений (алерты, нотификации) → SNS.
- Маршрутизация domain events между сервисами по содержимому → EventBridge custom bus.
- Интеграция с SaaS-источниками или AWS-сервисами (CloudTrail, EC2 state changes) → EventBridge default/partner bus.
- Нужен replay/archive или schema discovery → EventBridge.
Подводные камни
- EventBridge добавляет latency до 500 мс на rule evaluation — не подходит для real-time систем, где важна минимальная задержка.
- Максимум 5 targets на одно rule в стандартном лимите; при большом fan-out приходится комбинировать EventBridge → SNS → подписчики.
- Event pattern матчит поля строго: отсутствие поля в событии !== null; паттерн
{"detail": {"status": ["active"]}}не сработает, если полеstatusотсутствует. - Размер события EventBridge ограничен 256 KB; для больших payload нужно хранить данные в S3 и передавать только ссылку.
- SNS subscription filter policy работает только по message attributes верхнего уровня — не по вложенному JSON в теле сообщения.
- EventBridge API Destinations (внешние HTTP-вызовы) имеют rate limit по умолчанию 300 RPS — при превышении события дросселируются, не теряются, но задержка растёт.
- Archive/Replay EventBridge не поддерживает partial replay по конкретным event IDs — только временной диапазон; при воспроизведении targets могут получить дубликаты, нужна идемпотентность.
- Стоимость EventBridge ($1 за 1M событий) выше SNS ($0.50 за 1M) при одинаковом объёме — для высоконагруженного broadcast это ощутимо.
Common mistakes
- Считать EventBridge прямой заменой SNS во всех случаях.
- Игнорировать retry/DLQ behavior targets.
- Не проектировать event schema и versioning.
What the interviewer is testing
- Различает topic pub/sub и event bus routing.
- Учитывает filtering, targets, archive/replay.
- Выбирает сервис по complexity сценария.