Amazon EventBridge
Serverless event bus that routes events to targets based on their content. Here's what EventBridge is good for, what it costs, how it connects to Lambda, SQS, and SNS, and the mistakes Design Beaver catches as you draw.
What EventBridge is
EventBridge is a router for events. A bus receives events — from AWS services, from a SaaS partner, or from your own application via the PutEvents API — and every rule on the bus checks each event against a pattern that filters on its source, type, and contents. When an event matches, EventBridge forwards a copy to that rule’s targets, which run in parallel.
The point is decoupling with routing. A producer emits “order placed” and has no idea who reacts to it; the routing logic lives in the bus, not the producer. Design Beaver models EventBridge as a regional, API-accessed router rather than something that sits inside a VPC subnet, and validates as you draw which targets a rule can actually reach and what each one needs to be correct.
When to use EventBridge (and when not to)
Reach for EventBridge when you need content-based routing across many event types, sources, and targets — the routing belongs in the bus, not baked into every producer. It’s also the natural way to react to AWS service events, since most services emit them to the default bus for free, and the way to keep microservices decoupled so producers and consumers evolve independently.
Don’t reach for it for plain fan-out to a fixed, known set of subscribers — SNS is simpler and cheaper for pure pub/sub. A single consumer that needs a durable buffer is a bare SQS queue. High-throughput, strictly-ordered stream processing is Kinesis, not an event bus. And cron-style or one-off scheduled invocations are EventBridge Scheduler — a separate feature, not the event bus modeled here.
Variants: default, custom, and partner buses
These are the buses you actually choose between when placing one on a canvas — not to be confused with the separate EventBridge features (Scheduler, Pipes, Schema Registry, API Destinations) that aren’t modeled here.
| Option | What it is |
|---|---|
| Default event busdefault | One per account per Region, created automatically. Receives events from AWS services (most emit here for free). You can't delete it. |
| Custom event bus | A bus you create for your own application's events, published with the PutEvents API. Use a dedicated bus to isolate an app's events and scope its rules/permissions. |
| Partner event bus | Receives events from an integrated SaaS partner (e.g. a third-party monitoring or payments provider) so you can route them with rules like any other event. |
EventBridge pricing
You pay per event published to a bus, and the fact that shapes architecture is that events AWS services emit to the default bus are free — reacting to an S3 upload or an EC2 state change costs nothing at the bus itself. Your own custom events and partner events are billed by volume, and there’s no separate charge for rules or delivery. The targets, though, carry their own normal charges.
Pay per event published to your event buses. Events emitted by AWS services to the default bus are free; you pay for custom events (your own PutEvents) and third-party/cross-Region events. There is no separate charge for rules or for delivery to targets. EventBridge Scheduler, Pipes, and Schema Registry are priced separately and are not covered here.
| Option | Representative rate |
|---|---|
| custom | $1.00 per million custom events published to an event bus |
| partner | $1.00 per million third-party (partner/SaaS) events |
| default | AWS service events on the default bus: free |
Free tier
- Events published by AWS services to the default event bus are always free (no charge and no free-tier cap needed)
- Custom events have no standing free tier — treat custom-event volume as billed from the first event
Keeping the bill down
- Let AWS service events (free) do the work where possible rather than re-publishing them as custom events
- Filter with specific rule event patterns so you're not fanning every event to every target — routing cost is per published event, but downstream target invocations (Lambda, SQS) carry their own charges
us-east-1 (rates vary by region). Rates as of 2026-07. Verify at the official pricing page before using for real cost estimates — this list is not kept in sync with AWS pricing changes. Cross-Region event replication is billed as an additional custom-event charge, and Scheduler/Pipes/Schema Registry have their own separate pricing not covered here.
How EventBridge connects to other services
A bus on a canvas is just a box until you know which targets a rule can actually deliver to and what each delivery requires — the resource-based policy, the direction, the at-least-once caveat. Design Beaver models each of these edges, so it knows what EventBridge can route to and what makes that route correct.
A rule matches an event and invokes a Lambda function with the event as its payload — the most common EventBridge target for running custom logic in response to an event
A rule routes matched events into an SQS queue, giving a consumer a durable buffer to process them at its own pace — the routing-plus-queue pattern when you want both filtering and back-pressure
A rule publishes matched events to an SNS topic to fan them out to many subscribers at once — EventBridge does the content-based routing, SNS does the fan-out
A rule starts a Step Functions state machine execution when an event matches — the event becomes the workflow input, kicking off a multi-step process in response to something happening
What EventBridge can’t connect to
Some edges look reasonable on a canvas but don’t exist in AWS — the bus routes events to targets that can receive them, not into a database, bucket, or CDN. Design Beaver flags them instead of letting you draw a diagram that can’t be built.
S3 is not an EventBridge rule target — the bus can't deliver an event into a bucket. The real relationship runs the other way: with EventBridge notifications enabled on the bucket, S3 sends object events TO the bus (an S3 -> EventBridge edge). To write to S3 in response to an event, target a Lambda that puts the object.
DynamoDB isn't a native rule target — a rule can't write an item to a table directly. Target a Lambda that writes the item instead. (DynamoDB Streams can be an event *source* via EventBridge Pipes, which is the reverse direction and a separate feature.)
A database is not an event target — EventBridge has no way to deliver an event into RDS. Put a consumer (a Lambda target) between the bus and the database to persist anything.
SES is not a native EventBridge rule target — the bus can't hand an event to SES to send email. To email on an event, target a Lambda that calls SES. (SES can publish its own sending events TO EventBridge, which is the reverse direction.)
CloudFront is a CDN that serves content from HTTP origins — it is neither an event target nor an event source for the bus. There is no EventBridge -> CloudFront relationship to draw.
A bus has no DNS-addressable hostname, and DNS is not an event target — Route 53 has no role in event routing. Producers and targets reach the bus through the EventBridge API, not a domain name.
Anti-patterns Design Beaver catches
These are the EventBridge mistakes that pass a diagram review but bite in production — the ones the validation engine flags as you draw.
Assuming exactly-once delivery and skipping idempotency in targets
Why it breaksEventBridge delivers at-least-once — in rare cases a rule runs more than once for an event or a target is invoked more than once, so non-idempotent handlers can double-process
Do this insteadMake target handlers idempotent (e.g. dedupe on an event ID) so a duplicate delivery is harmless
Adding targets with no dead-letter queue and no retry policy tuning
Why it breaksAfter the retry policy is exhausted (24h / 185 attempts by default) an undeliverable event is dropped with nowhere to inspect it
Do this insteadAttach a dead-letter queue (an SQS queue) to each target and set a retry policy suited to the workload
Using EventBridge as a high-throughput, ordered streaming pipeline
Why it breaksAn event bus routes discrete events with no ordering guarantee — it's not built for ordered, high-volume stream processing
Do this insteadUse Kinesis Data Streams (or MSK) for ordered, high-throughput streaming; keep EventBridge for routing discrete events
Reaching for EventBridge when you only need plain fan-out to a fixed set of subscribers
Why it breaksIf there's no content-based routing to do, the bus is an extra hop and cost over publishing directly to the fan-out primitive
Do this insteadPublish straight to SNS for simple fan-out, or SQS for a single durable consumer; add EventBridge only when routing/filtering earns its place
Gotchas that bite in production
- Delivery is at-least-once. In rare cases a rule runs more than once for an event, or a target is invoked more than once. Make target handlers idempotent — dedupe on an event ID — instead of assuming exactly-once.
- Undeliverable events are dropped without a DLQ. After the retry policy is exhausted (24 hours or up to 185 attempts by default), an event that still can’t be delivered is gone. Attach a dead-letter queue — an SQS queue — to each target so you can inspect what failed.
- It’s not a streaming pipeline. An event bus routes discrete events with no ordering guarantee. For ordered, high-volume streams, that’s Kinesis, not EventBridge.
- Don’t reach for it just to fan out. If you’re not doing content-based routing, the bus is an extra hop and cost over publishing straight to SNS for fan-out or SQS for one durable consumer. Add EventBridge when the routing earns its place.
- FIFO and encryption caveats on SQS targets. Targeting a FIFO queue requires the rule to supply a message group ID and the queue to use content-based deduplication. EventBridge also can’t target an SQS queue encrypted with an AWS-owned KMS key.
Further reading
Frequently asked questions
When should you use Amazon EventBridge?
What's the difference between EventBridge and SNS?
How much does EventBridge cost?
Can EventBridge write directly to DynamoDB or S3?
Validate your EventBridge architecture as you draw
Design Beaver checks your AWS design in real time — missing queues, invalid connections, and security anti-patterns, caught before you ship. It’s live in beta, free, and runs in your browser with no account.
Open the app →Prefer email? Get new features in your inbox: