Создание SNS-топика через CloudFormation и email-подписку
Кратко: В этой инструкции показано, как создать AWS SNS-топик и подписку на email с помощью шаблона CloudFormation, подтвердить подписку и удалить все ресурсы через стек. Подходит для быстрого опробования уведомлений и для базовой автоматизации инфраструктуры.
Цели статьи и преимущества
- Автоматически создать SNS-топик и подписку через CloudFormation.
- Избежать ручного клика в консоли для воспроизводимой инфраструктуры.
- Понимать, как подтверждаются email-подписки и как корректно удалить стек.
Важно: шаблон создаёт подписку с подтверждением по email — пользователь должен перейти по ссылке в письме, чтобы подписка стала активной.
Предварительные требования
- Учетная запись AWS (создайте, если её нет).
- Базовые знания о сервисе SNS (Simple Notification Service).
- Базовые знания CloudFormation и прав доступа для создания стека.
Что мы сделаем
- Войдём в AWS Console.
- Подготовим шаблон CloudFormation.
- Запустим стек и укажем точку подписки (email).
- Подтвердим подписку по электронной почте.
- Удалим стек — ресурсы удалятся автоматически.
Шаг 1 — Вход в AWS
Найдите страницу входа в AWS и войдите под своей учётной записью или ролями с достаточными правами для работы с CloudFormation и SNS.


После входа вы увидите AWS Management Console.

Шаг 2 — Создание шаблона CloudFormation
Создайте файл шаблона на локальной машине, например create-sns-topic.template, со следующим содержимым. Шаблон создаёт SNS Topic и подписку, endpoint и протокол принимаются как параметры.
---
AWSTemplateFormatVersion: '2010-09-09'
Description: The SNS Topic
Parameters:
SubscriptionEndPoint:
Type: String
Description: The endpoint that receives notifications.
SubscriptionProtocol:
Type: String
Description: The subscription protocol
AllowedValues:
- http
- https
- email
- email-json
- sms
- sqs
- application
- lambda
Default: email
Mappings: {}
Conditions: {}
Resources:
SNSTopic:
Type: AWS::SNS::Topic
Properties: {}
SNSSubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint:
Ref: SubscriptionEndPoint
Protocol:
Ref: SubscriptionProtocol
TopicArn:
Ref: SNSTopic
Outputs:
QueueName:
Description: Name of the SNS Topic we created
Value:
Fn::GetAtt:
- SNSTopic
- TopicName
TopicARN:
Description: ARN of the SNS Topic we created
Value:
Ref: SNSTopic
Пояснения к шаблону (коротко):
- Parameters.SubscriptionEndPoint — адрес подписки (например email@example.com).
- Parameters.SubscriptionProtocol — протокол подписки (email, http, sqs и т. д.).
- Resource SNSTopic — создаёт сам топик.
- Resource SNSSubscription — создаёт подписку и связывает её с топиком.
Советы по улучшению шаблона:
- Для контроля имени топика добавьте свойство TopicName: MyTopicName.
- Для защиты сообщений включите шифрование (KMS) через свойство KmsMasterKeyId.
- Если хотите, чтобы ресурс не удалялся при удалении стека, добавьте DeletionPolicy: Retain. Это полезно для продовых топиков.
Дополнительный вариант: если вы используете Terraform или AWS CLI, создание можно автоматизировать альтернативно (см. раздел “Альтернативные подходы”).
Вы можете скачать исходный шаблон по ссылке: https://github.com/shivalkarrahul/DevOps/blob/master/aws/cloudformation/create-sns-topic/create-sns-topic.template
Шаг 3 — Создание стека через консоль
- В консоли AWS выберите «Services» → введите CloudFormation.
- Нажмите “Create stack” → “With new resources (standard)”.

- Загрузите файл шаблона (Upload a template file) и нажмите Next.

- Укажите имя стека (например create-sns-topic-stack), Endpoint и Protocol. Для email укажите реальный адрес, на который придёт письмо-подтверждение.

- Теги необязательны — можно пропустить.

- Нажмите “Create stack”. Создание занимает минуты. Когда статус станет CREATE_COMPLETE — стек создан.


Шаг 4 — Проверка SNS-топика и подтверждение подписки
- Перейдите в сервис SNS (Search for SNS).
- Откройте раздел Topics → выберите топик, имя которого начинается с имени стека.
Вкладка Subscriptions покажет подписку в состоянии “Pending confirmation” до тех пор, пока адресат не перейдёт по ссылке в письме.

Откройте указанный почтовый ящик и нажмите “Confirm subscription” в пришедшем письме.

После подтверждения увидите сообщение об успешной подписке.

Вернитесь в консоль SNS: статус подписки сменится на “Confirmed” и вы сможете публиковать сообщения на топик — они будут пересылаться на указанный endpoint.

Частые проблемы и их решения
Проблема: письмо с подтверждением не приходит.
Решение: проверьте папку спама, корректность email-адреса, локальные почтовые политики (фильтрация). Если всё верно, попробуйте повторно создать подписку или используйте другой адрес.Проблема: при удалении стека подписка остаётся.
Решение: проверьте, не установлен ли DeletionPolicy: Retain для ресурсов. В ручных операциях также можно удалить подписку вручную в консоли SNS.Проблема: push (http/https) подписки не доставляются.
Решение: проверьте доступность endpoint (публичный URL), корректность сертификатов, и статус ответа HTTP (должен вернуть 200/2xx при подтверждении).
Шаг 5 — Удаление стека и ресурсов
Если ресурсы больше не нужны, удалите стек: перейдите в CloudFormation → выберите стек → Delete.

Подтвердите действие. После удаления статуса будет DELETE_COMPLETE — все ресурсы, созданные стеком (включая топик и подписку), будут удалены.


Важно: удаление необратимо. Если вы удаляете ресурсы в аккаунте организации или клиента, согласуйте операцию.
Альтернативные подходы
- AWS CLI: создать топик aws sns create-topic –name MyTopic и подписать aws sns subscribe –topic-arn
–protocol email –notification-endpoint email@domain. - Terraform: использовать ресурс aws_sns_topic и aws_sns_topic_subscription.
- SDK (Python/Boto3, Node.js): программно создавать топики и подписки, удобно для интеграции в пайплайны.
Модель мышления и рекомендации (mental models)
- SNS = публикация/подписка (pub/sub). Топик — это канал, подписка — получатель сообщений.
- Подход: используйте CloudFormation для воспроизводимости и контроля версий инфраструктуры.
- Безопасность: для продакшна добавьте KMS-шифрование и политики (Access Control) на TopicPolicy.
Уровни зрелости использования SNS
- Уровень 1 (Proof of Concept): email-подписки для оповещений.
- Уровень 2 (Production): SQS интеграция для надёжной доставки, мониторинг, dead-letter queue.
- Уровень 3 (Enterprise): KMS, строгие политики доступа, multi-account подписки через cross-account permissions.
Контрольный список по ролям
- Администратор: проверить IAM-права для CloudFormation и SNS; обеспечить KMS-ключи при необходимости.
- DevOps: хранить шаблон в репозитории, привязать запуск стека к CI/CD.
- Разработчик: подтвердить получение сообщений, реализовать обработчик для http/sqs endpoints.
Мини-SOP: быстрый план действий
- Подготовить шаблон create-sns-topic.template.
- Загрузить шаблон в CloudFormation.
- Указать SubscriptionEndPoint и SubscriptionProtocol.
- Дождаться CREATE_COMPLETE.
- Подтвердить подписку в почтой.
- Проверить доставку тестового сообщения (Publish).
- При необходимости удалить стек.
Критерии приёмки:
- Состояние стека — CREATE_COMPLETE.
- Подписка отображается в SNS как Confirmed.
- Тестовое сообщение успешно доставлено на endpoint.
Небольшая галерея исключительных случаев
- Если endpoint — SQS, убедитесь, что у очереди есть политика доступа для SNS Topic ARN.
- Если endpoint — Lambda, функция должна быть настроена на вызов из SNS.
Короткий глоссарий
- SNS: Simple Notification Service — сервис публикации/подписки.
- TopicARN: уникальный идентификатор ресурса топика (ARN).
- CloudFormation: сервис для описания инфраструктуры как кода.
Заключение
Создать SNS-топик и подписку через CloudFormation просто и удобно для воспроизводимой инфраструктуры. Используйте шаблон как основу, расширяйте его дополнительными свойствами (шифрование, имена, политики) для продакшн-готовности, и не забывайте подтверждать email-подписки через ссылку в письме.
Примечание: для интеграции в CI/CD храните шаблоны в системе контроля версий и используйте параметры или overrides для разных окружений.
Сводка:
- Автоматизация через CloudFormation ускоряет создание уведомлений.
- Подтверждение подписки обязательно для email.
- Удаление стека удаляет все созданные ресурсы, если не задано иное.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента