Curso
AWS SNS: La Guía Completa de las Notificaciones en Tiempo Real
Gestionar las notificaciones en tiempo real en todas tus aplicaciones puede ser un gran reto, al menos sin el servicio de mensajería adecuado.
Amazon Simple Notification Service (SNS) ha llegado para proporcionar una solución de mensajería totalmente administrada para desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones sin servidor. 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 la entrega de mensajes, incluida la entrega fiable, los reintentos y la funcionalidad de backoff, lo que te da libertad para centrarte en crear las características principales de tu aplicación.
AWS SNS sigue un modelode publicación-suscripción que es fácil de escalar y de entender. Un único mensaje publicado puede distribuirse a varios puntos finales simultáneamente, lo que hace que SNS sea ideal para arquitecturas basadas en 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.
Los SNS funcionan según un sencillo modelo de publicación-suscripción en el que los editores envían mensajes a los temas y los suscriptores reciben esos mensajes. Piensa en un tema SNS como un canal de comunicación: publicas mensajes en este canal, y cualquiera que esté suscrito recibe una notificación inmediatamente. Lo bueno de este sistema es que los editores no necesitan saber quién recibe sus mensajes, y los suscriptores no necesitan saber quién los envía.
Quizá te preguntes en qué se diferencia de otros servicios de mensajería de AWS como Simple Queue Service (SQS). En pocas palabras, SQS utiliza un modelo basado en colas diseñado principalmente para procesar tareas de forma asíncrona, mientras que SNS se centra en la difusión de mensajes a varios destinatarios al mismo tiempo. Esto hace que el SNS sea perfecto para situaciones en las que necesitas notificar a muchos sistemas un acontecimiento que acaba de producirse. Puedes obtener más información sobre las diferenciasnces en la entrada del blog SQS vs SNS.
SNS admite múltiples protocolos de entrega, que a su vez te dan flexibilidad en la forma en que tus suscriptores reciben las notificaciones.
Características principales de AWS SNS
SNS viene repleto de funciones que lo convierten en el único servicio de notificaciones que necesitarás. Enumeraré un par:
- Arquitectura en abanico: SNS puede enviar mensajes a miles de puntos finales simultáneamente, lo que a su vez te permite difundir actualizaciones a todo tu ecosistema de aplicaciones con una sola llamada a la API.
- Múltiples 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 abonados necesitan todos los mensajes. Con el filtrado de mensajes, tus suscriptores pueden crear políticas de filtrado para recibir sólo los mensajes que les interesan, lo que reduce el ruido y la sobrecarga de procesamiento.
- Archivo de mensajes: Si necesitas llevar 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 realizar análisis.
- Seguimiento del estado de la entrega: Puedes controlar el estado de entrega de tus notificaciones para asegurarte de que llegan a su destino. Esto es especialmente útil para los SMS y las notificaciones push móviles, cuya entrega no está garantizada.
- Cifrado: Tus datos confidenciales están protegidos gracias a la encriptación del servidor de SNS, que garantiza la confidencialidad de tus mensajes durante la transmisión.
Pero lo mejor de los SNS tiene que ser la escalabilidad. El SNS se adapta automáticamente a las necesidades de tu aplicación. No importa si envías diez o diez millones de notificaciones al día, el servicio se ajusta en consecuencia sin requerir ninguna intervención manual.
A continuación, te mostraré cómo configurar SNS.
Configuración de AWS SNS
Antes de que puedas enviar tu primera notificación con SNS, tendrás que seguir unos pasos de configuración para que todo esté en su sitio.
Paso 1: Crear una cuenta AWS
Si aún no tienes una cuenta de AWS, tendrás que crear una antes de poder empezar a utilizar SNS.
Dirígete a la página principal de AWS y chaz clic en el botón "Crear una cuenta de AWS" situado en la esquina superior derecha. Tendrás que facilitar tu dirección de correo electrónico, crear una contraseña e introducir algunos datos básicos de la cuenta. AWS también te pedirá los datos de tu tarjeta de crédito; no te preocupes, SNS tiene un nivel gratuito bastante generoso, y no se te cobrará a menos que superes esos límites.
Una vez configurada tu cuenta, estás listo para seguir adelante. Sin embargo, te recomiendo encarecidamente que crees unusuario IAM dedicado en lugar de utilizar tu cuenta raíz. Eso está fuera del alcance del artículo de hoy, pero consultao las instrucciones oficiales para obtenerdirectrices detalladas.
Paso 2: Configurar SNS en la consola de administración de AWS
Ahora que tienes una cuenta de AWS, es el momento de acceder al servicio SNS.
Inicia sesión en la consola de administración de AWS con tus credenciales y busca SNS. Puedes hacerlo de tres formas:
- Escribe "SNS" en la barra de búsqueda de la parte superior de la consola
- Haz clic en "Servicios" en la barra de navegación superior y busca SNS en la categoría "Integración de aplicaciones".
- Ir directamente a la consola SNS
Independientemente del modo, ésta es la pantalla que debes ver:
Imagen 1 - Página del servicio AWS SNS
Una vez que estés en el panel de SNS, verás un menú en el lado izquierdo con opciones como "Temas", "Suscripciones" y "Móvil". El panel de control te ofrece una visión general de tus recursos SNS y de tu actividad reciente.
Esto estará bastante vacío para una cuenta nueva -eso es de esperar. Ahora, vamos a crear nuestro primer tema SNS.
Paso 3: Crear un tema SNS
Un tema SNS es básicamente un canal de comunicación al que los editores envían mensajes y los suscriptores escuchan.
Piensa en ello como en una emisora de radio: la emisora emite en una frecuencia específica (el tema), y cualquiera que sintonice esa frecuencia recibe la emisión. En términos SNS, tu aplicación publica mensajes en un tema, y todos los endpoints suscritos a ese tema reciben esos mensajes.
Aquí te explicamos cómo crear tu primer tema SNS:
- En la pantalla que has visto en Imagen 1introduce un nombre de tema.
- Pulsa el botón "Paso siguiente".
- Selecciona "Estándar" para el tipo (los temas FIFO tienen diferentes casos de uso que trataremos más adelante).
- (Opcional) Introduce un nombre para mostrar. Se incluirá en los mensajes enviados a los suscriptores de SMS o correo electrónico.
- Por ahora, deja los demás ajustes en sus valores predeterminados.
- Haz clic en "Crear tema".
Si prefieres las imágenes al texto, este es el aspecto que debe tener tu pantalla:
Imagen 2 - Creación de temas SNS
Cuando estés satisfecho con los valores, desplázate hacia abajo hasta que veas el botón "Crear tema":
Imagen 3 - Creación de temas SNS (2)
Y ya está. Tu tema SNS ya está listo para ser utilizado. Verás detalles como el ARN (Nombre de recurso de Amazon) del tema, que identifica de forma única tu tema:
Imagen 4 - Detalles del tema creado
Tu nuevo tema está listo para recibir suscripciones, pero aún no tiene ninguna, lo que significa que los mensajes que publiques no irán a ninguna parte. No te preocupes, lo solucionarás en la siguiente sección cuando añadas suscriptores.
Suscriptores y suscripciones SNS
Como he dicho antes, el tema de tu SNS es como una emisora de radio. Actualmente no tiene oyentes, pero eso cambiará cuando añadas suscriptores para recibir tus mensajes.
¿Qué es un abonado 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 envía a todas las personas de 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 da flexibilidad a la hora de procesar tus mensajes. A continuación enumeraré los principales tipos:
- Direcciones de correo electrónico: Envía notificaciones de texto plano directamente a las bandejas de entrada de los correos electrónicos.
- Números SMS: Envía notificaciones por mensaje de texto a teléfonos móviles.
- Colas SQS: Encaminar mensajes a otros servicios de AWS para su posterior procesamiento.
- 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.
- Empuje móvil: Envía notificaciones directamente a las aplicaciones móviles.
Cada tipo de abonado tiene sus propias ventajas y casos de uso. Por ejemplo, el correo electrónico y los SMS son excelentes para los destinatarios humanos, mientras que las colas SQS y las funciones Lambda son mejores para la comunicación entre sistemas.
Paso 1: Añadir un abonado
Ahora que entiendes lo que son los suscriptores, vamos a añadir uno a tu tema. Para este tutorial, utilizaré el correo electrónico, ya que es el más sencillo de configurar.
A continuación te explicamos cómo añadir un suscriptor de correo electrónico a tu tema de SNS:
- 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".
- En el desplegable "Protocolo", selecciona "Correo electrónico".
- En el campo "Punto final", introduce la dirección de correo electrónico que debe recibir las notificaciones.
- Deja todos los demás ajustes en sus valores por defecto.
- Haz clic en "Crear suscripción".
Tu pantalla debería tener este aspecto:
Imagen 5 - Crear una suscripción por correo electrónico
Una vez que hagas clic en "Crear suscripción", AWS añadirá la suscripción a tu tema, pero estará en estado "pendiente de confirmación":
Imagen 6 - Estado pendiente de confirmación
Se trata de una característica de seguridad importante, ya que AWS quiere asegurarse de que el propietario de la dirección de correo electrónico realmente desea recibir estas notificaciones.
Paso 2: Confirmar suscripciones
Después de añadir un suscriptor, éste debe confirmar que desea 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 hayas especificado. El correo electrónico contiene un enlace que el destinatario debe pulsar para activar la suscripción. Hasta que esto ocurra, no se entregará a este punto final ningún mensaje publicado en el tema.
Éste es el aspecto de un típico correo electrónico de confirmación:
Imagen 7 - Correo electrónico de confirmación SNS
El destinatario sólo tiene que hacer clic en el enlace "Confirmar suscripción" del correo electrónico. Accederán a una página que confirma que su suscripción 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 necesitan responder a una solicitud de confirmación de AWS, mientras que los recursos de AWS como las funciones Lambda y las colas SQS pueden configurarse para una confirmación automática.
Puedes comprobar el estado de tus suscripciones haciendo clic en la sección "Suscripciones" de la barra lateral izquierda de la consola SNS. Las suscripciones confirmadas mostrarán el estado "Confirmada", mientras que las que están a la espera de confirmación mostrarán el estado "Pendiente de confirmación".
Imagen 9 - Estado de la suscripción
Una vez confirmada tu suscripción, ¡ya puedes empezar a enviar mensajes! Cualquier mensaje publicado en el tema será entregado a todos los suscriptores confirmados utilizando su protocolo especificado.
Eso es todo lo que hay que hacer para configurar las suscripciones SNS. En la siguiente sección, aprenderás a publicar mensajes en tu tema y a comprobar que tus suscriptores los reciben correctamente.
Publicar Mensajes en Temas SNS
Ahora que has configurado tu tema SNS y añadido suscriptores, es el momento de enviar tu primera notificación.
Paso 1: Publicar un mensaje
Una buena forma de empezar es publicando un mensaje a través de la consola de AWS.
Para enviar tu primer mensaje, ve a la página de detalles de tu tema y pulsa el botón "Publicar mensaje" en la parte superior derecha (ver Imagen 4). Se abrirá el formulario de publicación de mensajes, donde podrás elaborar 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 electrónico.
Para un simple mensaje de prueba, podrías introducir 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" situado en la parte inferior del formulario:
Imagen 11 - Publicar un mensaje a través de la consola
Tras hacer clic, el 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 por correo electrónico
Sencillo, ¿verdad? Veamos ahora cómo personalizarlo aún más.
Paso 2: Envío de notificaciones por SMS y correo electrónico
SNS te permite personalizar cómo aparecen tus mensajes a los distintos tipos de suscriptores.
Al publicar un mensaje, verás la opción "Estructura del mensaje". Por defecto, está configurado como "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", que te permite adaptar el formato del mensaje para cada tipo de abonado.
Para las notificaciones por correo electrónico, tienes dos opciones de formato:
- Correo electrónico-JSON: Envía la carga útil JSON sin procesar al punto final de correo electrónico.
- Correo electrónico: Envía un correo electrónico formateado con el asunto y el 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. Los SNS entregarán mensajes más largos, pero serán tratados como mensajes múltiples. También puedes establecer el tipo de mensaje SMS en "Promocional" o "Transaccional", lo que afecta a la optimización de la entrega:
Imagen 14 - Opciones de SMS
Ahora ya sabes cómo enviar y personalizar notificaciones por correo electrónico a través de la consola de AWS. A continuación, aprenderás a hacer lo mismo mediante la CLI y Python.
Paso 3: Utilizar la CLI o el SDK de AWS para publicar mensajes
La consola está muy bien para hacer pruebas manuales, pero en el mundo real, querrás publicar mensajes mediante programación.
La interfaz de línea de comandos (CLI) de AWS facilita el envío de mensajes SNS desde tu terminal o scripts de automatización.
Suponiendo que tienesla CLI de AWS 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 la CLI de AWS
En un instante, verás un mensaje similar en tu bandeja de entrada:
Imagen 16 - Publicación de mensajes a través de la CLI de AWS (2)
Para aplicaciones más avanzadas, los SDK de AWS proporcionan acceso programático al SNS en muchos lenguajes de programación.
He aquí un ejemplo sencillo para publicar un mensaje utilizando Python con la biblioteca boto3
:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic ARN (Amazon Resource Name)
topic_arn = "sns-arn"
# Publish a simple message
response = sns_client.publish(
TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification"
)
# Check if the message was sent successfully
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 llega 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 que hacer para publicar mensajes con SNS! Ahora tienes varias formas de enviar notificaciones, desde la sencilla interfaz de consola hasta la publicación programática con la CLI o el SDK de AWS.
> ¿Eres nuevo en AWS Boto en Python? Inscríbete en nuestro curso para dominarlo en poco tiempo.
En la siguiente sección, exploraremos algunas funciones avanzadas de SNS que llevarán tus notificaciones al siguiente nivel.
Funciones SNS avanzadas
Hasta ahora, has aprendido lo básico de las SNS. En esta sección, verás un par de funciones avanzadas que hacen que los SNS sean realmente potentes.
Filtrado de mensajes SNS
Enviar la misma notificación a todos los suscriptores suele provocar que los puntos finales reciban mensajes que no les interesan.
El filtrado de mensajes resuelve este problema permitiendo a los suscriptores filtrar los mensajes que reciben en función de los atributos del mensaje. Piénsalo como si configuraras filtros de correo electrónico: creas reglas que determinan qué mensajes pasan. Para SNS, estas reglas se llamanpolíticas de filtro .
Para empezar, puedes establecer políticas de filtrado en tus suscripciones para que sólo reciban mensajes relevantes:
Imagen 19 - Políticas del filtro de notificaciones
En este ejemplo, el suscriptor sólo recibirá notificaciones de los mensajes que tengan un atributo order_value
con un valor numérico igual o superior a 1500.
Ahora, para enviar dicha notificación, puedes utilizar el siguiente código Python:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic 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)
Esto es lo que verás después de ejecutar el script de Python:
Imagen 20 - Enviar una notificación a través de Python
Sólo si el valor de order_value
es igual o superior a 1500, recibirás la notificación:
Imagen 21 - Contenido de la notificación
En resumen, las políticas de filtro te permiten enviar notificaciones específicas sin cambiar tu código de publicación. Lo mejor es que el filtrado se produce en el lado de AWS, no en tu aplicación, lo que mejora la eficiencia y reduce el tráfico innecesario.
Colas de letras muertas SNS (DLQ)
La entrega de mensajes a veces puede fallar incluso con los sistemas más fiables.
Una cola de letra muerta (DLQ) es una cola especial de Amazon SQS donde los SNS pueden enviar mensajes que no han podido ser entregados a sus suscriptores. Esto suele ocurrir cuando un abonado no está disponible o devuelve un error. En lugar de perder para siempre estos mensajes fallidos, SNS los redirige al DLQ, donde puedes analizarlos más tarde o reintentar la entrega.
Configurar un DLQ implica dos pasos. Primero, crea una cola SQS que sirva como tu DLQ:
Imagen 22 - Crear una cola SQS
A continuación, configura tu suscripción SNS para que utilice esta cola para los mensajes no entregados:
Imagen 23 - Añadir la política de redrive 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 configurar esto mediante una simple casilla de verificación, pero si utilizas CloudFormation u otras herramientas de infraestructura como código, tendrás que añadir los permisos IAM adecuados.
Con un DLQ en funcionamiento, puedes controlar los fallos de entrega y tomar medidas cuando sea necesario. Por ejemplo, puedes configurar una alarma que se active cuando empiecen a aparecer mensajes en tu DLQ, alertándote de posibles problemas con tus suscriptores, pero eso está fuera del alcance de esta sección.
Uso de AWS Lambda con SNS
Las funciones lambda abren un mundo de posibilidades para procesar mensajes 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 se escala automáticamente en función del volumen de mensajes.
Para empezar, crea primero una función Lambda:
Imagen 24 - Crear una función Lambda
Luego, rellénalo con un código similar a éste:
def lambda_handler(event, context):
# SNS messages come in the 'Records' array
for record in event["Records"]:
# Extract the message
message = record["Sns"]["Message"]
subject = record["Sns"]["Subject"]
timestamp = record["Sns"]["Timestamp"]
# Process the message
print(f"Received message: {message}")
print(f"Subject: {subject}")
print(f"Timestamp: {timestamp}")
# Your business logic here
# For example, store the message in a database
# or trigger another AWS service
print("ALL DONE!")
# Return success
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 "Añadir activador" para conectar la función Lambda al 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 monitorizar los registros, lo que significa que puedes ver las invocaciones recientes a la función, el resultado de enviar una notificación:
Imagen 28 - Registros de la función 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 API externas. Esto hace que SNS y Lambda sean una potente combinación para construir arquitecturas basadas en eventos. Puedes obtener más información sobre las funciones Lambda en el tutorial Introducción a AWS Lambda.
A continuación, aprenderás los fundamentos de la monitorización y el registro del SNS.
Supervisión y registro de la actividad del SNS
Hacer un seguimiento de tu actividad en SNS es esencial para mantener un sistema de notificaciones fiable.
Uso de Amazon CloudWatch con SNS
Amazon CloudWatch proporciona una monitorización completa de todos tus servicios AWS, SNS incluido. Cuando configuras CloudWatch con SNS, obtienes visibilidad de métricas operativas importantes como las tasas de entrega de mensajes, los fallos y los patrones de uso de la API.
Para comenzar con la monitorización de CloudWatch para SNS, navega a la consola de CloudWatch en tu cuenta de AWS. Desde ahí, puedes acceder a las métricas SNS preconfiguradas que AWS recopila automáticamente por ti.
Las métricas SNS más valiosas que hay que monitorizar incluyen:
- NúmeroDeMensajesPublicados: Registra cuántos mensajes se publican en tus temas.
- NúmeroDeNotificacionesEntregadas: Muestra las entregas satisfactorias de mensajes a los suscriptores.
- NúmeroDeNotificaciones Fallidas: Destaca los intentos de entrega fallidos, que podrían indicar problemas de configuración.
- PublicarTamaño: Mide el tamaño de los mensajes publicados, ayudándote a mantenerte dentro de los límites del servicio.
Imagen 29 - Cuadro de mandos predeterminado de Cloudwatch para SNS
Configurar las alarmas de CloudWatch te permite responder rápidamente a posibles problemas antes de que afecten a tus usuarios. Por ejemplo, puedes querer crear una alarma que se dispare cuando los fallos en la entrega de mensajes superen un determinado umbral:
- En la consola de CloudWatch, ve a la sección "Alarmas".
- Haz clic en "Crear alarma" y selecciona la métrica SNS que quieres controlar.
- Define tu umbral (por ejemplo, más de 5 entregas fallidas en 5 minutos).
- Configura acciones de notificación, como enviar una alerta a un equipo de operaciones.
Si prefieres las imágenes a las instrucciones, empieza creando una alarma para una métrica de interés, como NumberOfNotificationsFailed
. Establece los umbrales que activarán la alarma:
Imagen 30 - Creación de la alarma
Y ya está: la alarma ya está creada y activa:
Imagen 31 - Creación de alarmas (2)
Estas alarmas pueden ser la diferencia entre abordar un problema de forma proactiva y enterarse por usuarios descontentos.
Revisar los registros del 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 SNS -ya sea a través de la consola, CLI o SDK- genera una entrada en los logs de CloudTrail. Estos registros proporcionan información valiosa para el análisis de seguridad, el seguimiento de cambios en los recursos y la auditoría de cumplimiento.
Para acceder a los registros SNS en CloudTrail:
- Abre la consola CloudTrail en tu cuenta de AWS (es probable que tengas que crear una nueva ruta).
- Navega hasta "Historial de eventos" para ver la actividad SNS reciente.
- Filtra los eventos seleccionando "Origen del evento" y escribiendo "sns.amazonaws.com".
Una vez más, si las instrucciones de texto no son suficientes, consulta las imágenes que aparecen a continuación. Empieza creando un nuevo sendero:
Imagen 32 - Crear un nuevo sendero
A continuación, en "Historial de eventos", filtra los eventos para incluir sólo los de SNS:
Imagen 33 - Filtrar 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 work? Lee nuestra guía sobre S3 y EFS.
Para concluir, al combinar las métricas de CloudWatch con los registros de CloudTrail, creas un sistema de supervisión completo que te ayuda a garantizar que tu infraestructura SNS funciona de forma fiable.
Mejores prácticas para utilizar AWS SNS
Ahora ya 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.
Proteger los temas del SNS
La seguridad debe ser una prioridad máxima a la hora de configurar tu infraestructura SNS. Sin los controles adecuados, tus temas podrían ser vulnerables a accesos no autorizados, lo que supone un enorme riesgo para la seguridad.
AWS Identity and Access Management (IAM) proporciona las herramientas que necesitas para asegurar tus temas SNS. Empieza por crear políticas que sigan el principio del menor privilegio: sólo concede los permisos específicos necesarios para cada usuario o servicio. Por ejemplo, puede que quieras que algunas aplicaciones sólo publiquen mensajes, mientras que otras sólo necesiten suscribirse a temas.
Aquí tienes un ejemplo de política IAM que restringe la publicación a un tema concreto:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "sns-arn"
}
]
}
También puedes utilizar políticas de temas para controlar qué cuentas de AWS pueden suscribirse a tus temas. Esto es especialmente importante si compartes datos más allá de los límites de la organización.
No olvides auditar periódicamente los permisos mediante AWS CloudTrail y eliminar los accesos que ya no sean necesarios.
Gestionar el volumen de mensajes
Un gran volumen de mensajes puede abrumar a los abonados si no se gestiona adecuadamente. Aquí es donde resulta esencial combinar SNS con otros servicios de AWS.
Un patrón popular es la arquitectura "fanout", en la que publicas mensajes en un tema SNS que tiene varias colas SQS suscritas a él. Así, cada cola puede alimentar a su ritmo los distintos sistemas de procesamiento. Esto desvincula a tus editores de tus consumidores, y proporciona un amortiguador durante los picos de tráfico.
Para necesidades de procesamiento en tiempo real, considera suscribir funciones Lambda a tus temas. Lambda escala automáticamente con tu volumen de mensajes, eliminando la necesidad de aprovisionar y gestionar servidores.
Reducir costes
Aunque el SNS es rentable, los gastos pueden acumularse rápidamente a medida que crece tu volumen de mensajes. Unas cuantas decisiones estratégicas pueden ayudarte a mantener tus gastos bajo control.
En primer lugar, sé selectivo con tus protocolos de suscripción. Los puntos finales HTTP/HTTPS suelen ser la opción más rentable. Las notificaciones por correo electrónico, aunque cómodas, deben utilizarse con criterio, ya que suponen un mayor coste por mensaje.
El filtrado de mensajes es otra potente herramienta de ahorro. Implementando políticas de filtrado en tus suscripciones, te aseguras de que los mensajes sólo se entregan a los suscriptores interesados. Por ejemplo, si tienes un tema para todas las alertas del sistema, puede que quieras que tus ingenieros de guardia reciban sólo las alertas críticas durante su turno, no todas las notificaciones:
# Subscribe with a filter policy
response = sns.subscribe(
TopicArn="sns-arn",
Protocol="email",
Endpoint="oncall@example.com",
Attributes={"FilterPolicy": '{"severity": ["critical"]}'},
)
Por último, revisa regularmente tu uso de SNS en el Explorador de Costes de AWS y busca oportunidades para consolidar temas o eliminar suscripciones no utilizadas. Los recursos no utilizados o duplicados no sólo añaden costes innecesarios, sino que también complican tu arquitectura.
Si sigues estas prácticas recomendadas, crearás una implementación del SNS que sea segura, escalable y rentable: todo lo que necesitas para tener un servicio de notificaciones fiable sin gastos inesperados ni problemas de seguridad.
Resumiendo AWS SNS
Si necesitas notificaciones en tiempo real a través de aplicaciones distribuidas, no busques más allá de AWS SNS. Es fácil de usar, se integra bien con otros servicios de AWS y se escala infinitamente para adaptarse a tus necesidades.
El modelo de publicación-suscripción en SNS hace que sea sencillo implantar sistemas de notificación que puedan llegar a varios 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 correo no deseado, ahora dispones de los conocimientos necesarios para crear una sólida infraestructura de notificaciones.
También has aprendido sobre los aspectos críticos de la supervisión, la seguridad y la gestión de costes que garantizan que tu implementación del SNS siga siendo fiable y eficiente en entornos de producción.
A medida que las aplicaciones siguen adoptando arquitecturas basadas en eventos, servicios como SNS adquieren cada vez más valor. Tanto si estás construyendo un sencillo sistema de alertas como microservicios complejos, los patrones de este tutorial proporcionan una base para una comunicación eficaz entre los componentes de tu sistema.
Para saber más sobre AWS, sigue estos cursos de DataCamp:
Incluso puedes utilizar DataCamp para preparar los exámenes de certificación de AWS: AWS Cloud Practitioner (CLF-C02).
Preguntas frecuentes
¿Qué es AWS SNS y en qué se diferencia de SQS?
AWS SNS (Simple Notification Service) es un servicio de mensajería totalmente administrado que te permite enviar notificaciones de editores a múltiples suscriptores. A diferencia del SQS (Simple Queue Service), que sigue un modelo basado en colas en el que cada mensaje es procesado por un único consumidor, el SNS utiliza un modelo de publicación-suscripción que difunde un único mensaje a muchos destinatarios simultáneamente. Esta diferencia fundamental hace que SNS sea ideal para las notificaciones de eventos y que SQS sea más adecuado para el procesamiento de tareas.
¿Qué tipos de puntos finales pueden suscribirse a temas SNS?
AWS SNS admite una amplia gama de puntos finales de suscriptores, como direcciones de correo electrónico, números de teléfono SMS, colas SQS, funciones Lambda, puntos finales HTTP/HTTPS y notificaciones push móviles. Esta variedad te da flexibilidad en la forma en que se entregan y procesan tus notificaciones, permitiéndote llegar tanto a destinatarios humanos (por correo electrónico o SMS) como a otros sistemas (a través de Lambda, SQS o puntos finales HTTP) con el mismo mensaje publicado.
¿Cómo protejo mis temas del SNS?
Asegurar los temas del SNS implica implantar controles de acceso adecuados mediante políticas IAM que sigan el principio del mínimo privilegio. Puedes restringir quién puede publicar en temas y gestionar suscripciones, y utilizar políticas de temas para controlar qué cuentas de AWS pueden suscribirse. Para los datos sensibles, AWS SNS admite el cifrado del lado del servidor para proteger el contenido de los mensajes durante la transmisión. Las auditorías de seguridad periódicas utilizando los registros de CloudTrail ayudan a identificar cualquier intento de acceso no autorizado o vulnerabilidad potencial en tu implementación del SNS.
¿Cómo puedo implementar el filtrado de mensajes en SNS?
El filtrado de mensajes en SNS permite a los suscriptores recibir sólo las notificaciones que les interesan. Esto se consigue mediante políticas de filtrado que los suscriptores definen basándose en los atributos de los mensajes. Cuando publicas mensajes con atributos específicos (como valor de pedido, región o nivel de prioridad), SNS compara estos atributos con la política de filtrado de cada suscriptor y sólo entrega el mensaje si hay alguna coincidencia. El filtrado se produce en el lado de AWS y no en tu aplicación, lo que mejora la eficiencia y reduce el tráfico innecesario de mensajes.
¿Cómo funcionan las colas de letras muertas (DLQ) con SNS?
Las Colas de Cartas Muertas actúan como una red de seguridad para los fallos de entrega de mensajes en los SNS. Cuando un mensaje no puede entregarse a un suscriptor (normalmente debido a que el suscriptor no está disponible o devuelve un error), SNS puede redirigirlo a una cola SQS designada en lugar de perderlo por completo. Este sistema DLQ te permite capturar, analizar y, potencialmente, reintentar las entregas fallidas. Es especialmente valioso para las notificaciones de misión crítica, en las que la pérdida de mensajes podría tener repercusiones empresariales significativas, ya que proporciona visibilidad de los problemas de entrega que, de otro modo, podrían pasar desapercibidos.
Aprende más sobre AWS con estos cursos
Curso
AWS Cloud Technology and Services Concepts
Curso
AWS Security and Cost Management Concepts
blog
Los 13 mejores proyectos de AWS: De principiante a profesional
blog
AWS Certified Cloud Practitioner: guía completa

Srujana Maddula
13 min
Tutorial
Primeros pasos con AWS Athena: Guía práctica para principiantes

Tim Lu
15 min
Tutorial
Guía para principiantes sobre la ingeniería de avisos ChatGPT
Tutorial
Sinapsis Azure: Guía paso a paso para principiantes
Tutorial
Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Anneleen Rummens
11 min