Гид по технологиям

Создание SNS-топика через CloudFormation и email-подписку

• 5 min read • AWS • Обновлено 20 Nov 2025
Создать SNS-топик через CloudFormation и email-подписку
Создать SNS-топик через CloudFormation и email-подписку

Кратко: В этой инструкции показано, как создать AWS SNS-топик и подписку на email с помощью шаблона CloudFormation, подтвердить подписку и удалить все ресурсы через стек. Подходит для быстрого опробования уведомлений и для базовой автоматизации инфраструктуры.

Цели статьи и преимущества

  • Автоматически создать SNS-топик и подписку через CloudFormation.
  • Избежать ручного клика в консоли для воспроизводимой инфраструктуры.
  • Понимать, как подтверждаются email-подписки и как корректно удалить стек.

Важно: шаблон создаёт подписку с подтверждением по email — пользователь должен перейти по ссылке в письме, чтобы подписка стала активной.

Предварительные требования

  1. Учетная запись AWS (создайте, если её нет).
  2. Базовые знания о сервисе SNS (Simple Notification Service).
  3. Базовые знания CloudFormation и прав доступа для создания стека.

Что мы сделаем

  1. Войдём в AWS Console.
  2. Подготовим шаблон CloudFormation.
  3. Запустим стек и укажем точку подписки (email).
  4. Подтвердим подписку по электронной почте.
  5. Удалим стек — ресурсы удалятся автоматически.

Шаг 1 — Вход в AWS

Найдите страницу входа в AWS и войдите под своей учётной записью или ролями с достаточными правами для работы с CloudFormation и SNS.

Обложка: иллюстрация сервиса AWS SNS

Страница входа AWS

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

Панель управления AWS

Шаг 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 — Создание стека через консоль

  1. В консоли AWS выберите «Services» → введите CloudFormation.
  2. Нажмите “Create stack” → “With new resources (standard)”.

Поиск CloudFormation в консоли

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

Загрузка шаблона CloudFormation

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

Укажите email в качестве endpoint

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

Страница тегов CloudFormation

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

Создать стек CloudFormation

Стек успешно создан: CREATE_COMPLETE

Шаг 4 — Проверка SNS-топика и подтверждение подписки

  1. Перейдите в сервис SNS (Search for SNS).
  2. Откройте раздел Topics → выберите топик, имя которого начинается с имени стека.

Вкладка Subscriptions покажет подписку в состоянии “Pending confirmation” до тех пор, пока адресат не перейдёт по ссылке в письме.

Статус подписки: Pending confirmation

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

Письмо: подтвердить подписку

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

Подписка подтверждена через браузер

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

Проверка статуса подписки: Confirmed

Частые проблемы и их решения

  • Проблема: письмо с подтверждением не приходит.
    Решение: проверьте папку спама, корректность email-адреса, локальные почтовые политики (фильтрация). Если всё верно, попробуйте повторно создать подписку или используйте другой адрес.

  • Проблема: при удалении стека подписка остаётся.
    Решение: проверьте, не установлен ли DeletionPolicy: Retain для ресурсов. В ручных операциях также можно удалить подписку вручную в консоли SNS.

  • Проблема: push (http/https) подписки не доставляются.
    Решение: проверьте доступность endpoint (публичный URL), корректность сертификатов, и статус ответа HTTP (должен вернуть 200/2xx при подтверждении).

Шаг 5 — Удаление стека и ресурсов

Если ресурсы больше не нужны, удалите стек: перейдите в CloudFormation → выберите стек → Delete.

Удаление стека CloudFormation

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

Подтвердите удаление стека

Удаление стека завершено: 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: быстрый план действий

  1. Подготовить шаблон create-sns-topic.template.
  2. Загрузить шаблон в CloudFormation.
  3. Указать SubscriptionEndPoint и SubscriptionProtocol.
  4. Дождаться CREATE_COMPLETE.
  5. Подтвердить подписку в почтой.
  6. Проверить доставку тестового сообщения (Publish).
  7. При необходимости удалить стек.

Критерии приёмки:

  • Состояние стека — 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.
  • Удаление стека удаляет все созданные ресурсы, если не задано иное.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро