Use Amazon SNS for pub/sub messaging and notifications. Create topics and manage subscriptions across protocols (SQS, Lambda, HTTP, email, SMS). Configure message filtering, mobile push notifications, and fan-out architectures.
Amazon Simple Notification Service (SNS) is a fully managed pub/sub messaging service. Publishers send messages to topics, and subscribers receive them via SQS, Lambda, HTTP/S, email, SMS, or mobile push. It's the glue for fan-out architectures.
# Create a standard topic
aws sns create-topic --name order-events
# Create a FIFO topic
aws sns create-topic \
--name order-events.fifo \
--attributes FifoTopic=true,ContentBasedDeduplication=true
# List topics
aws sns list-topics --query 'Topics[].TopicArn' --output table
# Subscribe an SQS queue to a topic
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events \
--protocol sqs \
--notification-endpoint arn:aws:sqs:us-east-1:123456789:order-processing
# Subscribe a Lambda function
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events \
--protocol lambda \
--notification-endpoint arn:aws:lambda:us-east-1:123456789:function:process-order
# Subscribe an HTTP endpoint
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events \
--protocol https \
--notification-endpoint https://api.myapp.com/webhooks/orders
# Subscribe email (requires confirmation)
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events \
--protocol email \
--notification-endpoint alerts@myapp.com
# List subscriptions for a topic
aws sns list-subscriptions-by-topic \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events
# Publish a message to a topic
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events \
--message '{"orderId":"12345","status":"completed","amount":99.99}' \
--message-attributes '{
"event_type": {"DataType":"String","StringValue":"order.completed"},
"priority": {"DataType":"String","StringValue":"high"}
}'
# Publish to FIFO topic
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789:order-events.fifo \
--message '{"orderId":"12345","status":"completed"}' \
--message-group-id "customer-789" \
--message-deduplication-id "order-12345-completed"
# Publish with different payloads per protocol
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789:alerts \
--message-structure json \
--message '{
"default": "Order 12345 completed",
"email": "Your order #12345 has been completed. Thank you!",
"sqs": "{\"orderId\":\"12345\",\"status\":\"completed\"}"
}'
# Set filter policy — subscriber only gets "order.completed" events
aws sns set-subscription-attributes \
--subscription-arn arn:aws:sns:us-east-1:123456789:order-events:abc-123 \
--attribute-name FilterPolicy \
--attribute-value '{
"event_type": ["order.completed"],
"priority": ["high", "critical"]
}'
# Filter on message body (not just attributes)
aws sns set-subscription-attributes \
--subscription-arn arn:aws:sns:us-east-1:123456789:order-events:abc-123 \
--attribute-name FilterPolicyScope \
--attribute-value MessageBody
aws sns set-subscription-attributes \
--subscription-arn arn:aws:sns:us-east-1:123456789:order-events:abc-123 \
--attribute-name FilterPolicy \
--attribute-value '{"status": ["completed"], "amount": [{"numeric": [">=", 100]}]}'
# Fan-out setup: one SNS topic publishing to multiple SQS queues
import boto3
import json
sns = boto3.client('sns')
sqs = boto3.client('sqs')
# Create topic
topic = sns.create_topic(Name='order-events')
topic_arn = topic['TopicArn']
# Create queues for different consumers
queues = ['order-fulfillment', 'order-analytics', 'order-notifications']
for queue_name in queues:
queue = sqs.create_queue(QueueName=queue_name)
queue_url = queue['QueueUrl']
attrs = sqs.get_queue_attributes(QueueUrl=queue_url, AttributeNames=['QueueArn'])
queue_arn = attrs['Attributes']['QueueArn']
# Allow SNS to send to SQS
policy = {
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "sns.amazonaws.com"},
"Action": "sqs:SendMessage",
"Resource": queue_arn,
"Condition": {"ArnEquals": {"aws:SourceArn": topic_arn}}
}]
}
sqs.set_queue_attributes(QueueUrl=queue_url, Attributes={"Policy": json.dumps(policy)})
# Subscribe
sns.subscribe(TopicArn=topic_arn, Protocol='sqs', Endpoint=queue_arn)
# Create platform application for FCM (Android)
aws sns create-platform-application \
--name my-app-android \
--platform GCM \
--attributes PlatformCredential="YOUR_FCM_SERVER_KEY"
# Register a device token
aws sns create-platform-endpoint \
--platform-application-arn arn:aws:sns:us-east-1:123456789:app/GCM/my-app-android \
--token "device-token-from-fcm"
# Send push notification to a device
aws sns publish \
--target-arn arn:aws:sns:us-east-1:123456789:endpoint/GCM/my-app-android/abc123 \
--message '{"GCM":"{\"notification\":{\"title\":\"Order Shipped\",\"body\":\"Your order is on the way\"}}"}' \
--message-structure json
npx skills add TerminalSkills/aws-sns下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer