AWS SNS Explained: An Overview of Amazon's Messaging Service

December 7, 2024
5
min read

Introduction

Efficient communication between distributed systems is essential in modern cloud applications, whether for event-driven workflows, application alerts, or real-time notifications. AWS Simple Notification Service (SNS) simplifies this process, providing a fully managed messaging service to deliver notifications reliably and at scale.

In this guide, we’ll explore AWS SNS, including its features, common use cases, pricing model, monitoring options, helpful tips, and how it compares to tools like AWS SQS, EventBridge, Apache Kafka, Google Pub/Sub, and Azure Event Grid.

What is AWS SNS?

Amazon Simple Notification Service (SNS) is a fully managed publish/subscribe (pub/sub) messaging service that enables real-time message exchange between publishers and subscribers. It supports multiple protocols, including email, SMS, HTTP/HTTPS, and integration with other AWS services like SQS, Lambda and more.

SNS allows publishers to send messages to a centralized topic, which subscribers can register for. This setup decouples communication between systems, enabling publishers and subscribers to operate independently. The result is improved scalability, flexibility, and fault tolerance in distributed architectures.

How AWS SNS Works

Source: Publish-Subscribe-Pattern

Publishers

A publisher is any system, application, or service that sends messages to an SNS topic. Publishers initiate communication without knowing the recipients, creating a decoupled architecture.

Who Can Be a Publisher?

  • Applications: Web or mobile apps sending notifications for events like user signups or order confirmations.
  • Monitoring Tools: Services like AWS CloudWatch publishing system alerts to an SNS topic.
  • IoT Devices: Smart devices sending sensor data for processing and analysis.
  • Backend Services: Systems like payment gateways notifying about completed transactions.

Example:

In an e-commerce system, the order management service acts as the publisher. When a customer places an order, the service publishes an event, such as “Order Placed,” to an SNS topic.

Topics

An SNS topic is a message distribution hub that acts as a logical access point for communication. Publishers send messages to the topic, which then forwards these messages to all subscribers. This setup enables a single message to reach multiple endpoints at the same time.

Example:

In the e-commerce system example, an OrderEvents SNS topic could distribute the “Order Placed” event to:

  1. An email notification system to send order confirmations to customers.
  2. A warehouse system API to start the fulfillment process.
  3. A data analytics pipeline for logging and insights.

By decoupling publishers and subscribers, SNS topics enhance system flexibility, scalability, and maintainability.

Subscribers

Subscribers are the recipients of messages sent through an SNS topic. They can receive messages via various delivery methods, including:

  • Email: Directly to specified email addresses.
  • SMS: Sent as text messages to mobile devices.
  • Mobile Push Notifications: Delivered to mobile apps via services like Firebase or APNS.
  • HTTP/HTTPS Endpoints: Sent to webhooks for system-to-system communication.
  • AWS Lambda Functions: Trigger serverless functions to process messages or execute workflows.
  • AWS SQS: Forwarded to Amazon SQS queues for asynchronous processing.
  • AWS Kinesis Data Firehose: Streamed to analytics or storage destinations, such as Amazon S3.

Key Features of AWS SNS

Topic-Based Pub/Sub Messaging:

AWS SNS uses topics as "mailboxes" to manage messages. Multiple subscribers can receive the same message simultaneously, making it ideal for broadcasting notifications.

Multi-Protocol Delivery:

Messages can be delivered via SMS, email, mobile push notifications, or even trigger a Lambda function for custom workflows.

Scalability and Low Latency:

AWS SNS scales automatically to handle millions of messages per second, with latencies typically under 30 milliseconds.

Message Filtering:

Subscribers can filter messages based on attributes, ensuring they only receive relevant notifications. This reduces noise and optimizes resource usage.

Monitoring and Metrics:

AWS SNS integrates with CloudWatch, providing key metrics like delivery success, message latency, and failure rates.

Encryption and Security:

Messages are encrypted at rest and in transit using AWS KMS (Key Management Service). Topic policies ensure secure communication.

Dead-Letter Queues (DLQs):

Failed messages can be redirected to DLQs, enabling analysis and troubleshooting.

Common Use Cases

Customer Engagement: E-commerce platforms send promotional offers and order updates via SMS or mobile push notifications.

Source: Mobile text messaging with Amazon SNS - Amazon Simple Notification Service

Event-Driven Architectures: Microservices publish events to SNS topics, which fan out to SQS queues. The events are then consumed and processed by EC2 instances running different microservice

Diagram showing Message bus pattern on AWS
Source: Communication mechanisms

IoT Communication: IoT devices like smart thermostats or security cameras send data to IoT Core, where rules trigger Amazon SNS to deliver notifications like "Motion Detected" via email to users.

Source: Monitor IoT device geolocation with AWS IoT Events

Log Processing: Logs from multiple sources are aggregated in Amazon CloudWatch, and notifications are triggered via Amazon SNS to subscribing systems for real-time processing and alerting.

Source: Amazon Simple Notification Service (SNS) | AWS Database Blog

AWS SNS Pricing

AWS SNS follows a pay-as-you-go model and also has a free tier.

Note: Each 64KB chunk of published data is billed as 1 request. For example, a single publish with a 256KB payload is billed as four requests.

All pricing examples use the N. Virginia region.

  1. Publish Requests
    • Free Tier: The first 1 million Amazon SNS requests per month are free.
    • Price: $0.50 per 1 million requests thereafter.
    • Example: Publishing 10 million messages/month costs $4.50.
  2. Notification Delivery Costs
    • Email:
      • Free Tier: 1,000 notifications.
      • Price: $2.00 per 100,000 notifications.
    • SMS:
      • Pricing varies by destination country and may include a telecom carrier fee.
      • Example: Sending an SMS to a phone number in the USA incurs the following charges:
        • Base Cost: $0.00581 per message.
        • Carrier Fee: ~$0.003 per message.
    • Mobile Push Notifications:
      • Free Tier: 1 million notifications.
      • Price: $0.50 per million notifications.
    • HTTP/HTTPS:
      • Free Tier: 100,000 notifications.
      • Price: $0.60 per million notifications.
  3. Integration Costs
    • Simple Queue Service (SQS): Delivery to SQS queues is free, but standard SQS pricing applies.
    • AWS Lambda: Delivery to Lambda is free, but standard Lambda pricing applies.
    • Amazon Kinesis Data Firehose: Delivery is charged at $0.19 per million notifications.
  4. Data Transfer Costs
    • Data Transfer IN: Free.
    • Data Transfer OUT:
      • First 9.999 TB per month: $0.09 per GB.
      • Next 40 TB per month: $0.085 per GB.
      • Next 100 TB per month: $0.07 per GB.
      • Greater than 150 TB per month: $0.05 per GB.

Cost Calculation Example:

For an e-commerce platform:

  • Publish Requests: 2 million messages = $1.00.
  • SMS Delivery (US): 100,000 messages = ~$881.00.
  • HTTP Delivery: 1 million messages = $0.60.
  • Total Monthly Cost: $646.60

AWS SNS vs SQS

It’s common for AWS users to confuse SNS (Simple Notification Service) and SQS (Simple Queue Service) since both are messaging services designed to facilitate communication between distributed systems. While they share similarities, they serve different purposes and follow distinct processing models.

When to Use AWS SNS: Real-time notifications and broadcasting messages.

When to Use AWS SQS: Durable message queueing and decoupling systems.

AWS EventBridge vs SNS

Both AWS EventBridge and SNS are event-driven services that enable communication between applications. While they may seem similar, they serve distinct purposes. SNS is best suited for simple pub/sub messaging, while EventBridge provides advanced event routing with SaaS integrations and schema-based filtering. Understanding these differences is key to choosing the right tool for modern, event-driven architectures.

AWS SNS vs Kafka

At first glance, AWS SNS and Apache Kafka may seem similar, as both support message distribution in distributed systems. However, they serve different purposes: SNS is optimized for real-time, event-driven notifications, while Kafka specializes in high-throughput, persistent stream processing. Understanding their unique strengths helps in selecting the right tool for specific needs.

Comparison with Cloud Alternatives

Monitoring AWS SNS

Source: Monitoring your Amazon SNS message filtering activity with Amazon CloudWatch

Monitoring your SNS processes is crucial to ensure reliable message delivery and system performance. Amazon CloudWatch provides detailed metrics that help you track the behavior and efficiency of your SNS topics. Below are some key metrics you can monitor:

  • NumberOfMessagesPublished: The total number of messages sent to an SNS topic. This metric helps you understand the overall usage and workload of your topics.
  • NumberOfNotificationsFailed: The number of message delivery failures to subscribers. Monitoring this metric can help identify issues with specific endpoints, such as unreachable email addresses or unavailable HTTP endpoints.
  • MessageDeliveryLatency: The time it takes for a message to be delivered to a subscriber after being published. This metric is useful for diagnosing delays and ensuring timely message delivery in real-time applications.

Working with SNS via AWS CLI

AWS SNS can be managed easily through the AWS CLI, allowing you to create topics, publish messages, and manage subscriptions directly from the command line. Below are some common operations to get you started:

Create a Topic:

Create a new SNS topic to act as a message distribution hub:

aws sns create-topic --name MyTopic

Publish a Message

Send a message to a specific SNS topic


aws sns publish \\
 --topic-arn arn:aws:sns:us-east-1:123456789012:MyTopic \\
 --message "Hello, World!"

List All Topics

View a list of all existing SNS topics:

aws sns list-topics

Create a Subscription

Subscribe an endpoint to an SNS topic for receiving messages:

aws sns subscribe \\
 --topic-arn arn:aws:sns:us-east-1:123456789012:MyTopic \\
 --protocol email \\
 --notification-endpoint user@example.com

Available Protocols:

  • email: For email notifications.
  • sms: For SMS messages.
  • http: For HTTP endpoints.
  • https: For HTTPS endpoints.
  • lambda: For invoking an AWS Lambda function.
  • sqs: For sending messages to an Amazon SQS queue.

Tips for Optimizing AWS SNS

1. Keep Costs Under Control

AWS SNS supports various delivery methods, each with its own cost structure. Here’s how to optimize your expenses:

  • Prioritize Cost-Effective Methods: Use email or mobile push notifications for non-critical or high-volume messages.
  • Limit SMS Use: Reserve SMS for urgent alerts and reduce costs with batching to minimize individual messages.
  • Monitor Costs Regularly: Leverage AWS Cost Explorer and CloudWatch metrics to track usage and identify cost-saving opportunities.

2. Strengthen Topic Security

Securing your SNS topics is essential for protecting sensitive data:

  • Apply IAM Policies: Restrict publishing and subscribing permissions with fine-grained IAM policies.
  • Encrypt Data: Use AWS KMS to secure messages in transit and at rest.
  • Restrict Access: Set topic policies to allow only specific users or conditions for access.

3. Use Message Filtering

Not every subscriber needs all messages. By implementing message filtering, you can:

  • Ensure subscribers only receive notifications relevant to them.
  • Reduce costs and improve efficiency with attribute-based filters.

4. Monitor Metrics for Performance

Set up CloudWatch alarms to track critical metrics, such as:

  • NumberOfMessagesPublished
  • NumberOfNotificationsDelivered
  • PublishSize
  • SMSSuccessRate
  • ApproximateNumberOfTopics

5. Utilize Dead-Letter Queues (DLQs)

Configure DLQs to capture undelivered messages. This ensures:

  • No data is lost during processing.
  • You can analyze and resolve delivery failures effectively.

6. Plan for Scalability

Ensure your architecture can handle growth:

  • Use Standard Topics: For high-throughput scenarios.
  • Integrate with SQS: To buffer messages and prevent bottlenecks during peak traffic.

Conclusion

AWS Simple Notification Service (SNS) is a powerful and versatile messaging service that simplifies real-time communication in distributed systems. Its ability to handle pub/sub messaging with multiple delivery protocols, combined with features like message filtering, dead-letter queues, and seamless integration with other AWS services, makes it an essential tool for modern cloud architectures.

As cloud architectures grow more complex, selecting the right tools is crucial. AWS SNS, with its ease of use and integration capabilities, can be a cornerstone for building scalable and resilient systems.

Share this article:
Subscribe to our newsletter to get our latest updates!
Thank you!
Your submission has been received!
Oops! Something went wrong while submitting the form.
Related articles