AWS SNS: La Guía Completa de Notificaciones en Tiempo Real

Administrar notificaciones en tiempo real en tus aplicaciones puede ser un gran desafío, al menos sin el servicio de mensajería adecuado.

Amazon Simple Notification Service (SNS) está aquí para proporcionar una solución de mensajería completamente gestionada para desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones serverless. SNS te permite enviar mensajes a un gran número de suscriptores a través de múltiples protocolos de transporte, como HTTP/S, correo electrónico, SMS y notificaciones push móviles. AWS SNS se encarga de todo el trabajo pesado de entrega de mensajes, incluida la entrega confiable, reintentos y funcionalidad de espera, lo que te da la libertad de concentrarte en construir las características principales de tu aplicación.

AWS SNS sigue un modelo de publicación-suscripción que es fácil de escalar y entender. Un solo mensaje publicado puede ser distribuido a múltiples puntos finales simultáneamente, lo que hace que SNS sea ideal para arquitecturas impulsadas por eventos.

En este tutorial, te guiaré a través de la configuración y el uso de AWS SNS para enviar notificaciones a través de varios canales.

¿Qué es AWS SNS?

Amazon Simple Notification Service (SNS) es el servicio de mensajería pub/sub administrado de AWS que te permite desacoplar microservicios, sistemas distribuidos y aplicaciones sin servidor.

SNS funciona con un modelo simple de publicación-suscripción, donde los editores envían mensajes a temas, y los suscriptores reciben esos mensajes. Piensa en un tema de SNS como un canal de comunicación: publicas mensajes en este canal, y cualquier persona que esté suscrita recibe la notificación de inmediato. La belleza de este sistema es que los editores no necesitan saber quién está recibiendo sus mensajes, y los suscriptores no necesitan saber quién los está enviando.

Te estarás preguntando cómo esto se diferencia de otros servicios de mensajería de AWS como Simple Queue Service (SQS). En términos simples, SQS utiliza un modelo basado en colas diseñado principalmente para procesar tareas de manera asincrónica, mientras que SNS se centra en transmitir mensajes a múltiples destinatarios al mismo tiempo. Esto hace que SNS sea perfecto para escenarios en los que necesitas notificar a muchos sistemas sobre un evento que acaba de ocurrir. Puedes aprender más sobre las diferencias en la publicación del blog SQS vs SNS.

SNS admite múltiples protocolos de entrega, lo que a su vez te brinda flexibilidad en cómo tus suscriptores reciben notificaciones.

Características clave de AWS SNS

SNS viene cargado de características que lo convierten en el único servicio de notificaciones que necesitarás. Listaré un par:

  • Arquitectura de fan-out: SNS puede entregar mensajes a miles de puntos finales simultáneamente, lo que a su vez te permite transmitir actualizaciones en todo tu ecosistema de aplicaciones con una sola llamada a la API.
  • Varios protocolos de transporte: No estás limitado a una sola forma de enviar mensajes. SNS admite puntos finales HTTP/HTTPS, correo electrónico, SMS, notificaciones push móviles e incluso colas SQS como puntos finales de suscripción.
  • Filtrado de mensajes: No todos los suscriptores necesitan todos los mensajes. Con el filtrado de mensajes, tus suscriptores pueden crear políticas de filtro para recibir solo los mensajes que les interesan, lo que reduce el ruido y la sobrecarga de procesamiento.
  • Archivo de mensajes: Si necesitas mantener un registro de todas las notificaciones enviadas, te alegrará saber que SNS se integra con Amazon S3 para archivar mensajes y con Amazon Redshift para análisis.
  • Seguimiento del estado de entrega: Puedes monitorear el estado de entrega de tus notificaciones para asegurarte de que lleguen a sus destinos. Esto es particularmente útil para SMS y notificaciones push móviles donde la entrega no está garantizada.
  • Cifrado: Tus datos sensibles permanecen protegidos con el soporte de cifrado del lado del servidor de SNS, que asegura que tus mensajes permanezcan confidenciales durante la transmisión.

Pero la mejor parte de SNS tiene que ser la escalabilidad. SNS se ajusta automáticamente a las necesidades de tu aplicación. No importa si estás enviando diez o diez millones de notificaciones al día, el servicio se ajusta en consecuencia sin necesidad de intervención manual.

A continuación, te mostraré cómo configurar SNS.

Configuración de AWS SNS

Antes de poder enviar tu primera notificación con SNS, deberás seguir algunos pasos de configuración para tener todo listo.

Paso 1: Crear una cuenta de AWS

Si aún no tienes una cuenta de AWS, deberás crear una antes de poder comenzar a usar SNS.

Dirígete a la página de inicio de AWS y haz cclic en el botón “Crear una cuenta de AWS” en la esquina superior derecha. Necesitarás proporcionar tu dirección de correo electrónico, crear una contraseña e ingresar cierta información básica de la cuenta. AWS también pedirá los detalles de tu tarjeta de crédito – no te preocupes, SNS tiene un nivel gratuito bastante generoso, y no se te cobrará a menos que excedas esos límites.

Una vez que tu cuenta esté configurada, estás listo para avanzar. Sin embargo, te recomiendo encarecidamente crear un usuario IAM dedicado en lugar de usar tu cuenta raíz. Eso está fuera del alcance del artículo de hoy, pero consulta las instrucciones oficiales para obtener directrices detalladas.

Paso 2: Configuración de SNS en la consola de administración de AWS

Ahora que tienes una cuenta de AWS, es hora de acceder al servicio SNS.

Inicie sesión en la Consola de administración de AWS con sus credenciales y busque SNS. Puede hacerlo de tres formas:

  • Escriba “SNS” en la barra de búsqueda en la parte superior de la consola
  • Haga clic en “Servicios” en la barra de navegación superior y encuentre SNS bajo la categoría de “Integración de aplicaciones”
  • Vaya directamente a la consola de SNS

De cualquier manera, esta es la pantalla que debería ver:

Imagen 1 – Página de servicio AWS SNS

Una vez que estés en el panel de control de SNS, verás un menú en el lado izquierdo con opciones como “Temas,” “Suscripciones” y “Móvil.” El panel de control te da una visión general de tus recursos de SNS y actividad reciente.

Esto estará bastante vacío para una cuenta nueva, eso es de esperar. Ahora, creemos nuestro primer tema de SNS.

Paso 3: Crear un tema de SNS

Un tema de SNS es básicamente un canal de comunicación al que los editores envían mensajes y los suscriptores escuchan.

Imagínalo como una estación de radio: la estación transmite en una frecuencia específica (el tema) y cualquiera sintonizado en esa frecuencia recibe la transmisión. En términos de SNS, tu aplicación publica mensajes en un tema y todos los puntos finales suscritos a ese tema reciben esos mensajes.

Aquí tienes cómo crear tu primer tema de SNS:

  1. En la pantalla que has visto en Imagen 1, introduce un nombre para el tema.
  2. Haz clic en el botón “Siguiente paso”.
  3. Selecciona “Estándar” como tipo (los temas FIFO tienen diferentes casos de uso que cubriremos más adelante).
  4. (Opcional) Introduce un nombre de visualización. Este se incluirá en los mensajes enviados a suscriptores de SMS o correo electrónico.
  5. Deje todas las demás configuraciones en sus valores predeterminados por ahora.
  6. Haga clic en “Crear tema”.

Si prefiere las imágenes en lugar del texto, así es como debería verse su pantalla:

Imagen 2 – Creación de tema de SNS

Una vez que esté satisfecho con los valores, desplácese hacia abajo hasta que vea el botón “Crear tema”:

Imagen 3 – Creación de tema de SNS (2)

¡Y eso es todo! Tu tema SNS ya está listo para usar. Verás detalles como el ARN del tema (Nombre de Recurso de Amazon), que identifica de manera única tu tema:

Imagen 4 – Detalles del tema creado

Tu nuevo tema está listo para suscripciones, pero aún no tiene ninguna, lo que significa que los mensajes que publiques no irán a ningún lado. No te preocupes, solucionarás eso en la siguiente sección cuando agregues suscriptores.

Suscriptores y Suscripciones de SNS

Como mencioné anteriormente, tu tema SNS es como una estación de radio. Actualmente no tiene oyentes, pero eso cambiará cuando agregues suscriptores para recibir tus mensajes.

¿Qué es un suscriptor de SNS?

Un suscriptor es cualquier punto final que recibe notificaciones de tu tema SNS cuando se publica un mensaje.

Considera la analogía de un boletín informativo. Cada vez que publicas una nueva edición (mensaje), se entrega a todos en tu lista de correo. SNS hace que este proceso sea automático y escalable, y se encarga de toda la logística de entrega por ti.

AWS admite una amplia variedad de tipos de suscriptores, lo que te brinda flexibilidad en cómo se procesan tus mensajes. Enumeraré a continuación los principales tipos:

  • Direcciones de correo electrónico: Envía notificaciones de texto plano directamente a buzones de correo electrónico.
  • Números de SMS: Envía notificaciones de mensajes de texto a teléfonos móviles.
  • Colas SQS: Rutea mensajes a otros servicios de AWS para un procesamiento adicional.
  • Funciones Lambda: Activa la ejecución de código sin servidor en respuesta a notificaciones.
  • Puntos finales HTTP/HTTPS: Envía mensajes a aplicaciones web o API.
  • Notificaciones móviles: Entrega de notificaciones directamente a aplicaciones móviles.

Cada tipo de suscriptor tiene sus propias ventajas y casos de uso. Por ejemplo, el correo electrónico y los SMS son excelentes para destinatarios humanos, mientras que las colas SQS y las funciones Lambda son mejores para la comunicación de sistema a sistema.

Paso 1: Agregar un suscriptor

Ahora que entiendes qué son los suscriptores, vamos a agregar uno a tu tema. Para este tutorial, usaré el correo electrónico ya que es el más sencillo de configurar.

A continuación, te explico cómo agregar un suscriptor por correo electrónico a tu tema SNS:

  1. Desde la página de detalles de tu tema (la que se muestra en Imagen 4), haz clic en el botón “Crear suscripción”.
  2. En el menú desplegable “Protocolo”, selecciona “Correo electrónico”.
  3. En el campo “Punto final”, introduce la dirección de correo electrónico que debe recibir las notificaciones.
  4. Deja todos los demás ajustes en sus valores predeterminados.
  5. Haz clic en “Crear suscripción”.

Tu pantalla debería verse algo así:

Imagen 5 – Creando una suscripción por correo electrónico

Una vez que hagas clic en “Crear suscripción”, AWS agregará la suscripción a tu tema, pero estará en un estado de “confirmación pendiente”:

Imagen 6 – Estado de confirmación pendiente

Esta es una característica de seguridad importante, ya que AWS quiere asegurarse de que el propietario de la dirección de correo electrónico realmente quiera recibir estas notificaciones.

Paso 2: Confirmando suscripciones

Después de agregar un suscriptor, deben confirmar que desean recibir notificaciones de tu tema SNS.

Para las suscripciones por correo electrónico, AWS envía automáticamente un correo de confirmación a la dirección que especificaste. El correo contiene un enlace que el destinatario debe hacer clic para activar la suscripción. Hasta que esto suceda, no se entregarán mensajes publicados en el tema a este punto final.

Así es como se ve un correo de confirmación típico:

Imagen 7 – Correo de confirmación de SNS

El destinatario simplemente necesita hacer clic en el enlace “Confirmar suscripción” en el correo. Serán llevados a una página que confirma que su suscripción ahora está activa:

Imagen 8 – Mensaje de confirmación de suscripción

El proceso es similar para los suscriptores de SMS – AWS envía un mensaje de texto con un enlace de confirmación que el destinatario debe seguir. Los endpoints HTTP/HTTPS deben responder a una solicitud de confirmación de AWS, mientras que los recursos de AWS como funciones Lambda y colas SQS se pueden configurar para la confirmación automática.

Puedes verificar el estado de tus suscripciones haciendo clic en la sección “Suscripciones” en la barra lateral izquierda de la consola SNS. Las suscripciones confirmadas mostrarán un estado de “Confirmado”, mientras que las que estén esperando confirmación mostrarán “Pendiente de confirmación”.

Imagen 9 – Estado de suscripción

Una vez que tu suscripción esté confirmada, ¡estás listo para comenzar a enviar mensajes! Cualquier mensaje publicado en el tema se entregará a todos los suscriptores confirmados utilizando su protocolo especificado.

Eso es todo lo que hay que hacer para configurar las suscripciones de SNS. En la próxima sección, aprenderás cómo publicar mensajes en tu tema y probar que tus suscriptores los están recibiendo correctamente.

Publicación de mensajes en temas de SNS

Ahora que has configurado tu tema de SNS y añadido suscriptores, es hora de enviar tu primera notificación.

Paso 1: Publicar un mensaje

Una buena manera de empezar es publicar un mensaje a través de la Consola de AWS.

Para enviar tu primer mensaje, navega a la página de detalles de tu tema y haz clic en el botón “Publicar mensaje” en la parte superior derecha (ver Imagen 4). Esto abrirá el formulario de publicación de mensajes donde podrás redactar tu notificación. Verás campos para el asunto y el cuerpo del mensaje. El asunto es opcional pero útil para las notificaciones por correo electrónico, ya que se convierte en la línea de asunto del correo.

Para un mensaje de prueba simple, podrías ingresar algo como esto:

Imagen 10 – Contenido del primer mensaje

Cuando estés satisfecho con tu mensaje, desplázate hacia abajo y haz clic en el botón “Publicar mensaje” en la parte inferior del formulario:

Imagen 11 – Publicando un mensaje a través de la consola

Después de hacer clic, SNS distribuye inmediatamente tu mensaje a todos los suscriptores confirmados. Si has configurado una suscripción por correo electrónico, deberías recibir el mensaje de prueba en tu bandeja de entrada en cuestión de segundos:

Imagen 12 – Mensaje recibido en el correo electrónico

¡Simple, ¿verdad? Ahora veamos cómo personalizarlo aún más.

Paso 2: Enviando notificaciones por SMS y correo electrónico

SNS te permite personalizar cómo aparecen tus mensajes para diferentes tipos de suscriptores.

Cuando publiques un mensaje, notarás la opción de “Estructura del mensaje”. De forma predeterminada, está configurada en “Carga útil idéntica para todos los protocolos de entrega”, lo que significa que todos los suscriptores reciben exactamente el mismo mensaje. Sin embargo, también puedes seleccionar “Carga útil personalizada para cada protocolo de entrega”, lo que te permite adaptar el formato del mensaje para cada tipo de suscriptor.

Para notificaciones por correo electrónico, tienes dos opciones de formato:

  • Correo electrónico JSON: Envía la carga útil JSON cruda al punto final de correo electrónico.
  • Correo electrónico: Envía un correo electrónico formateado con el asunto y cuerpo del mensaje.

Imagen 13 – Personalización de la carga útil

Para las notificaciones por SMS, ten en cuenta que hay un límite de 160 caracteres. SNS entregará mensajes más largos, pero serán tratados como varios mensajes. También puedes establecer el tipo de mensaje SMS como “Promocional” o “Transaccional”, lo que afecta la optimización de la entrega:

Imagen 14 – Opciones de SMS

Ahora sabes cómo enviar y personalizar notificaciones por correo electrónico a través de AWS Console. A continuación, aprenderás a hacer lo mismo a través de la CLI y Python.

Paso 3: Usando la AWS CLI o SDK para publicar mensajes

La consola es excelente para pruebas manuales, pero en el mundo real, querrás publicar mensajes de forma programática.

La Interfaz de Línea de Comandos de AWS (CLI) facilita el envío de mensajes SNS desde tu terminal o scripts de automatización.

Suponiendo que tienes la AWS CLI instalada y configurada, ejecuta este comando para publicar un mensaje a través de la CLI:

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

Imagen 15 – Publicación de mensajes a través de AWS CLI

En un instante, verás un mensaje similar en tu bandeja de entrada:

Imagen 16 – Publicación de mensajes a través de AWS CLI (2)

Para aplicaciones más avanzadas, los SDK de AWS proporcionan acceso programático a SNS en muchos lenguajes de programación.

A continuación, un ejemplo simple para publicar un mensaje usando Python con la biblioteca boto3:

import boto3 # Inicializar el cliente de SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN del tema (Nombre de Recurso de Amazon) topic_arn = "sns-arn" # Publicar un mensaje simple response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # Verificar si el mensaje se envió con éxito if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")

Imagen 17 – Publicación de mensajes a través del SDK de Python

Una vez más, el mensaje se entrega instantáneamente a mi bandeja de entrada:

Imagen 18 – Publicación de mensajes a través del SDK de Python (2)

¡Eso es todo lo que hay para publicar mensajes con SNS! Ahora tienes múltiples formas de enviar notificaciones, desde la sencilla interfaz de consola hasta la publicación programática con la AWS CLI o SDK.

> ¿Nuevo en AWS Boto en Python? Inscríbete en nuestro curso para volverte competente en poco tiempo.

En la próxima sección, exploraremos algunas características avanzadas de SNS que llevarán tus notificaciones al siguiente nivel.

Características avanzadas de SNS

Hasta ahora, has aprendido lo básico de SNS. En esta sección, verás un par de características avanzadas que hacen que SNS sea realmente poderoso.

Filtrado de mensajes SNS

Enviar la misma notificación a todos los suscriptores a menudo resulta en que los puntos finales reciben mensajes que no les interesan.

El filtrado de mensajes resuelve este problema al permitir que los suscriptores filtren qué mensajes reciben según los atributos del mensaje. Piénsalo como configurar filtros de correo electrónico: creas reglas que determinan qué mensajes llegan. Para SNS, estas reglas se llaman políticas de filtrado.

Para empezar, puedes configurar políticas de filtrado en tus suscripciones para que solo reciban mensajes relevantes:

Imagen 19 – Políticas de filtrado de notificaciones

En este ejemplo, el suscriptor solo recibirá notificaciones para mensajes que tengan un atributo order_value con un valor numérico de 1500 en adelante.

Ahora, para enviar esa notificación, puedes usar el siguiente código en Python:

import boto3 # Inicializa el cliente de SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN del tema (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)

Esto es lo que verás después de ejecutar el script de Python:

Imagen 20 – Enviando una notificación a través de Python

Solo si el valor de order_value es 1500 o superior, recibirás la notificación:

Imagen 21 – Contenido de la notificación

En resumen, las políticas de filtro te permiten enviar notificaciones dirigidas sin cambiar tu código de publicación. La mejor parte es que el filtrado ocurre en el lado de AWS, no en tu aplicación, lo que mejora la eficiencia y reduce el tráfico innecesario.

Colas de mensajes no entregados de SNS (DLQ)

La entrega de mensajes a veces puede fallar incluso con los sistemas más confiables.

Una Cola de Mensajes Muertos (DLQ) es una cola especial de Amazon SQS donde SNS puede enviar mensajes que no pudieron ser entregados a sus suscriptores. Esto suele ocurrir cuando un suscriptor no está disponible o devuelve un error. En lugar de perder estos mensajes fallidos para siempre, SNS los redirige a la DLQ, donde puedes analizarlos más tarde o intentar la entrega nuevamente.

Configurar una DLQ implica dos pasos. Primero, crea una cola SQS que sirva como tu DLQ:

Imagen 22 – Creando una cola SQS

Luego, configura tu suscripción SNS para usar esta cola para mensajes no entregables:

Imagen 23 – Agregando política de reenvío a la cola SQS

Esta configuración requiere los permisos adecuados, ya que SNS necesita poder enviar mensajes a la cola SQS. En la consola de AWS, puedes configurarlo a través de una simple casilla de verificación, pero si estás utilizando CloudFormation u otras herramientas de infraestructura como código, necesitarás agregar los permisos IAM apropiados.

Con una DLQ configurada, puedes monitorear las fallas en la entrega y tomar medidas cuando sea necesario. Por ejemplo, podrías configurar una alarma que se active cuando comiencen a aparecer mensajes en tu DLQ, alertándote sobre posibles problemas con tus suscriptores, pero eso está fuera del alcance de esta sección.

Usando AWS Lambda con SNS

Las funciones Lambda abren un mundo de posibilidades para procesar mensajes de SNS.

Cuando suscribes una función Lambda a un tema SNS, la función se activa automáticamente cada vez que se publica un mensaje. El enfoque sin servidor de Lambda significa que no necesitas gestionar ninguna infraestructura para el procesamiento de mensajes, ya que escala automáticamente según el volumen de mensajes.

Para comenzar, primero crea una función Lambda:

Imagen 24 – Creando una función Lambda

Luego, complétala con un código similar a este:

def lambda_handler(event, context): # Los mensajes de SNS se encuentran en el array 'Records' for record in event["Records"]: # Extraer el mensaje message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # Procesar el mensaje print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # Tu lógica de negocio aquí # Por ejemplo, almacenar el mensaje en una base de datos # o activar otro servicio de AWS print("ALL DONE!") # Devolver éxito return {"statusCode": 200, "body": "Message processed successfully"}

Imagen 25 – Código de la función Lambda

Una vez que tu código esté listo, haz clic en el botón “Agregar desencadenador” para conectar la función Lambda a SNS:

Imagen 26 – Conectar SNS a Lambda

La función está ahora conectada a la cola, lo que significa que puedes enviar una notificación de prueba:

Imagen 27 – Notificación de prueba

Las funciones Lambda te permiten monitorear los registros, lo que significa que puedes ver las invocaciones recientes de funciones – el resultado de enviar una notificación:

Imagen 28 – Registros de funciones Lambda

Las funciones Lambda pueden hacer prácticamente cualquier cosa con estos mensajes: almacenarlos en una base de datos, activar otros servicios de AWS, enviar correos electrónicos o incluso llamar a APIs externas. Esto hace que SNS y Lambda sean una combinación poderosa para construir arquitecturas impulsadas por eventos. Puedes aprender más sobre las funciones Lambda en el tutorial Introducción a AWS Lambda.

A continuación, aprenderás lo básico sobre el monitoreo y registro de SNS.

Monitoreo y Registro de la Actividad de SNS

Llevar un seguimiento de tu actividad en las redes sociales es esencial para mantener un sistema de notificaciones confiable.

Usar Amazon CloudWatch con SNS

Amazon CloudWatch ofrece un monitoreo completo para todos tus servicios de AWS, incluido SNS. Al configurar CloudWatch con SNS, obtienes visibilidad en métricas operativas importantes como tasas de entrega de mensajes, fallos y patrones de uso de la API.

Para comenzar con el monitoreo de CloudWatch para SNS, dirígete a la consola de CloudWatch en tu cuenta de AWS. Desde allí, puedes acceder a las métricas preconfiguradas de SNS que AWS recopila automáticamente para ti.

Las métricas más valiosas de SNS para monitorear incluyen:

  • NumeroDeMensajesPublicados: Rastrea cuántos mensajes se publican en tus temas.
  • NumeroDeNotificacionesEntregadas: Muestra las entregas exitosas de mensajes a los suscriptores.
  • NumeroDeNotificacionesFallidas: Resalta los intentos de entrega fallidos, lo que podría indicar problemas de configuración.
  • TamañoPublicación: Mide el tamaño de los mensajes publicados, ayudándote a mantenerte dentro de los límites del servicio.

Imagen 29 – Panel de control predeterminado de Cloudwatch para SNS

Configurando alarmas de CloudWatch te permite responder rápidamente a problemas potenciales antes de que afecten a tus usuarios. Por ejemplo, podrías querer crear una alarma que se active cuando las fallas en la entrega de mensajes superen un cierto umbral:

  1. En la consola de CloudWatch, navega a la sección “Alarmas”.
  2. Haz clic en “Crear alarma” y selecciona la métrica de SNS que deseas monitorear.
  3. Define tu umbral (por ejemplo, más de 5 entregas fallidas en 5 minutos).
  4. Configura las acciones de notificación, como enviar una alerta a un equipo de operaciones.

Si prefieres imágenes en lugar de instrucciones, comienza creando una alarma para una métrica de interés, como NumberOfNotificationsFailed. Establece umbrales que activarán la alarma:

Imagen 30 – Creación de alarma

Y eso es todo, la alarma ahora está creada y activa:

Imagen 31 – Creación de alarmas (2)

Estas alarmas pueden marcar la diferencia entre abordar proactivamente un problema y enterarse de él a través de usuarios descontentos.

Revisando los registros de SNS

AWS CloudTrail captura toda la actividad de la API en tu cuenta de AWS, incluidas las acciones realizadas dentro del servicio SNS.

Cada operación realizada en tus temas de SNS—ya sea a través de la consola, CLI o SDK—genera una entrada en los registros de CloudTrail. Estos registros proporcionan información valiosa para el análisis de seguridad, el seguimiento de cambios en recursos y auditorías de cumplimiento.

Para acceder a los registros de SNS en CloudTrail:

  1. Abre la consola de CloudTrail en tu cuenta de AWS (probablemente tendrás que crear un nuevo trail).
  2. Navega a “Historial de eventos” para ver la actividad reciente de SNS.
  3. Filtra los eventos seleccionando “Fuente del evento” y escribiendo “sns.amazonaws.com”.

Una vez más, si las instrucciones en texto no son suficientes, consulta las imágenes a continuación. Comienza creando un nuevo trail:

Imagen 32 – Creando un nuevo trail

Luego, en “Historial de eventos”, filtra los eventos para incluir solo aquellos de SNS:

Imagen 33 – Filtrando registros

Los registros se almacenan automáticamente en un bucket de S3, lo que significa que este enfoque proporciona almacenamiento permanente para tus registros y permite capacidades de consulta más avanzadas.

> ¿Cómo funciona el almacenamiento en AWS? Lee nuestra guía sobre S3 y EFS.

Para concluir, al combinar métricas de CloudWatch con registros de CloudTrail, creas un sistema de monitoreo integral que ayuda a garantizar que tu infraestructura de SNS funcione de manera confiable.

Mejores Prácticas para Usar AWS SNS

Ahora conoces las características básicas y avanzadas de AWS SNS. Lo que queda por discutir son las mejores prácticas para crear temas y enviar mensajes.

Asegurando temas de SNS

La seguridad debe ser una prioridad principal al configurar tu infraestructura de SNS. Sin controles adecuados, tus temas podrían ser vulnerables a accesos no autorizados, lo que representa un gran riesgo de seguridad.

AWS Identity and Access Management (IAM) proporciona las herramientas que necesitas para asegurar tus temas de SNS. Comienza creando políticas que sigan el principio de menor privilegio: otorga solo los permisos específicos necesarios para cada usuario o servicio. Por ejemplo, es posible que desees que algunas aplicaciones solo publiquen mensajes, mientras que otras solo necesitan suscribirse a temas.

