Cloud & Infraestrutura

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

7 min de leitura

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

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

<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(&#039;events&#039;)

Criar um Event Bus customizado

response = client.create_event_bus(Name=&#039;meu-app-events&#039;)

print(f&quot;Event Bus criado: {response[&#039;EventBusArn&#039;]}&quot;)

Publicar um evento

event_data = {

&#039;orderId&#039;: &#039;12345&#039;,

&#039;customerId&#039;: &#039;cust-789&#039;,

&#039;amount&#039;: 99.99,

&#039;status&#039;: &#039;created&#039;

}

client.put_events(

Entries=[

{

&#039;Source&#039;: &#039;minha.aplicacao.pedidos&#039;,

&#039;DetailType&#039;: &#039;Pedido Criado&#039;,

&#039;Detail&#039;: json.dumps(event_data),

&#039;EventBusName&#039;: &#039;meu-app-events&#039;

}

]

)</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=&#039;pedidos-altos-valor&#039;,

EventBusName=&#039;meu-app-eventos&#039;,

EventPattern=json.dumps({

&#039;source&#039;: [&#039;minha.aplicacao.pedidos&#039;],

&#039;detail-type&#039;: [&#039;Pedido Criado&#039;],

&#039;detail&#039;: {

&#039;amount&#039;: [{&#039;numeric&#039;: [&#039;&gt;&#039;, 50]}]

}

}),

State=&#039;ENABLED&#039;

)

Adicionar Target: SNS

client.put_targets(

Rule=&#039;pedidos-altos-valor&#039;,

EventBusName=&#039;meu-app-eventos&#039;,

Targets=[

{

&#039;Id&#039;: &#039;1&#039;,

&#039;Arn&#039;: &#039;arn:aws:sns:us-east-1:123456789:notificacoes-fraud&#039;,

&#039;RoleArn&#039;: &#039;arn:aws:iam::123456789:role/EventBridgeRole&#039;,

&#039;RetryPolicy&#039;: {

&#039;MaximumEventAge&#039;: 3600,

&#039;MaximumRetryAttempts&#039;: 2

},

&#039;DeadLetterConfig&#039;: {

&#039;Arn&#039;: &#039;arn:aws:sqs:us-east-1:123456789:dlq-pedidos&#039;

}

}

]

)</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=&#039;enriquecer-pedidos-pipe&#039;,

Source=&#039;arn:aws:sqs:us-east-1:123456789:pedidos-entrada&#039;,

SourceParameters={

&#039;SqsQueueParameters&#039;: {

&#039;BatchSize&#039;: 10,

&#039;MaximumBatchingWindowInSeconds&#039;: 5

},

&#039;FilterCriteria&#039;: {

&#039;Filters&#039;: [

{

&#039;Pattern&#039;: json.dumps({

&#039;body&#039;: {

&#039;status&#039;: [&#039;pending&#039;]

}

})

}

]

}

},

Enrichment=&#039;arn:aws:lambda:us-east-1:123456789:function:enriquecer-pedido&#039;,

EnrichmentParameters={

&#039;HttpParameters&#039;: {

&#039;HeaderParameters&#039;: {

&#039;X-Custom-Header&#039;: &#039;valor&#039;

}

},

&#039;RoleArn&#039;: &#039;arn:aws:iam::123456789:role/PipeRole&#039;

},

Target=&#039;arn:aws:sqs:us-east-1:123456789:pedidos-processados&#039;,

TargetParameters={

&#039;SqsQueueParameters&#039;: {

&#039;MessageDeduplicationId&#039;: &#039;$.body.orderId&#039;

},

&#039;RoleArn&#039;: &#039;arn:aws:iam::123456789:role/PipeRole&#039;

},

RoleArn=&#039;arn:aws:iam::123456789:role/PipeRole&#039;

)

print(f&quot;Pipe criado: {pipe_response[&#039;PipeArn&#039;]}&quot;)</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=&#039;stripe-connection&#039;,

Description=&#039;Conexão com Stripe para eventos de pagamento&#039;,

AuthorizationType=&#039;API_KEY&#039;,

AuthParameters={

&#039;ApiKeyAuthParameters&#039;: {

&#039;ApiKeyName&#039;: &#039;X-Stripe-Key&#039;,

&#039;ApiKey&#039;: &#039;sk_live_xxxxx&#039; # Seria um secret gerenciado

}

}

)

Regra para processar eventos do Stripe

client.put_rule(

Name=&#039;stripe-pagamento-recebido&#039;,

EventBusName=&#039;aws.partner/stripe.com/acct_xxxxx/default&#039;,

EventPattern=json.dumps({

&#039;source&#039;: [&#039;aws.partner/stripe.com/acct_xxxxx/default&#039;],

&#039;detail-type&#039;: [&#039;charge.succeeded&#039;]

}),

State=&#039;ENABLED&#039;

)

Target: invocar Lambda para processar pagamento

client.put_targets(

Rule=&#039;stripe-pagamento-recebido&#039;,

EventBusName=&#039;aws.partner/stripe.com/acct_xxxxx/default&#039;,

Targets=[

{

&#039;Id&#039;: &#039;1&#039;,

&#039;Arn&#039;: &#039;arn:aws:lambda:us-east-1:123456789:function:processar-pagamento&#039;,

&#039;RoleArn&#039;: &#039;arn:aws:iam::123456789:role/EventBridgeRole&#039;

}

]

)</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>

Comentários

Mais em Cloud & Infraestrutura

Dominando FinOps Avançado na AWS: Reserved Instances, Savings Plans e Spot em Projetos Reais
Dominando FinOps Avançado na AWS: Reserved Instances, Savings Plans e Spot em Projetos Reais

Entendendo os Modelos de Preços na AWS A otimização de custos na AWS vai muit...

Como Usar AWS CLI e AWS SDK: Automação e Scripting de Infraestrutura em Produção
Como Usar AWS CLI e AWS SDK: Automação e Scripting de Infraestrutura em Produção

Diferença Entre AWS CLI e AWS SDK A AWS CLI (Command Line Interface) e o AWS...

Boas Práticas de CloudFormation em Profundidade: Templates, Stacks e StackSets para Times Ágeis
Boas Práticas de CloudFormation em Profundidade: Templates, Stacks e StackSets para Times Ágeis

Fundamentos de CloudFormation para Automação de Infraestrutura CloudFormation...