AWS Certified Cloud Practitioner

Post 20 of 25

80%

Complete

Cloud Architecture6 min read

AWS Cloud Practitioner #20: SNS, SQS y Messaging

Aprende SNS (pub/sub), SQS (queues), diferencias entre ambos y cuándo usar cada servicio de messaging.

🎯 Lo que Aprenderás Hoy

  • Explicar SNS (Simple Notification Service)
  • Comprender SQS (Simple Queue Service)
  • Diferenciar SNS vs. SQS
  • Identificar patrones de mensajería
  • Combinar SNS + SQS (fanout pattern)

Amazon SNS (Simple Notification Service)

¿Qué es? Pub/Sub messaging service (publish/subscribe).

plaintext
Model: 1 publisher → Many subscribers
 
Publisher:
Application publica mensaje a SNS Topic
 
Subscribers:
- Email
- SMS
- HTTP/HTTPS endpoints
- Lambda functions
- SQS queues
- Mobile push notifications
 
Ejemplo:
Order placed → SNS Topic "OrdersCreated"
Subscribers:
- Email a admin
- SMS a customer
- Lambda para inventory update
- SQS queue para analytics

Creating Topic

bash
# Create SNS topic
aws sns create-topic --name OrdersCreated
 
# Subscribe email
aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:123456789012:OrdersCreated \
  --protocol email \
  --notification-endpoint admin@empresa.com
 
# Publish message
aws sns publish \
  --topic-arn arn:aws:sns:us-east-1:123456789012:OrdersCreated \
  --message "New order #1234 created" \
  --subject "Order Notification"
 
# All subscribers receive message instantly

Use Cases

plaintext
1. Notifications:
   CloudWatch Alarm → SNS → Email/SMS
   "EC2 CPU > 80%"
 
2. Fan-out:
   1 event → Multiple systems
   Order → Email + SMS + Inventory + Analytics
 
3. Mobile push:
   Backend → SNS → iOS/Android app
   "Your package shipped"
 
4. Webhooks:
   Event → SNS → HTTP endpoint
   External system integration

Amazon SQS (Simple Queue Service)

¿Qué es? Message queue service (producer/consumer).

plaintext
Model: Producer → Queue → Consumer
 
Producer: Sends messages to queue
Queue: Stores messages
Consumer: Polls queue, processes messages
 
Example:
User uploads video → SQS queue "VideoProcessing"
Worker instances poll queue → Process video → Delete message
 
Benefits:
✅ Decoupling (producer/consumer independent)
✅ Buffering (handle traffic spikes)
✅ Reliability (messages persisted)

Queue Types

1. Standard Queue

plaintext
Características:
✅ Unlimited throughput
✅ At-least-once delivery (puede duplicar)
✅ Best-effort ordering (no guarantee)
✅ Cheaper
 
Use when:
- High throughput needed
- Duplicates OK
- Order doesn't matter
 
Example:
Log aggregation
Email sending (duplicates filtered by recipient)

2. FIFO Queue

plaintext
Características:
✅ Exactly-once processing (no duplicates)
✅ Strict ordering (FIFO)
✅ 300 messages/sec (3000 with batching)
✅ Slightly more expensive
 
Use when:
- Order critical
- No duplicates allowed
 
Example:
Financial transactions
Order processing (avoid duplicate charges)
 
Queue name must end with .fifo

Sending/Receiving

bash
# Send message
aws sqs send-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123456789012/VideoQueue \
  --message-body "Process video: video123.mp4"
 
# Receive message
aws sqs receive-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123456789012/VideoQueue
 
# Message returned:
{
  "MessageId": "abc-123",
  "ReceiptHandle": "xyz-789",  # Para delete
  "Body": "Process video: video123.mp4"
}
 
# Process message
process_video("video123.mp4")
 
# Delete message (acknowledge)
aws sqs delete-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123456789012/VideoQueue \
  --receipt-handle xyz-789
 
# Si no delete → Message reappears después de visibility timeout

Visibility Timeout

plaintext
Problem:
Consumer 1 receives message → Processing...
Consumer 2 también recibe mismo message (duplicate processing)
 
Solution: Visibility Timeout
 
Flow:
1. Consumer receives message
2. Message hidden for visibility timeout (default: 30s)
3. Consumer processes
4. Consumer deletes message
5. Si consumer falla → Message reappears después de timeout
 
Config: 1 second - 12 hours

Dead Letter Queue (DLQ)

plaintext
Problem:
Message fails processing repeatedly (poison message)
 
Solution: DLQ
 
Setup:
Main queue: VideoQueue
DLQ: VideoQueue-DLQ
Max receives: 3
 
Flow:
Message processed → Fails → Back to queue (1)
Message processed → Fails → Back to queue (2)
Message processed → Fails → Back to queue (3)
Exceeds max → Moved to DLQ
 
Investigate DLQ manually, fix issues

SNS vs. SQS

AspectoSNSSQS
PatternPub/SubQueue
DeliveryPush (instant)Pull (polling)
SubscribersMultipleSingle consumer
Use caseNotifications, fan-outJob processing, decoupling
PersistenceNo (instant delivery)Yes (until deleted)
OrderingNo guaranteeFIFO queue guarantee
plaintext
Use SNS when:
✅ Múltiples sistemas deben recibir mismo event
✅ Real-time notifications
✅ Broadcasting
 
Use SQS when:
✅ Decouple producer/consumer
✅ Buffer traffic spikes
✅ Process messages at your pace
✅ Retry logic needed
 
Ejemplo SNS:
Order created → Notify email, SMS, inventory (all at once)
 
Ejemplo SQS:
Video uploaded → Queue → Workers process (one by one)

Fan-Out Pattern (SNS + SQS)

Combine para max flexibility:

plaintext
Architecture:
 
Order Service

SNS Topic "OrdersCreated"
    ├→ SQS Queue "EmailQueue" → Email Worker
    ├→ SQS Queue "InventoryQueue" → Inventory Service
    └→ SQS Queue "AnalyticsQueue" → Analytics Service
 
Beneficios:
✅ SNS broadcasts a todos
✅ Each SQS queue buffers independientemente
✅ Each service processes at own pace
✅ Retry logic per queue
✅ No message loss (SQS persistence)
 
Setup:
1. Create SNS topic
2. Create múltiples SQS queues
3. Subscribe each queue to topic
4. Consumers poll their queues

Pricing

SNS

plaintext
Requests:
$0.50 per 1M requests (publish)
 
Notifications:
- Email: $2 per 100K
- SMS: $0.00645 per SMS (US)
- HTTP: $0.60 per 1M
- Lambda/SQS: $0
 
Free Tier:
1M requests/month
100K HTTP deliveries
1K email notifications

SQS

plaintext
Requests:
$0.40 per 1M requests (Standard)
$0.50 per 1M requests (FIFO)
 
Data transfer:
Free dentro de region
 
Free Tier:
1M requests/month (always free)
 
Example:
10M messages/month:
(10M - 1M free) × $0.40/1M = $3.60/month

Best Practices

plaintext
SNS:
✅ Use topics para different event types
✅ Filter policies (subscribers solo reciben relevant messages)
✅ Enable encryption at rest
✅ Monitor delivery failures
 
SQS:
✅ Set appropriate visibility timeout (>processing time)
✅ Use DLQ para failed messages
✅ Batch operations (SendMessageBatch)
✅ Long polling (reduces empty receives)
✅ FIFO solo cuando strictly needed (overhead)
 
SNS + SQS:
✅ Fan-out pattern para reliability
✅ Each service independent
✅ Retry logic aislado

📝 Preparación para el Examen

Puntos Clave

SNS:

  • 📌 Pub/Sub: 1 publisher → many subscribers
  • 📌 Push: Instant delivery
  • 📌 Subscribers: Email, SMS, HTTP, Lambda, SQS
  • 📌 Use case: Notifications, broadcasting

SQS:

  • 📌 Queue: Producer → queue → consumer
  • 📌 Pull: Consumer polls
  • 📌 Types: Standard (high throughput) vs. FIFO (ordered)
  • 📌 Use case: Decoupling, buffering

Fan-Out:

  • 📌 SNS + SQS: Broadcast + reliable processing
  • 📌 Pattern: SNS topic → multiple SQS queues

Preguntas de Práctica

Pregunta 1:

Una aplicación necesita enviar notificaciones a email, SMS y Lambda cuando order es creada. ¿Qué servicio usar?

A) SQS B) SNS C) S3 D) CloudWatch

Success

Respuesta: B) SNS

SNS (Pub/Sub) permite broadcast a múltiples subscribers (email, SMS, Lambda) simultáneamente.

SQS es queue (single consumer por message).

Pregunta 2:

¿Qué SQS queue type garantiza exactly-once processing y ordering?

A) Standard Queue B) FIFO Queue C) Both D) Neither

Success

Respuesta: B) FIFO Queue

FIFO garantiza:

  • Exactly-once processing (no duplicates)
  • Strict ordering (FIFO)

Standard queue: at-least-once (puede duplicar), best-effort ordering.


🎓 Resumen

  1. SNS: Pub/Sub, instant delivery, multiple subscribers
  2. SQS: Queue, pull-based, decoupling
  3. Standard: High throughput, at-least-once
  4. FIFO: Ordered, exactly-once, slower
  5. Fan-Out: SNS + SQS para broadcast + reliability

⏭️ Próximo Post

Post #21: CloudFormation - Infrastructure as Code


Tags: #AWS #CloudPractitioner #SNS #SQS #Messaging #Queues #PubSub #Certification

Written by Jhonny Lorenzo

Researcher at TrautsLab

Related Articles

Recent Articles

Comments