Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/terminalskills-aws-sns/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 62% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 119% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 128% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 236% | 0% |
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.
bash# Create a standard topic aws sns create-topic --name order-events
bash# Create a FIFO topic aws sns create-topic \ --name order-events.fifo \ --attributes FifoTopic=true,ContentBasedDeduplication=true
bash# List topics aws sns list-topics --query 'Topics[].TopicArn' --output table
bash# 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
bash# 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
bash# 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
bash# 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
bash# List subscriptions for a topic aws sns list-subscriptions-by-topic \ --topic-arn arn:aws:sns:us-east-1:123456789:order-events
bash# 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"} }'
bash# 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"
bash# 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\"}" }'
bash# 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"] }'
bash# 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]}]}'
python# 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)
bash# Create platform application for FCM (Android) aws sns create-platform-application \ --name my-app-android \ --platform GCM \ --attributes PlatformCredential="YOUR_FCM_SERVER_KEY"
bash# 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"
bash# 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
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 7,884 | 5,455 | -31% | 1 | 1 | 0% | 1,636 | 3,010 | +84% | 0 | 0 | — |
case-02 | pass→pass | 9,894 | 3,170 | -68% | 1 | 1 | 0% | 1,537 | 2,484 | +62% | 0 | 0 | — |
case-03 | pass→pass | 7,140 | 6,137 | -14% | 1 | 1 | 0% | 1,304 | 2,851 | +119% | 0 | 0 | — |
case-04 | pass→pass | 5,582 | 5,187 | -7% | 1 | 1 | 0% | 1,195 | 2,729 | +128% | 0 | 0 | — |
case-05 | pass→pass | 4,084 | 2,704 | -34% | 1 | 1 | 0% | 717 | 2,410 | +236% | 0 | 0 | — |
case-06 | pass→pass | 3,116 | 6,063 | +95% | 1 | 1 | 0% | 590 | 2,670 | +353% | 0 | 0 | — |
case-07 | pass→pass | 4,005 | 3,769 | -6% | 1 | 1 | 0% | 911 | 2,806 | +208% | 0 | 0 | — |
case-08 | pass→pass | 7,576 | 5,305 | -30% | 1 | 1 | 0% | 1,557 | 2,988 | +92% | 0 | 0 | — |
case-09 | pass→pass | 4,298 | 3,095 | -28% | 1 | 1 | 0% | 839 | 2,513 | +200% | 0 | 0 | — |
case-10 | pass→pass | 5,343 | 3,900 | -27% | 1 | 1 | 0% | 1,086 | 2,704 | +149% | 0 | 0 | — |
case-11 | pass→pass | 4,356 | 4,996 | +15% | 1 | 1 | 0% | 728 | 2,914 | +300% | 0 | 0 | — |
case-12 | pass→pass | 7,410 | 5,363 | -28% | 1 | 1 | 0% | 1,652 | 3,095 | +87% | 0 | 0 | — |
case-13 | pass→pass | 6,564 | 4,610 | -30% | 1 | 1 | 0% | 1,409 | 2,837 | +101% | 0 | 0 | — |
case-14 | pass→pass | 6,391 | 3,279 | -49% | 1 | 1 | 0% | 1,429 | 2,570 | +80% | 0 | 0 | — |
case-15 | pass→pass | 6,318 | 3,810 | -40% | 1 | 1 | 0% | 1,249 | 2,684 | +115% | 0 | 0 | — |
case-16 | pass→pass | 19,975 | 9,946 | -50% | 1 | 1 | 0% | 2,127 | 3,780 | +78% | 0 | 0 | — |
case-17 | pass→pass | 14,151 | 24,025 | +70% | 1 | 1 | 0% | 2,290 | 4,186 | +83% | 0 | 0 | — |
case-18 | pass→pass | 11,958 | 12,091 | +1% | 1 | 1 | 0% | 2,036 | 4,095 | +101% | 0 | 0 | — |
case-19 | pass→pass | 5,729 | 7,826 | +37% | 1 | 1 | 0% | 1,057 | 3,343 | +216% | 0 | 0 | — |
case-20 | pass→pass | 8,215 | 6,434 | -22% | 1 | 1 | 0% | 1,587 | 3,191 | +101% | 0 | 0 | — |
case-21 | pass→pass | 11,417 | 8,451 | -26% | 1 | 1 | 0% | 1,962 | 3,485 | +78% | 0 | 0 | — |
case-22 | pass→pass | 9,667 | 7,661 | -21% | 1 | 1 | 0% | 1,857 | 3,318 | +79% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.