Amazon SNS
Managed pub/sub messaging that fans one event out to many subscribers. Here's what SNS is good for, what it costs, how it connects to SQS and Lambda, and the mistakes Design Beaver catches as you draw.
What SNS is
SNS (Simple Notification Service) is managed publish/subscribe messaging. A publisher sends one message to a topic, and SNS pushes a copy to every subscriber — SQS queues, Lambda functions, HTTP(S) endpoints, email addresses, or phone numbers over SMS. The publisher never knows or cares who’s listening.
The point is fan-out: one event, say “order placed,” reaches several independent consumers at once — bill the customer, update inventory, send a receipt — without wiring each one to the source. Design Beaver models SNS as a regional, API-accessed service rather than something that sits inside a VPC subnet, and validates as you draw which services can subscribe and what each subscription needs to be correct.
When to use SNS (and when not to)
Reach for SNS when one message needs to reach multiple independent subscribers at once, when you want push delivery to Lambda or SQS instead of making consumers poll, or when you need to notify people by email or SMS as well as, or instead of, other systems.
Don’t reach for it for point-to-point work where a single consumer should process at its own pace and retry durably — send to an SQS queue directly. It’s also the wrong tool for rich event routing and filtering across many sources and targets, where EventBridge fits better. And remember that a bare SNS subscriber that’s down can drop deliveries — if messages must sit durably until pulled, put an SQS queue in the path to buffer them.
Variants: standard vs FIFO topics
The choice between a standard and a FIFO topic isn’t just about ordering — it changes which endpoints the topic can deliver to at all.
| Option | What it is |
|---|---|
| Standard topicdefault | High throughput, best-effort ordering, at-least-once delivery. Can deliver to all endpoint types (SQS, Lambda, HTTP(S), email, SMS). |
| FIFO topic | Strict ordering and de-duplication. Delivers only to SQS (and to Lambda indirectly, via an SQS subscription) — it cannot deliver to email or HTTP(S) endpoints. |
SNS pricing
You pay per request to publish, plus a delivery charge that depends on where each message goes — and the split that matters for architecture is that deliveries to SQS and Lambda have no per-message charge, while HTTP and email deliveries are billed per notification.
Standard topics: pay per API request plus a per-delivery charge that depends on the endpoint type. Deliveries to SQS and Lambda have no per-message charge (you pay only for data transfer); HTTP and email deliveries are charged per notification. FIFO topics are priced on published + subscribed messages and payload data instead.
| Option | Representative rate |
|---|---|
| standard | $0.50 per million requests; $0.06 per 100,000 HTTP/S deliveries; $2.00 per 100,000 email deliveries; no per-message charge for SQS/Lambda deliveries (data transfer only) |
Free tier
- 1,000,000 requests per month
- 100,000 HTTP/S notification deliveries per month
- 1,000 email notification deliveries per month
Keeping the bill down
- Deliver to SQS/Lambda (no per-message delivery fee) rather than HTTP/email where the consumer is a system rather than a person
- Use message filtering (subscription filter policies) so subscribers only receive the messages they care about instead of everything
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. SMS delivery has its own separate per-region pricing not covered here.
How SNS connects to other services
A topic on a canvas is just a box until you know what actually subscribes to it and what that subscription requires — the IAM policy, the direction, the FIFO-vs-standard match. Design Beaver models each of these edges, so it knows what SNS can deliver to and what makes that delivery correct.
Fan-out: an SQS queue subscribes to the topic, so every published message is copied into the queue for a consumer to process on its own schedule — the canonical SNS + SQS durable fan-out pattern
A Lambda function subscribes to the topic and is invoked with each published message's payload — push-based processing with no polling
What SNS can’t connect to
Some edges look reasonable on a canvas but aren’t real AWS integrations — SNS is a messaging topic, not a database, storage bucket, or HTTP origin. Design Beaver flags them instead of letting you draw a diagram that can’t be built.
SNS delivers its own email notifications directly; it does not hand off to SES. The real relationship runs the other way — SES publishes bounce/complaint/delivery events TO an SNS topic — so this is an SES -> SNS edge, not SNS -> SES.
S3 is not an SNS subscriber type — SNS can't deliver a message straight into a bucket. (S3 publishes event notifications TO SNS, which is the reverse direction.) To land a message in S3, subscribe a Lambda that writes it.
DynamoDB is not an SNS subscriber type — SNS can't write to a table directly. Subscribe a Lambda function that writes the item instead.
SNS is a pub/sub messaging service, not a database client — it has no way to deliver a message into RDS. A subscribed consumer (Lambda or an app on EC2) would write to the database.
SNS is not an HTTP content origin — CloudFront caches content from origins like S3 or ALB, never a messaging topic.
A topic has no DNS-addressable hostname a Route 53 record would point at — publishers reach it through the SNS API by topic ARN, not a domain name.
Anti-patterns Design Beaver catches
These are the SNS mistakes that pass a diagram review but bite under load — the ones the validation engine flags as you draw.
Subscribing a slow or failure-prone consumer directly to an SNS topic with no SQS queue in between
Why it breaksSNS has limited retry for direct subscribers; if the consumer is down or can't keep up, messages can be dropped with no way to reprocess them
Do this insteadSubscribe an SQS queue to the topic (SNS + SQS fan-out) so each consumer gets a durable buffer with retries and a dead-letter queue
Reaching for SNS when only one consumer will ever process each message
Why it breaksSNS is pub/sub for fan-out to many subscribers — for single-consumer point-to-point work it adds a hop without benefit
Do this insteadSend directly to an SQS queue and have the one consumer poll it
Expecting a FIFO topic to deliver to email or HTTP endpoints
Why it breaksFIFO topics only deliver to SQS (and to Lambda via an SQS subscription) — email/HTTP subscriptions aren't supported because they can't preserve order
Do this insteadUse a standard topic for email/HTTP delivery, or keep FIFO and fan out through FIFO SQS queues
Gotchas that bite in production
- A direct subscriber that’s down can lose messages. SNS’s retry for direct HTTP and Lambda subscribers is limited. For anything you can’t afford to drop, subscribe an SQS queue to the topic so each consumer gets a durable buffer, retries, and a dead-letter queue.
- FIFO topics can’t email or HTTP. They only deliver to SQS, and to Lambda via an SQS subscription. If you need ordering and email or HTTP delivery, you’re combining two things that don’t combine — rethink the design.
- SNS is fan-out, not a queue. If only one consumer will ever handle each message, SNS is a hop with no benefit. Send to SQS directly.
- Subscribers get everything unless you filter. Without a subscription filter policy, every subscriber receives every message on the topic. Filter policies let consumers receive only what they care about — and cut delivery cost at the same time.
Further reading
Frequently asked questions
When should you use Amazon SNS?
How does the SNS + SQS fan-out pattern work?
Can an SNS FIFO topic deliver to email or HTTP endpoints?
Can SNS write directly to DynamoDB or S3?
Validate your SNS 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: