messaging

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.

Updated July 12, 2026

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.

OptionWhat it is
Standard topicdefaultHigh throughput, best-effort ordering, at-least-once delivery. Can deliver to all endpoint types (SQS, Lambda, HTTP(S), email, SMS).
FIFO topicStrict 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.

OptionRepresentative 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.

  • SQS

    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.

  • SES

    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

    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.

  • RDS

    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?
Use SNS when one event needs to reach several independent subscribers at once — the fan-out pattern — or when you want push delivery to Lambda and SQS instead of having consumers poll. It's also the way to notify people by email or SMS. It's a poor fit for point-to-point work where a single consumer should pull at its own pace and retry durably — that's SQS — or for rich event routing across many sources, where EventBridge fits better.
How does the SNS + SQS fan-out pattern work?
You subscribe an SQS queue to the SNS topic, so every message published to the topic is copied into the queue for a consumer to process on its own schedule. This gives each consumer a durable buffer with retries and a dead-letter queue, instead of a direct subscription that can drop messages if the consumer is down. The queue's access policy must allow the topic to send to it — the console adds that when you create the subscription.
Can an SNS FIFO topic deliver to email or HTTP endpoints?
No. A FIFO topic only delivers to SQS (and to Lambda indirectly, via an SQS subscription). Email and HTTP(S) subscriptions aren't supported because they can't preserve order. If you need ordering, fan out through FIFO SQS queues; if you need email or HTTP delivery, use a standard topic. Design Beaver flags a FIFO topic paired with a standard queue.
Can SNS write directly to DynamoDB or S3?
No. DynamoDB, S3, and RDS aren't SNS subscriber types — SNS is a messaging topic, not a database or storage client, so it can't deliver a message straight into any of them. To land a message in one of those, subscribe a Lambda function that writes it. Design Beaver flags an SNS edge to DynamoDB, S3, or RDS as invalid.

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:

← All supported services