Как создать оповещение CloudWatch для SNS по метрике NumberOfNotificationsDelivered
Введение
CloudWatch собирает метрики для SNS Topics и помогает следить за доставкой сообщений. Метрика NumberOfNotificationsDelivered показывает количество уведомлений, успешно доставленных подписчикам темы. Оповещение (alarm) по этой метрике уведомит вас, когда условие доставки будет выполнено.
Краткие определения:
- CloudWatch — сервис мониторинга AWS для метрик и логов.
- SNS (Simple Notification Service) — сервис отправки уведомлений подписчикам.
- Метрика — числовой показатель (например, NumberOfNotificationsDelivered).
- Оповещение (alarm) — правило в CloudWatch, которое меняет состояние и может отправлять уведомления.
Important: перед началом убедитесь, что у вас есть SNS Topic в учётной записи и, если вы хотите получать уведомления, подписка на тему подтверждена.
Что нужно иметь готовым
- AWS аккаунт (создайте, если ещё нет).
- SNS Topic в том же регионе, где будете создавать оповещение.
- Подтверждённая подписка на тему, если хотите получать email/SMS/HTTP уведомления.
Что мы сделаем
- Зайдём в AWS Console и откроем CloudWatch.
- Выберем метрику NumberOfNotificationsDelivered для конкретной темы.
- Создадим оповещение с порогом и подключим SNS для уведомлений.
- Покажем, как редактировать и удалять оповещение.
Шаги в консоли AWS
- Перейдите на страницу входа в AWS и войдите под своей учётной записью.

- На главной странице консоли найдите CloudWatch через глобальную строку поиска.

- Откроется панель управления CloudWatch. В левой навигации выберите «Alarms».

- Если оповещений ещё нет, нажмите «Create alarm».

- Нажмите «Select metric» для выбора метрики.

- Найдите метрики по SNS: в поле поиска введите “SNS” и выберите «Topic metrics».


- Выберите метрику NumberOfNotificationsDelivered для нужной темы (в примере — тема “test”) и нажмите «Select metric».

- Укажите условие и порог. В примере выбран тип порога «Static», значение — 1, условие — Greater/Equal. Это значит: если доставлено ≥ 1 сообщений за выбранный интервал, оповещение сработает.

Note: подбирайте период агрегации и статистику (Sum/Maximum/Minimum/Average) в зависимости от цели. Например, для подсчёта всех доставок за период используйте Sum.
- На шаге Actions выберите SNS Topic, на который пойдут уведомления, когда оповещение переходит в состояние ALARM.

- Дайте оповещению имя и при желании описание, нажмите «Next».

- Проверьте конфигурацию и нажмите «Create alarm».

- После создания оповещение появится в списке. Первые минуты состояние может быть “Insufficient data”.

- Когда условие выполнится, оповещение перейдёт в состояние “In alarm” и отправит сообщение на указанный SNS.

- Подтверждённая подписка получит уведомление (в примере — email).

- Для изменения порога выберите оповещение и нажмите Actions -> Edit. В примере порог изменён с 1 на 10.


- При несоответствии условия оповещение перейдёт в состояние OK.

Как удалить оповещение
- Выберите оповещение в списке.
- Actions -> Delete.

Подтвердите удаление в поп-апе — операция необратима.

Important: удаление оповещения нельзя отменить. Убедитесь, что оповещение не используется в автоматизации.
Альтернативные подходы
Ниже приведены распространённые альтернативы созданию оповещений через консоль.
- AWS CLI
- Создать оповещение (пример с минимальными параметрами):
aws cloudwatch put-metric-alarm \
--alarm-name "sns-delivered-alarm" \
--metric-name NumberOfNotificationsDelivered \
--namespace AWS/SNS \
--statistic Sum \
--period 300 \
--evaluation-periods 1 \
--threshold 1 \
--comparison-operator GreaterThanOrEqualToThreshold \
--alarm-actions arn:aws:sns:REGION:ACCOUNT_ID:YourTopic- Удалить оповещение:
aws cloudwatch delete-alarms --alarm-names "sns-delivered-alarm"- CloudFormation
- Используйте ресурс AWS::CloudWatch::Alarm и укажите метрику AWS/SNS, MetricName, Namespace и AlarmActions. CloudFormation даёт управление инфраструктурой как код.
- Terraform
- Ресурс aws_cloudwatch_metric_alarm позволяет управлять alarm через Terraform. Подходит для GitOps и повторяемой инфраструктуры.
Выбор зависит от процесса в команде: консоль для быстрых проверок, CLI/CF/Terraform для автоматизации и CI/CD.
Методология и контроль качества (микро-метод)
- Определите цель оповещения: что вы хотите увидеть — факт доставки, отказов или рост задержки.
- Выберите правильную статистику (Sum для суммарных доставок, Maximum для пиков).
- Подберите период агрегации (1 минута, 5 минут и т.д.).
- Настройте уведомления так, чтобы они попадали к ответственному лицу/каналу.
- Тестируйте: публикуйте тестовые сообщения и проверяйте переходы состояний (Insufficient data → OK/ALARM).
Чек-листы по ролям
Оператор/DevOps:
- Есть подтверждённая подписка на SNS.
- Порог и период проверены на тестовых данных.
- Названия alarm читаемы и содержат регион/окружение.
Разработчик:
- Локальный тест публикации сообщений пройден.
- Логи доставки (если есть) сопоставлены с метрикой.
SRE/On-call:
- Уведомления приходят в канал, где дежурный их увидит.
- На каждое оповещение есть runbook с шагами диагностики.
Критерии приёмки
- Оповещение создано и видно в CloudWatch.
- При публикации тестового сообщения метрика NumberOfNotificationsDelivered увеличивается и оповещение переходит в ALARM (при подходящем пороге).
- Уведомление доставляется на указанный SNS Topic и подтверждённую подписку.
- Конфигурация задокументирована в репозитории инфраструктуры (если применимо).
Отладка и частые проблемы
- Состояние “Insufficient data”:
- Причина: недостаточно данных для вычисления статистики. Убедитесь, что интервал и период заданы правильно.
- Нет уведомлений на email:
- Проверьте, подтверждена ли подписка на SNS.
- Проверьте, что alarm-actions указывают на правильный ARN темы.
- Метрика не растёт:
- Убедитесь, что сообщения действительно публикуются в тему.
- Проверьте логи отправителей и подписчиков.
- Частые ложные срабатывания:
- Увеличьте порог или используйте большее число evaluation-periods.
Counterexample — когда оповещение не даёт полезной информации:
- Если цель — контролировать именно ошибки доставки, лучше мониторить NumberOfNotificationsFailed, а не NumberOfNotificationsDelivered.
Edge cases:
- Если у темы несколько подписчиков с разными типами (HTTP, Lambda, email), метрика суммирует успешные доставки ко всем подписчикам.
Безопасность и приватность
- Убедитесь, что ARNs и SNS Topics в уведомлениях не раскрывают чувствительные данные.
- Если уведомления содержат данные сообщений, проверьте соответствие политике конфиденциальности и требованиям GDPR в вашем регионе.
Лучшие практики
- Дайте alarm осмысленное имя:
-sns- - . - Используйте аннотацию владельца и контактную информацию в описании alarm.
- Автоматизируйте создание через инфраструктуру как код.
- Тестируйте оповещения в тестовом окружении до продакшена.
Тестовые случаи и приёмка
- Создать оповещение с порогом 1, отправить одно тестовое сообщение — ожидание: состояние ALARM и получение уведомления.
- Увеличить порог до 10 — ожидание: состояние OK при менее 10 доставленных уведомлений.
- Удалить оповещение — ожидание: запись исчезает из списка и больше не отправляет уведомления.
Заключение
Мы показали пошагово, как создать оповещение CloudWatch для метрики NumberOfNotificationsDelivered у существующей SNS Topic через консоль. Также рассмотрены альтернативные варианты через CLI, CloudFormation и Terraform, добавлены чек-листы для ролей, методология тестирования, отладочные советы и критерии приёмки. Следуйте лучшим практикам и автоматизируйте конфигурации, чтобы оповещения были надёжными и управляемыми.
Summary: создавайте осмысленные имена, правильно подбирайте статистику и период агрегации, тестируйте оповещения и документируйте их в репозиториях инфраструктуры.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone