SNS topics with no messages published in 30 days, and why no saving is claimed
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
| Field | Value |
|---|---|
| Rule IDs | RC-182 |
| Category | idle |
| Severity | low |
| Metric | NumberOfMessagesPublished |
| Evaluation window | 30d |
| Source | ZopNight |
| Permissions used | sns:ListTopics · sns:ListSubscriptionsByTopic · cloudwatch:GetMetricStatistics |
Where it applies
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:
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-topicNo 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
- Search application config, infrastructure code and CloudWatch alarm actions for the topic ARN.
- Review its subscriptions and confirm each endpoint is retired or served elsewhere.
- Delete the topic with
aws sns delete-topic --topic-arnfollowed by the ARN. - Remove CloudWatch alarms whose only action was to notify this topic.