AWS SNS: Полное руководство по уведомлениям в реальном времени

Управление уведомлениями в реальном времени по всем вашим приложениям может быть огромным вызовом – по крайней мере, без правильной службы обмена сообщениями.

Сервис простых уведомлений Amazon (SNS) предоставляет полностью управляемое решение для развязки и масштабирования микросервисов, распределенных систем и безсерверных приложений. SNS позволяет отправлять сообщения большому количеству подписчиков через несколько протоколов передачи, таких как HTTP/S, электронная почта, SMS и мобильные уведомления push. AWS SNS берет на себя всю тяжелую работу по доставке сообщений, включая надежную доставку, повторы и функциональность резервирования, что дает вам свободу сосредоточиться на создании ключевых функций вашего приложения.

Amazon SNS использует модель издатель-подписчик, которая легка в масштабировании и понимании. Одно опубликованное сообщение может быть распределено одновременно на несколько конечных точек, что делает SNS идеальным для архитектур событийного типа.

В этом руководстве я покажу вам, как настроить и использовать Amazon SNS для отправки уведомлений по различным каналам.

Что такое Amazon SNS?

Amazon Simple Notification Service (SNS) – это управляемый сервис массовой рассылки и подписки от AWS, который позволяет отделять микросервисы, распределенные системы и серверные приложения.

SNS работает на простой модели издатель-подписчик, где издатели отправляют сообщения на темы, а подписчики их получают. Представьте себе тему SNS как канал связи – вы публикуете сообщения в этот канал, и все подписанные пользователи моментально получают уведомление. Преимущество этой системы заключается в том, что издателям не нужно знать, кто получает их сообщения, а подписчикам не нужно знать, кто их отправляет.

Возможно, вы задаетесь вопросом, в чем разница между этим и другими службами обмена сообщениями AWS, такими как Simple Queue Service (SQS). Просто говоря, SQS использует модель на основе очередей, в первую очередь предназначенную для обработки задач асинхронно, в то время как SNS сосредотачивается на широковещательной передаче сообщений нескольким получателям одновременно. Это делает SNS идеальным для сценариев, где вам нужно уведомить множество систем о событии, которое только что произошло. Больше информации о различиях можно найти в статье блога о SQS против SNS.

SNS поддерживает несколько протоколов доставки, что дает вам гибкость в том, как ваши подписчики получают уведомления.

Основные функции AWS SNS

SNS поставляется с функциями, которые делают его единственным сервисом уведомлений, который вам понадобится. Я перечислю пару:

  • Архитектура fan-out: SNS может доставлять сообщения тысячам конечных точек одновременно, что в свою очередь позволяет вам транслировать обновления по всей экосистеме вашего приложения с одним вызовом API.
  • Несколько транспортных протоколов: Вы не ограничены только одним способом отправки сообщений. SNS поддерживает конечные точки HTTP/HTTPS, электронную почту, SMS, мобильные уведомления push и даже очереди SQS в качестве конечных точек подписки.
  • Фильтрация сообщений: Не каждому подписчику нужно каждое сообщение. С помощью фильтрации сообщений ваши подписчики могут создавать политики фильтрации, чтобы получать только те сообщения, которые их интересуют, что снижает уровень шума и нагрузку на обработку.
  • Архивирование сообщений: Если вам нужно вести запись обо всех отправленных уведомлениях, вам будет приятно узнать, что SNS интегрируется с Amazon S3 для архивирования сообщений и с Amazon Redshift для аналитики.
  • Отслеживание статуса доставки: Вы можете отслеживать статус доставки ваших уведомлений, чтобы убедиться, что они достигли своего назначения. Это особенно полезно для SMS и мобильных уведомлений, где доставка не гарантирована.
  • Шифрование: Ваши конфиденциальные данные остаются защищенными благодаря поддержке SNS серверным шифрованием, которое обеспечивает конфиденциальность сообщений во время передачи.

Но лучшая часть SNS – масштабируемость. SNS автоматически масштабируется в соответствии с потребностями вашего приложения. Неважно, отправляете ли вы десять или десять миллионов уведомлений в день, сервис автоматически настраивается соответственно без необходимости какого-либо ручного вмешательства.

Далее я покажу вам, как настроить SNS.

Настройка AWS SNS

Прежде чем вы сможете отправить свое первое уведомление с помощью SNS, вам нужно выполнить несколько шагов настройки, чтобы все было на своем месте.

