<h2>Event Bus: Fundação do EventBridge</h2>
<p>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.</p>
<p>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.</p>
<pre><code class="language-python">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'
}
]
)</code></pre>
<h2>Rules: Roteamento Inteligente de Eventos</h2>
<p>Rules definem <em>como</em> e <em>para onde</em> 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).</p>
<p>As patterns utilizam JSON matching com suporte a operadores como <code>anything-but</code>, <code>numeric</code>, <code>exists</code> e <code>prefix</code>. 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.</p>
<pre><code class="language-python"># 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'
}
}
]
)</code></pre>
<h2>Pipes: Transformação e Enriquecimento em Movimento</h2>
<p>EventBridge Pipes (recurso mais recente) é um serviço que conecta uma origem (source) a um destino (target) com transformação, filtragem e enriquecimento <strong>intermediários</strong>. 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.</p>
<p>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.).</p>
<pre><code class="language-python"># 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']}")</code></pre>
<h2>SaaS Integrations: Recebendo Eventos de Terceiros</h2>
<p>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.</p>
<p>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.</p>
<pre><code class="language-python"># 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'
}
]
)</code></pre>
<h2>Conclusão</h2>
<p>Três pontos fundamentais: <strong>Event Bus é o barramento central</strong> que desacopla suas aplicações — use event buses customizados para isolar eventos entre times; <strong>Rules são o roteamento</strong>, simples e poderosas para filtrar e distribuir eventos para múltiplos targets; <strong>Pipes adicionam transformação e enriquecimento</strong> quando você precisa de lógica intermediária mais complexa. Por fim, <strong>SaaS integrations eliminam webhooks manuais</strong> — deixe que terceiros publiquem diretamente no seu barramento.</p>
<p>Domine estes quatro componentes e você terá arquitetura event-driven robusta, escalável e desacoplada.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/eventbridge/" target="_blank" rel="noopener noreferrer">AWS EventBridge Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html" target="_blank" rel="noopener noreferrer">AWS EventBridge Pipes User Guide</a></li>
<li><a href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas-integrations.html" target="_blank" rel="noopener noreferrer">EventBridge Partner Event Sources</a></li>
<li><a href="https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html" target="_blank" rel="noopener noreferrer">Event Pattern Matching Guide</a></li>
</ul>