Skip to main content
idle · aws

SNS topics with no messages published in 30 days, and why no saving is claimed

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

ZopNight watches the `NumberOfMessagesPublished` metric for each SNS topic over 30 days, but it does not raise a finding. Amazon SNS charges per request, with the first 1 million requests each month free, so a topic that publishes nothing costs nothing and deleting it recovers no money.

Signal and threshold

How ZopNight evaluates SNS topics with no messages published in 30 days, and why no saving is claimed.
Field Value
Rule IDsRC-182
Categoryidle
Severitylow
MetricNumberOfMessagesPublished
Evaluation window30d
SourceZopNight
Permissions usedsns:ListTopics · sns:ListSubscriptionsByTopic · cloudwatch:GetMetricStatistics

A silent topic is clutter, not cost

Amazon SNS pricing is built on API requests: publishes, batch publishes and topic and subscription operations, with the first 1 million requests per month free. Deliveries are charged by endpoint type on top. There is no line for simply having a topic.

So an SNS topic that nobody publishes to generates no bill. It still has a cost of a different kind: stale subscriptions that point at retired queues, functions or email lists, and a longer inventory for whoever audits the account next.

Spotting topics with no publishes

SNS reports NumberOfMessagesPublished to CloudWatch under AWS/SNS, with TopicName as a valid dimension and Sum as the valid statistic, per the SNS CloudWatch metrics page:

Terminal window
aws cloudwatch get-metric-statistics \
--namespace AWS/SNS --metric-name NumberOfMessagesPublished \
--dimensions Name=TopicName,Value=my-topic \
--start-time 2026-08-26T00:00:00Z --end-time 2026-09-25T00:00:00Z \
--period 86400 --statistics Sum
aws sns list-subscriptions-by-topic \
--topic-arn arn:aws:sns:us-east-1:111122223333:my-topic

No datapoints over 30 days, combined with subscriptions whose endpoints no longer exist, is a strong sign the topic is abandoned.

Why the idle test can never meet the cost test

An idle recommendation in ZopNight needs two things at once: proof of no activity and a positive monthly cost to recover. For SNS those cannot both be true. A topic with zero publishes makes zero billable requests, so its cost is zero; a topic with any cost has made requests, so it is not idle. Rather than print a $0 saving next to a delete button, the check stays quiet.

What you will and will not see

You will not see an SNS topic recommendation from this check, whatever the metric shows. ZopNight still collects the publish metric for each topic; it simply never turns it into a finding. Topics that do carry cost, because they publish heavily, are working topics and are not idle.

No dollar figure by design

There is no savings calculation. Deleting an unused topic is housekeeping: it removes dead subscriptions and any alarms or policies that reference the topic, but the bill does not change.

Retiring an abandoned topic by hand

  1. Search application config, infrastructure code and CloudWatch alarm actions for the topic ARN.
  2. Review its subscriptions and confirm each endpoint is retired or served elsewhere.
  3. Delete the topic with aws sns delete-topic --topic-arn followed by the ARN.
  4. Remove CloudWatch alarms whose only action was to notify this topic.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·