AWSMiddleTechnical

Что такое 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 сценария.

Sources

Related topics

Что такое EventBridge и чем он отличается от SNS? | Talanto