AWS Admin

O que Todo Dev Deve Saber sobre EventBridge: Event Bus, Rules, Pipes e SaaS Integrations Já leu

Event Bus: Fundação do EventBridge O Event Bus é o componente central do AWS EventBridge — um barramento de eventos totalmente gerenciado que desacopla produtores e consumidores de eventos. Diferentemente de filas (SQS), o Event Bus trabalha com um modelo pub/sub, permitindo que múltiplos consumidores reajam ao mesmo evento simultaneamente. Existem três tipos de Event Bus: o padrão (default), event buses customizados e partner event buses para integrações SaaS. O Event Bus padrão recebe eventos da sua conta AWS; event buses customizados isolam eventos entre diferentes aplicações ou times; e partner event buses conectam eventos de terceiros (Datadog, Stripe, Zendesk). Quando você publica um evento, o EventBridge o processa instantaneamente contra todas as regras registradas. Rules: Roteamento Inteligente de Eventos Rules definem como e para onde os eventos serão roteados. Cada regra contém um padrão (pattern) que filtra eventos por Source, DetailType, ou atributos customizados do Detail. Quando um evento corresponde ao padrão, a regra ativa seus targets (alvos). As

Event Bus: Fundação do EventBridge

O Event Bus é o componente central do AWS EventBridge — um barramento de eventos totalmente gerenciado que desacopla produtores e consumidores de eventos. Diferentemente de filas (SQS), o Event Bus trabalha com um modelo pub/sub, permitindo que múltiplos consumidores reajam ao mesmo evento simultaneamente.

Existem três tipos de Event Bus: o padrão (default), event buses customizados e partner event buses para integrações SaaS. O Event Bus padrão recebe eventos da sua conta AWS; event buses customizados isolam eventos entre diferentes aplicações ou times; e partner event buses conectam eventos de terceiros (Datadog, Stripe, Zendesk). Quando você publica um evento, o EventBridge o processa instantaneamente contra todas as regras registradas.

import boto3
import json
from datetime import datetime

client = boto3.client('events')

# Criar um Event Bus customizado
response = client.create_event_bus(Name='meu-app-events')
print(f"Event Bus criado: {response['EventBusArn']}")

# Publicar um evento
event_data = {
    'orderId': '12345',
    'customerId': 'cust-789',
    'amount': 99.99,
    'status': 'created'
}

client.put_events(
    Entries=[
        {
            'Source': 'minha.aplicacao.pedidos',
            'DetailType': 'Pedido Criado',
            'Detail': json.dumps(event_data),
            'EventBusName': 'meu-app-events'
        }
    ]
)

Rules: Roteamento Inteligente de Eventos

Rules definem como e para onde os eventos serão roteados. Cada regra contém um padrão (pattern) que filtra eventos por Source, DetailType, ou atributos customizados do Detail. Quando um evento corresponde ao padrão, a regra ativa seus targets (alvos).

As patterns utilizam JSON matching com suporte a operadores como anything-but, numeric, exists e prefix. Você pode ter múltiplos targets por regra, e EventBridge entrega para todos simultaneamente. O retry automático está habilitado (até 2 tentativas por padrão), e você pode configurar Dead Letter Queues para eventos não processados.

# Criar uma Rule que filtra pedidos acima de $50
client.put_rule(
    Name='pedidos-altos-valor',
    EventBusName='meu-app-eventos',
    EventPattern=json.dumps({
        'source': ['minha.aplicacao.pedidos'],
        'detail-type': ['Pedido Criado'],
        'detail': {
            'amount': [{'numeric': ['>', 50]}]
        }
    }),
    State='ENABLED'
)

# Adicionar Target: SNS
client.put_targets(
    Rule='pedidos-altos-valor',
    EventBusName='meu-app-eventos',
    Targets=[
        {
            'Id': '1',
            'Arn': 'arn:aws:sns:us-east-1:123456789:notificacoes-fraud',
            'RoleArn': 'arn:aws:iam::123456789:role/EventBridgeRole',
            'RetryPolicy': {
                'MaximumEventAge': 3600,
                'MaximumRetryAttempts': 2
            },
            'DeadLetterConfig': {
                'Arn': 'arn:aws:sqs:us-east-1:123456789:dlq-pedidos'
            }
        }
    ]
)

Pipes: Transformação e Enriquecimento em Movimento

EventBridge Pipes (recurso mais recente) é um serviço que conecta uma origem (source) a um destino (target) com transformação, filtragem e enriquecimento intermediários. Enquanto Rules são síncronos e stateless, Pipes suportam lógica complexa: invocar Lambda para enriquecer dados, filtrar eventos, e garantir processamento com retry automático.

Pipes é ideal quando você precisa transformar a estrutura do evento antes de entregá-lo, ou enriquecer dados consultando um banco de dados. A origem pode ser SQS, DynamoDB Streams, Kinesis, Managed Streaming for Kafka (MSK) ou S3. O destino pode ser qualquer serviço AWS (Lambda, SQS, SNS, EventBridge, Firehose, etc.).

# Criar um Pipe: SQS → Lambda (enriquecimento) → SQS
pipe_response = client.create_pipe(
    Name='enriquecer-pedidos-pipe',
    Source='arn:aws:sqs:us-east-1:123456789:pedidos-entrada',
    SourceParameters={
        'SqsQueueParameters': {
            'BatchSize': 10,
            'MaximumBatchingWindowInSeconds': 5
        },
        'FilterCriteria': {
            'Filters': [
                {
                    'Pattern': json.dumps({
                        'body': {
                            'status': ['pending']
                        }
                    })
                }
            ]
        }
    },
    Enrichment='arn:aws:lambda:us-east-1:123456789:function:enriquecer-pedido',
    EnrichmentParameters={
        'HttpParameters': {
            'HeaderParameters': {
                'X-Custom-Header': 'valor'
            }
        },
        'RoleArn': 'arn:aws:iam::123456789:role/PipeRole'
    },
    Target='arn:aws:sqs:us-east-1:123456789:pedidos-processados',
    TargetParameters={
        'SqsQueueParameters': {
            'MessageDeduplicationId': '$.body.orderId'
        },
        'RoleArn': 'arn:aws:iam::123456789:role/PipeRole'
    },
    RoleArn='arn:aws:iam::123456789:role/PipeRole'
)

print(f"Pipe criado: {pipe_response['PipeArn']}")

SaaS Integrations: Recebendo Eventos de Terceiros

EventBridge permite receber eventos diretamente de SaaS populares (Stripe, Datadog, Zendesk, GitHub, etc.) através de partner event buses. Em vez de usar webhooks manuais, você ativa a integração na plataforma SaaS, e os eventos fluem automaticamente para sua conta AWS.

O setup é simples: acesse o console EventBridge, crie uma conexão com a aplicação SaaS usando sua API key/token, e a plataforma cria um partner event bus na sua conta. Você então cria regras normalmente para processar esses eventos. Isso elimina o gerenciamento de webhooks, retry manual e armazenamento de secrets no seu código.

# Criar conexão com Stripe (exemplo)
conn_response = client.create_connection(
    Name='stripe-connection',
    Description='Conexão com Stripe para eventos de pagamento',
    AuthorizationType='API_KEY',
    AuthParameters={
        'ApiKeyAuthParameters': {
            'ApiKeyName': 'X-Stripe-Key',
            'ApiKey': 'sk_live_xxxxx'  # Seria um secret gerenciado
        }
    }
)

# Regra para processar eventos do Stripe
client.put_rule(
    Name='stripe-pagamento-recebido',
    EventBusName='aws.partner/stripe.com/acct_xxxxx/default',
    EventPattern=json.dumps({
        'source': ['aws.partner/stripe.com/acct_xxxxx/default'],
        'detail-type': ['charge.succeeded']
    }),
    State='ENABLED'
)

# Target: invocar Lambda para processar pagamento
client.put_targets(
    Rule='stripe-pagamento-recebido',
    EventBusName='aws.partner/stripe.com/acct_xxxxx/default',
    Targets=[
        {
            'Id': '1',
            'Arn': 'arn:aws:lambda:us-east-1:123456789:function:processar-pagamento',
            'RoleArn': 'arn:aws:iam::123456789:role/EventBridgeRole'
        }
    ]
)

Conclusão

Três pontos fundamentais: Event Bus é o barramento central que desacopla suas aplicações — use event buses customizados para isolar eventos entre times; Rules são o roteamento, simples e poderosas para filtrar e distribuir eventos para múltiplos targets; Pipes adicionam transformação e enriquecimento quando você precisa de lógica intermediária mais complexa. Por fim, SaaS integrations eliminam webhooks manuais — deixe que terceiros publiquem diretamente no seu barramento.

Domine estes quatro componentes e você terá arquitetura event-driven robusta, escalável e desacoplada.

Referências


Artigos relacionados