Шаг 1: Создание учетной записи AWS

Если у вас еще нет учетной записи AWS, вам нужно создать ее, прежде чем начать использовать SNS.

Перейдите на домашнюю страницу AWS и нажмите кнопку “Создать учетную запись AWS” в правом верхнем углу. Вам потребуется указать свой адрес электронной почты, создать пароль и ввести некоторую основную информацию об учетной записи. AWS также запросит данные вашей кредитной карты – не волнуйтесь, SNS имеет довольно щедрые лимиты бесплатного использования, и вас не будут взиматься платежи, пока вы не превысите эти лимиты.

После того как ваш аккаунт настроен, вы готовы продолжать. Однако я настоятельно рекомендую создать отдельного IAM пользователя вместо использования вашего корневого аккаунта. Это выходит за рамки сегодняшней статьи, но обратитесь к официальной инструкции для подробных указаний.

Шаг 2: Настройка SNS в консоли управления AWS

Теперь, когда у вас есть учетная запись AWS, пришло время получить доступ к сервису SNS.

Войдите в консоль управления AWS с вашими учетными данными и найдите SNS. Вы можете сделать это тремя способами:

  • Введите “SNS” в строке поиска в верхней части консоли
  • Нажмите на “Сервисы” в верхней панели навигации и найдите SNS в категории “Интеграция приложений”
  • Перейдите непосредственно в консоль SNS

Независимо от способа, вы должны увидеть такой экран:

Изображение 1 – страница службы AWS SNS

Как только вы окажетесь в панели управления SNS, вы увидите меню слева с такими опциями, как “Темы”, “Подписки” и “Мобильные устройства”. Панель управления дает вам обзор ваших ресурсов SNS и недавней активности.

Для новой учетной записи здесь будет довольно пусто — это ожидаемо. Теперь давайте создадим нашу первую тему SNS.

Шаг 3: Создание темы SNS

Тема SNS в основном представляет собой коммуникационный канал, на который издатели отправляют сообщения, а подписчики слушают.

Представьте себе это как радиостанцию – станция вещает на определенной частоте (теме), и все, кто настроен на эту частоту, получают вещание. В терминах SNS ваше приложение публикует сообщения в тему, и все конечные точки, подписанные на эту тему, получают эти сообщения.

Вот как создать свою первую тему SNS:

  1. На экране, который вы видели на Изображении 1, введите название темы.
  2. Нажмите кнопку “Следующий шаг”.
  3. Выберите “Стандартный” тип (у FIFO тем есть другие варианты использования, о которых мы поговорим позже).
  4. (По желанию) Введите отображаемое имя. Оно будет включено в сообщения, отправляемые абонентам SMS или по электронной почте.
  5. Оставьте все остальные настройки по умолчанию на данный момент.
  6. Нажмите “Создать тему”.

Если вы предпочитаете изображения тексту, ваш экран должен выглядеть следующим образом:

Изображение 2 – Создание темы SNS

Как только вы удовлетворены значениями, прокрутите вниз, пока не увидите кнопку “Создать тему”:

Изображение 3 – Создание темы SNS (2)

И вот! Ваша тема SNS теперь готова к использованию. Вы увидите детали, такие как ARN темы (Amazon Resource Name), который уникально идентифицирует вашу тему:

Изображение 4 – Детали созданной темы

Ваша новая тема готова для подписки, но у нее их пока нет, что означает, что любые сообщения, которые вы опубликуете, никуда не пойдут. Не волнуйтесь, вы исправите это в следующем разделе, когда добавите подписчиков.

Подписчики и подписки SNS

Как я уже сказал, ваша тема SNS похожа на радиостанцию. На данный момент у нее нет слушателей, но это изменится, когда вы добавите подписчиков, чтобы получать ваши сообщения.

Что такое подписчик SNS?

Подписчик – это любой конечный пункт, который получает уведомления от вашей темы SNS, когда сообщение опубликовано.

Рассмотрите аналогию с рассылкой новостных писем. Каждый раз, когда вы публикуете новое издание (сообщение), оно доставляется всем находящимся в вашем списке рассылки. SNS делает этот процесс автоматическим и масштабируемым, и обрабатывает всю логистику доставки за вас.

AWS поддерживает широкий спектр типов подписчиков, что дает вам гибкость в обработке ваших сообщений. Ниже я перечислю основные типы:

  • Email-адреса: Отправляйте уведомления в виде обычного текста напрямую на почтовые ящики.
  • Номера телефонов для SMS: Доставляйте уведомления в виде текстовых сообщений на мобильные телефоны.
  • Очереди SQS: Маршрутизация сообщений к другим службам AWS для дальнейшей обработки.
  • Функции Lambda: Запуск исполнения без сервера в ответ на уведомления.
  • HTTP/HTTPS конечные точки: Отправка сообщений в веб-приложения или API.
  • Мобильные уведомления: Передача уведомлений непосредственно в мобильные приложения.

У каждого типа подписчиков есть свои преимущества и области применения. Например, электронная почта и SMS отлично подходят для человеческих получателей, в то время как очереди SQS и функции Lambda лучше всего подходят для системного взаимодействия.

Шаг 1: Добавление подписчика

Теперь, когда вы понимаете, что такое подписчики, давайте добавим одного в вашу тему. В этом руководстве я буду использовать электронную почту, так как это самое простое для настройки.

Вот как добавить электронного подписчика в вашу тему SNS:

  1. На странице деталей вашей темы (как показано на Изображение 4), нажмите кнопку “Создать подписку”.
  2. В раскрывающемся списке “Протокол” выберите “Электронная почта”.
  3. В поле “Конечная точка” введите адрес электронной почты, на который должны поступать уведомления.
  4. Оставьте все остальные параметры со значениями по умолчанию.
  5. Нажмите “Создать подписку”.

Ваш экран должен выглядеть примерно так:

Изображение 5 – Создание подписки по электронной почте

После нажатия кнопки “Создать подписку” AWS добавит подписку к вашей теме, но она будет находиться в состоянии “ожидание подтверждения”:

Изображение 6 – Состояние ожидания подтверждения

Это важная функция безопасности, так как AWS хочет убедиться, что владелец адреса электронной почты действительно хочет получать эти уведомления.

Шаг 2: Подтверждение подписок

После добавления подписчика, им необходимо подтвердить, что они хотят получать уведомления от вашей SNS-темы.

Для подписки на электронную почту AWS автоматически отправляет подтверждение на указанный вами адрес. Письмо содержит ссылку, на которую должен нажать получатель, чтобы активировать подписку. Пока это не произойдет, сообщения, опубликованные в теме, не будут доставлены на этот конечный пункт.

Вот как выглядит типичное письмо с подтверждением:

Изображение 7 – Письмо с подтверждением SNS

Получатель просто должен нажать ссылку “Подтвердить подписку” в письме. Он будет перенаправлен на страницу, которая подтверждает активацию его подписки:

Изображение 8 – Сообщение о подтверждении подписки

Процесс аналогичен для абонентов SMS – AWS отправляет текстовое сообщение с ссылкой подтверждения, которую должен перейти получатель. Конечные точки HTTP/HTTPS должны ответить на запрос подтверждения от AWS, в то время как ресурсы AWS, такие как функции Lambda и очереди SQS, могут быть настроены на автоматическое подтверждение.

Вы можете проверить статус ваших подписок, нажав на раздел “Подписки” в левой боковой панели консоли SNS. Подтвержденные подписки будут иметь статус “Подтверждено”, в то время как те, которые ожидают подтверждения, будут отображаться как “Ожидает подтверждения”.

Изображение 9 – Статус подписки

Как только ваша подписка будет подтверждена, вы готовы начать отправку сообщений! Любое сообщение, опубликованное в теме, будет доставлено всем подтвержденным абонентам с использованием указанного ими протокола.

Вот и всё, что нужно для настройки подписок SNS. В следующем разделе вы узнаете, как опубликовать сообщения в свою тему и проверить, что ваши подписчики их правильно получают.

Публикация сообщений в темах SNS

Теперь, когда вы настроили свою тему SNS и добавили подписчиков, пришло время отправить ваше первое уведомление.

Шаг 1: Публикация сообщения

Хороший способ начать – опубликовать сообщение через консоль AWS.

Чтобы отправить свое первое сообщение, перейдите на страницу деталей вашей темы и нажмите кнопку “Опубликовать сообщение” в правом верхнем углу (см. Изображение 4). Это откроет форму публикации сообщения, где вы сможете создать уведомление. Вы увидите поля для темы сообщения и его содержания. Тема необязательна, но полезна для электронных уведомлений, поскольку она становится строкой темы электронного письма.