Aquí tienes un ejemplo de una política IAM que restringe la publicación a un tema específico:

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

También puedes utilizar políticas de tema para controlar qué cuentas de AWS pueden suscribirse a tus temas. Esto es particularmente importante si estás compartiendo datos entre límites organizativos.

No olvides auditar regularmente los permisos utilizando AWS CloudTrail y eliminar el acceso que ya no sea necesario.

Gestión del volumen de mensajes

Volúmenes altos de mensajes pueden abrumar a los suscriptores si no se manejan adecuadamente. Aquí es donde combinar SNS con otros servicios de AWS se vuelve esencial.

Un patrón popular es la arquitectura de “fanout”, donde publicas mensajes en un tema de SNS que tiene múltiples colas de SQS suscritas a él. Cada cola puede alimentar diferentes sistemas de procesamiento a su propio ritmo. Esto desacopla a tus editores de tus consumidores y proporciona un buffer durante los picos de tráfico.

Para necesidades de procesamiento en tiempo real, considera suscribir funciones Lambda a tus temas. Lambda se escala automáticamente con tu volumen de mensajes, eliminando la necesidad de aprovisionar y gestionar servidores.

Reducción de costos

Si bien SNS es rentable, los gastos pueden acumularse rápidamente a medida que aumenta el volumen de mensajes. Algunas elecciones estratégicas pueden ayudar a mantener tus costos bajo control.

Primero, sé selectivo con tus protocolos de suscripción. Los puntos finales HTTP/HTTPS son generalmente la opción más rentable. Las notificaciones por correo electrónico, aunque convenientes, deben usarse con moderación ya que incurren en costos más altos por mensaje.

El filtrado de mensajes es otra herramienta poderosa para ahorrar costos. Al implementar políticas de filtrado en tus suscripciones, te aseguras de que los mensajes se envíen solo a los suscriptores interesados. Por ejemplo, si tienes un tema para todas las alertas del sistema, es posible que desees que tus ingenieros de guardia reciban solo alertas críticas durante su turno, no cada notificación:

# Suscribirse con una política de filtrado response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )

Finalmente, revisa regularmente tu uso de SNS en el AWS Cost Explorer y busca oportunidades para consolidar temas o eliminar suscripciones no utilizadas. Los recursos inutilizados o duplicados no solo añaden costos innecesarios, sino que también complican tu arquitectura.

Al seguir estas mejores prácticas, crearás una implementación de SNS segura, escalable y rentable; todo lo que necesitas para tener un servicio de notificaciones confiable sin gastos inesperados o preocupaciones de seguridad.

Resumiendo AWS SNS

Si necesitas notificaciones en tiempo real entre aplicaciones distribuidas, no busques más allá de AWS SNS. Es fácil de usar, se integra bien con otros servicios de AWS y escala infinitamente para satisfacer tus necesidades.

El modelo de publicación-suscripción en SNS facilita la implementación de sistemas de notificación que pueden llegar a múltiples canales simultáneamente. Desde la creación de temas y la gestión de suscriptores hasta la implementación de funciones avanzadas como el filtrado de mensajes y las colas de mensajes no entregados, ahora tienes los conocimientos para construir una infraestructura de notificación robusta.

También has aprendido sobre los aspectos críticos de monitoreo, seguridad y gestión de costos que garantizan que tu implementación de SNS siga siendo confiable y eficiente en entornos de producción.

A medida que las aplicaciones continúan adoptando arquitecturas basadas en eventos, servicios como SNS se vuelven cada vez más valiosos. Ya sea que estés construyendo un sistema de alerta simple o microservicios complejos, los patrones en este tutorial proporcionan una base para una comunicación efectiva entre los componentes de tu sistema.

Para obtener más información sobre AWS, sigue estos cursos de DataCamp:

Puedes incluso usar DataCamp para prepararte para los exámenes de certificación de AWS – Practicante de AWS Cloud (CLF-C02).

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