Для простого тестового сообщения вы можете ввести что-то вроде этого:

Изображение 10 – Содержание первого сообщения

Когда вы будете удовлетворены своим сообщением, прокрутите вниз и нажмите кнопку “Опубликовать сообщение” внизу формы:

Изображение 11 – Публикация сообщения через консоль

После нажатия SNS сразу же распространяет ваше сообщение на всех подтвержденных подписчиков. Если вы настроили подписку по электронной почте, вы должны получить тестовое сообщение в своем почтовом ящике в течение нескольких секунд:

Изображение 12 – Получение сообщения по электронной почте

Просто, не так ли? Давайте теперь посмотрим, как далее настроить его.

Шаг 2: Отправка уведомлений по SMS и электронной почте

SNS позволяет настраивать, как будут выглядеть ваши сообщения для разных типов подписчиков.

При публикации сообщения вы заметите опцию “Структура сообщения”. По умолчанию она установлена на “Идентичная полезная нагрузка для всех протоколов доставки”, что означает, что все абоненты получают точно такое же сообщение. Однако вы также можете выбрать “Индивидуальная полезная нагрузка для каждого протокола доставки”, что позволяет настраивать формат сообщения для каждого типа абонента.

Для уведомлений по электронной почте у вас есть два варианта формата:

  • Электронная почта-JSON:Отправляет необработанную полезную нагрузку JSON на конечную точку электронной почты.
  • Электронная почта:Отправляет отформатированное письмо с темой и текстом сообщения.

Изображение 13 – Настройка нагрузки

При отправке SMS-уведомлений помните, что есть ограничение в 160 символов. SNS будет доставлять более длинные сообщения, но они будут рассматриваться как несколько сообщений. Вы также можете установить тип SMS-сообщения на “Рекламный” или “Транзакционный”, что влияет на оптимизацию доставки:

Изображение 14 – Опции SMS

Теперь вы знаете, как отправлять и настраивать электронные уведомления через AWS Console. Далее вы узнаете, как сделать то же самое через CLI и Python.

Шаг 3: Использование AWS CLI или SDK для публикации сообщений

Консоль отлично подходит для ручного тестирования, но на практике вам захочется публиковать сообщения программно.

Интерфейс командной строки AWS (CLI) упрощает отправку сообщений SNS из вашего терминала или сценариев автоматизации.

Предполагая, что у вас установлен и настроен AWS CLI, выполните это команду для публикации сообщения через CLI:

aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"

Изображение 15 – Публикация сообщения через AWS CLI

Мгновенно вы увидите аналогичное сообщение в своем почтовом ящике:

Изображение 16 – Публикация сообщения через AWS CLI (2)

Для более сложных приложений AWS SDK предоставляет программный доступ к SNS на многих языках программирования.

Вот простой пример публикации сообщения с использованием Python и библиотеки boto3:

import boto3 # Инициализация клиента SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN темы (Amazon Resource Name) topic_arn = "sns-arn" # Опубликовать простое сообщение response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # Проверить, было ли сообщение успешно отправлено if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")

Изображение 17 – Публикация сообщения через Python SDK

Еще раз сообщение моментально доставлено в мой почтовый ящик:

Изображение 18 – Публикация сообщений через Python SDK (2)

Это все, что касается публикации сообщений с помощью SNS! Теперь у вас есть несколько способов отправки уведомлений, от простого консольного интерфейса до программной публикации с помощью AWS CLI или SDK.

> Новичок в AWS Boto на Python? Запишитесь на наш курс, чтобы в короткие сроки стать опытным.

В следующем разделе мы рассмотрим некоторые продвинутые функции SNS, которые поднимут ваши уведомления на новый уровень.

Продвинутые функции SNS

До сих пор вы узнали основы SNS. В этом разделе вы увидите несколько продвинутых функций, которые делают SNS по-настоящему мощным.

Фильтрация сообщений в социальных сетях

Частая отправка одного и того же уведомления всем абонентам часто приводит к тому, что конечные точки получают сообщения, которые их не касаются.

Фильтрация сообщений решает эту проблему, позволяя абонентам отфильтровывать получаемые сообщения на основе атрибутов сообщения. Представьте себе это как настройку фильтров электронной почты – вы создаете правила, определяющие, какие сообщения дойдут до вас. Для SNS эти правила называются политиками фильтра.

Для начала вы можете настроить политики фильтрации на своих подписках, чтобы они получали только актуальные сообщения:

Изображение 19 – Политики фильтрации уведомлений

В этом примере подписчик будет получать уведомления только о сообщениях, у которых есть атрибут order_value с числовым значением 1500 и более.

Теперь для отправки такого уведомления вы можете использовать следующий код Python:

import boto3 # Инициализация клиента SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN темы (Amazon Resource Name) topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic" response = sns_client.publish( TopicArn=topic_arn, Message="A new high-value order has been placed", Subject="New Order Notification", MessageAttributes={ "order_value": {"DataType": "Number", "StringValue": "2000"}, "region": {"DataType": "String", "StringValue": "EU"}, "category": {"DataType": "String", "StringValue": "Electronics"}, }, ) print(response)

Это то, что вы увидите после запуска скрипта Python:

Изображение 20 – Отправка уведомления через Python

Только если значение переменной order_value составляет 1500 или более, вы получите уведомление:

Изображение 21 – Содержание уведомления

В общем, политики фильтрации позволяют отправлять целевые уведомления без изменения вашего кода публикации. Лучшая часть в том, что фильтрация происходит на стороне AWS, а не в вашем приложении, что повышает эффективность и снижает ненужный трафик.

Очереди мертвых писем SNS (DLQ)

Доставка сообщения иногда может завершиться неудачей даже с самыми надежными системами.

Очередь мертвых писем (DLQ) – это специальная очередь Amazon SQS, куда SNS может отправлять сообщения, которые не удалось доставить их подписчикам. Обычно это происходит, когда подписчик недоступен или возникает ошибка. Вместо того чтобы потерять эти неудачные сообщения навсегда, SNS перенаправляет их в DLQ, где вы можете проанализировать их позже или повторно попытаться доставить.

Настройка DLQ включает два шага. Сначала создайте очередь SQS для использования в качестве вашей DLQ:

Изображение 22 – Создание очереди SQS

Затем настройте свою подписку SNS для использования этой очереди для недоставленных сообщений:

Изображение 23 – Добавление политики перенаправления в очередь SQS

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

При наличии DLQ вы можете отслеживать сбои доставки и принимать необходимые меры. Например, вы можете настроить сигнализацию, которая срабатывает, когда сообщения начинают появляться в вашей DLQ, предупреждая вас о потенциальных проблемах с вашими подписчиками, но это выходит за рамки данного раздела.

Использование AWS Lambda с SNS

Функции Lambda открывают мир возможностей для обработки сообщений SNS.

Когда вы подписываете функцию Lambda на тему SNS, функция срабатывает автоматически при публикации сообщения. Благодаря серверному подходу Lambda вам не нужно управлять какой-либо инфраструктурой для обработки сообщений, поскольку он автоматически масштабируется в зависимости от объема сообщений.

Для начала создайте функцию Lambda:

Изображение 24 – Создание функции Lambda

Затем заполните ее кодом, подобным этому:

def lambda_handler(event, context): # Сообщения SNS поступают в массив 'Records' for record in event["Records"]: # Извлеките сообщение message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # Обработайте сообщение print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # Ваша бизнес-логика здесь # Например, сохраните сообщение в базе данных # или запустите другую службу AWS print("ALL DONE!") # Вернуть успех return {"statusCode": 200, "body": "Message processed successfully"}

Изображение 25 – Код функции Лямбда

Как только ваш код будет готов, нажмите кнопку “Добавить триггер”, чтобы подключить функцию Лямбда к SNS:

Изображение 26 – Подключение SNS к Лямбде

Функция теперь подключена к очереди, что означает, что вы можете отправить тестовое уведомление:

Изображение 27 – Тестовое уведомление

Функции Lambda позволяют отслеживать журналы, что означает, что вы можете видеть недавние вызовы функций – результат отправки уведомления:

Изображение 28 – Журналы функций Lambda

Функции Lambda могут выполнять практически любые операции с этими сообщениями – сохранять их в базе данных, запускать другие службы AWS, отправлять электронные письма или даже вызывать внешние API. Это делает SNS и Lambda мощной комбинацией для создания событийно-ориентированных архитектур. Вы можете узнать больше о функциях Lambda в учебнике Начало работы с AWS Lambda

Далее вы узнаете основы мониторинга и ведения журналов SNS.

Мониторинг и ведение журналов активности SNS

Отслеживание вашей активности в социальных сетях необходимо для поддержания надежной системы уведомлений.

Использование Amazon CloudWatch с SNS

Amazon CloudWatch обеспечивает комплексный мониторинг всех ваших услуг AWS, включая SNS. Когда вы настраиваете CloudWatch с SNS, вы получаете видимость важных операционных метрик, таких как скорость доставки сообщений, сбои и шаблоны использования API.

Для начала мониторинга CloudWatch для SNS перейдите в консоль CloudWatch в вашей учетной записи AWS. Оттуда вы сможете получить доступ к предварительно настроенным метрикам SNS, которые AWS автоматически собирает для вас.

Наиболее ценные метрики SNS для мониторинга включают:

  • КоличествоОпубликованныхСообщений: Отслеживает количество сообщений, опубликованных в ваши темы.
  • КоличествоДоставленныхУведомлений: Показывает успешные доставки сообщений подписчикам.
  • КоличествоНеудачныхУведомлений: Выделяет неудачные попытки доставки, которые могут указывать на проблемы конфигурации.
  • РазмерПубликации: Измеряет размер опубликованных сообщений, помогая вам оставаться в пределах сервисных ограничений.

Изображение 29 – Обычная панель мониторинга Cloudwatch для SNS

Настройка оповещений CloudWatch позволяет быстро реагировать на потенциальные проблемы до их влияния на пользователей. Например, вы можете создать оповещение, которое срабатывает, когда количество ошибок доставки сообщений превышает определенный порог:

  1. В консоли CloudWatch перейдите в раздел “Оповещения”.
  2. Нажмите “Создать будильник” и выберите метрику SNS, которую вы хотите отслеживать.
  3. Задайте пороговое значение (например, более 5 неудачных доставок за 5 минут).
  4. Настройте действия уведомления, например, отправку оповещения операционной команде.

Если вы предпочитаете изображения инструкциям, начните с создания будильника для интересующей вас метрики, например, NumberOfNotificationsFailed. Задайте пороговые значения, которые активируют будильник:

Изображение 30 – Создание будильника

Вот и все – будильник теперь создан и активен:

Изображение 31 – Создание сигнала тревоги (2)

Эти сигналы могут быть разницей между превентивным решением проблемы и узнаванием об этом от недовольных пользователей.

Просмотр журналов SNS

AWS CloudTrail фиксирует всю деятельность API в вашей учетной записи AWS, включая действия, выполненные в службе SNS.

Каждая операция, выполненная с вашими темами SNS – независимо от того, была ли она выполнена через консоль, CLI или SDK, генерирует запись в журналах CloudTrail. Эти журналы предоставляют ценную информацию для анализа безопасности, отслеживания изменений ресурсов и аудита соответствия.

Для доступа к журналам SNS в CloudTrail:

  1. Откройте консоль CloudTrail в своей учетной записи AWS (вам, вероятно, придется создать новый трейл).
  2. Перейдите в раздел “История событий”, чтобы увидеть недавнюю активность SNS.
  3. Отфильтруйте события, выбрав “Источник события” и введя “sns.amazonaws.com”.

Если текстовых инструкций недостаточно, обратитесь к изображениям ниже. Начните с создания нового трейла:

Изображение 32 – Создание нового трейла

Затем в разделе “История событий” отфильтруйте события, чтобы включить только те, которые относятся к SNS:

Изображение 33 – Фильтрация логов

Логи автоматически сохраняются в бакете S3, что обеспечивает постоянное хранение ваших логов и обеспечивает более продвинутые возможности запросов.

> Как работает хранение в AWS? Прочтите наше руководство по S3 и EFS.

В заключение, объединяя метрики CloudWatch с логами CloudTrail, вы создаете комплексную систему мониторинга, которая помогает обеспечить надежную работу вашей инфраструктуры SNS.

Лучшие практики использования AWS SNS

Теперь вы знаете основные и продвинутые функции AWS SNS. Осталось обсудить лучшие практики создания тем и отправки сообщений.

Обеспечение безопасности тем SNS

Безопасность должна быть в приоритете при настройке вашей инфраструктуры SNS. Без должных контролов ваши темы могут быть уязвимы для несанкционированного доступа, что представляет собой огромный риск для безопасности.

Служба управления идентификацией и доступом AWS (IAM) предоставляет необходимые инструменты для обеспечения безопасности ваших тем SNS. Начните с создания политик, которые следуют принципу наименьших привилегий – предоставляйте только конкретные разрешения, необходимые для каждого пользователя или службы. Например, вам может потребоваться, чтобы некоторые приложения могли только публиковать сообщения, в то время как другие нуждаются только в подписке на темы.

Вот пример политики IAM, которая ограничивает публикацию в определенную тему:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "sns-arn" } ] }

Также вы можете использовать политики темы для контроля того, какие учетные записи AWS могут подписываться на ваши темы. Это особенно важно, если вы делитесь данными между организационными границами.

Не забывайте регулярно аудитить разрешения с помощью AWS CloudTrail и удалять доступ, который больше не нужен.

Управление объемом сообщений

Высокие объемы сообщений могут перегрузить подписчиков, если их не обрабатывать правильно. Здесь сочетание SNS с другими службами AWS становится необходимым.

Один из популярных шаблонов – это архитектура “рассылки”, при которой вы публикуете сообщения в тему SNS, к которой подписано несколько очередей SQS. Каждая очередь может затем поступать в различные системы обработки своим собственным темпом. Это отделяет ваших издателей от ваших потребителей и обеспечивает буфер при всплесках трафика.

Для потребностей в обработке в реальном времени рассмотрите возможность подписки функций Lambda на ваши темы. Lambda масштабируется автоматически вместе с объемом ваших сообщений, исключая необходимость предоставления и управления серверами.

Снижение затрат

В то время как SNS является экономически эффективным решением, расходы могут быстро нарастать по мере увеличения объема сообщений. Несколько стратегических выборов могут помочь контролировать ваши расходы.

Во-первых, будьте выборочными в отношении протоколов подписки. Конечные точки HTTP/HTTPS, как правило, являются наиболее экономически выгодным вариантом. Уведомления по электронной почте, хоть и удобные, следует использовать осторожно, так как они обходятся дороже за каждое сообщение.

Фильтрация сообщений – еще один мощный инструмент экономии затрат. Реализуя политики фильтрации на своих подписках, вы гарантируете, что сообщения будут доставляться только заинтересованным абонентам. Например, если у вас есть тема для всех системных оповещений, вам может потребоваться, чтобы ваши дежурные инженеры получали только критические оповещения во время своей смены, а не каждое уведомление:

# Подписка с политикой фильтрации response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )

Наконец, регулярно просматривайте свое использование SNS в AWS Cost Explorer и ищите возможности объединения тем или удаления неиспользуемых подписок. Неиспользуемые или повторяющиеся ресурсы не только добавляют ненужные расходы, но и усложняют вашу архитектуру.

Следуя этим bewтическим рекомендациям, вы создадите реализацию SNS, которая будет безопасной, масштабируемой и экономичной – все, что вам нужно для надежного сервиса уведомлений без неожиданных расходов или проблем с безопасностью.

Итак, AWS SNS

Если вам нужны мгновенные уведомления между распределенными приложениями, обратите внимание на AWS SNS. Он легко используется, хорошо интегрируется с другими службами AWS и масштабируется бесконечно, чтобы соответствовать вашим потребностям.

Модель публикации-подписки в SNS позволяет легко реализовывать системы уведомлений, которые могут достигать нескольких каналов одновременно. Начиная с создания тем и управления подписчиками и заканчивая внедрением расширенных функций, таких как фильтрация сообщений и очереди мертвых писем, у вас теперь есть знания для создания надежной инфраструктуры уведомлений.

Вы также узнали об основных аспектах мониторинга, безопасности и управлении затратами, которые обеспечивают надежность и эффективность вашей реализации SNS в производственных средах.

Поскольку приложения продолжают принимать архитектуру, ориентированную на события, службы, такие как SNS, становятся все более ценными. Независимо от того, создаете ли вы простую систему оповещения или сложные микросервисы, шаблоны в этом учебнике предоставляют основу для эффективного взаимодействия между компонентами вашей системы.

Чтобы узнать больше о AWS, следуйте за этими курсами от DataCamp:

Вы даже можете использовать DataCamp для подготовки к экзаменам на сертификат AWS – Практикующий облачных технологий AWS (CLF-C02).

Source:
https://www.datacamp.com/tutorial/aws-sns