Blog de HAQM Web Services (AWS)
Implementación de mensajería multicanal con HAQM SES y HAQM SNS
Por Hugo Dominguez, Arquitecto de Soluciones Sr. de HAQM Web Services (AWS).
Actualmente las organizaciones enfrentan el desafío de gestionar comunicaciones masivas con sus clientes a través de múltiples canales, mientras mantienen la consistencia, escalabilidad y confiabilidad de sus sistemas. Empresas de distintas industrias necesitan enviar desde notificaciones transaccionales críticas hasta campañas de marketing personalizadas, procesando millones de mensajes diarios sin comprometer la experiencia del usuario ni la integridad de la información.
En este artículo, presentaremos una solución arquitectónica que utiliza el poder de varios servicios de AWS para crear un sistema de mensajería basado en eventos que aborda estos desafíos de manera eficiente.
Descripción de la arquitectura
Imagen 1: Arquitectura de la solución
Esta solución implementa una arquitectura de mensajería empresarial utilizando HAQM EventBridge como message broker central. Esta implementación permite un desacoplamiento efectivo entre productores y consumidores de eventos.
La arquitectura incorpora varios patrones de mensajería esenciales. El Message Channel Pattern se implementa mediante HAQM Simple Queue Service, que actúa como buffer y garantiza la entrega confiable de mensajes. El Message Router Pattern se materializa a través de EventBridge, que dirige los eventos a sus destinos correspondientes. El Message Translator Pattern se implementa en las funciones AWS Lambda que transforman los mensajes según el canal de destino. Finalmente, el Content-Based Router se realiza mediante las reglas de EventBridge que determinan el enrutamiento basado en el contenido del mensaje.
El flujo de mensajes se gestiona de manera ordenada y eficiente, EventBridge actúa como message broker central, mientras que SQS implementa colas como buffers para garantizar durabilidad, por otro lado las funciones Lambda procesan los mensajes, aplicando transformaciones específicas: para emails recuperan y personalizan plantillas HTML desde HAQM Simple Storage Service usando Handlebars, mientras que para SMS adaptan el contenido según los requisitos del canal.
HAQM Simple Email Service y HAQM Simple Notification Service gestionan la entrega final de las comunicaciones, y HAQM DynamoDB almacena metadatos críticos, como configuraciones de plantillas, preferencias de usuario y registros de envío, permitiendo un acceso rápido y consistente a esta información.
Esta arquitectura asíncrona es un modelo de diseño que permite la ejecución de operaciones de forma no bloqueante, donde los procesos pueden continuar su ejecución mientras esperan que otras tareas se completen, mejorando así la eficiencia y capacidad de respuesta del sistema.
Revisaremos beneficios en cuatro áreas principales:
- En términos de desacoplamiento, los servicios pueden evolucionar independientemente, se reducen las dependencias directas entre componentes y se logra una mayor facilidad de mantenimiento y actualización.
- Respecto a la resiliencia, el sistema ofrece tolerancia a fallos mediante buffers de mensajes, capacidad de recuperación ante interrupciones y un manejo efectivo de picos de carga.
- En el aspecto de escalabilidad, se obtiene procesamiento paralelo de mensajes, capacidad de escalar componentes individualmente y una mejor gestión de cargas variables.
- En cuanto a flexibilidad, la arquitectura permite una fácil incorporación de nuevos canales de comunicación, adaptabilidad a cambios en requisitos de negocio y simplicidad para añadir nuevos consumidores de eventos.
Esta implementación aprovecha patrones de mensajería modernos en la nube, creando un sistema robusto y escalable que responde a las necesidades actuales y facilita futuras expansiones.
Implementación
La implementación de esta arquitectura se realiza utilizando AWS CDK (Cloud Development Kit), lo que nos permite definir nuestra infraestructura como código utilizando TypeScript. Este enfoque proporciona beneficios significativos en términos de reproducibilidad, mantenimiento y control de versiones.
Pre-requisitos
Clonar el código de la solución desde Github:
git clone http://github.com/aws-samples/sample-serverless-messaging-hub.git
Para inicializar un proyecto con AWS CDK, debemos tener en cuenta lo siguiente.
Configuración dentro de la consola de AWS:
Registro de identidades en HAQM SES
Para poder enviar o recibir correos necesitamos verificar las identidades en HAQM SES, estas pueden ser dirección de correo electrónico o un dominio, para el desarrollo de este blog usaremos solo la dirección de correo electrónico, para ello seguiremos los siguientes pasos.
Primero, iremos a la consola de AWS y buscaremos el servicio HAQM SES, en el servicio iremos a la opción Identities, dentro de Configuration, luego buscamos el botón Create Identity y haremos clic sobre el.
Imagen 2: Consola de HAQM SES
En la pantalla de crear identidades, elegiremos la opción de Email address y reemplazaremos el valor *****@tudominio.com por el correo a verificar, y daremos clic a Create Identity
Imagen 3: Creación de identidades en HAQM SES
De la dirección no-reply-aws@haqm.com, llegará un correo para verificar la identidad de la dirección de correo, el mensaje tendrá la siguiente apariencia, dentro del correo debemos dar clic al enlace señalado por la flecha negra, para terminar el proceso.
Imagen 4: Correo de verificación de identidad con HAQM SES
Luego de dar clic al enlace, este nos llevará a una pantalla que mostrará el siguiente mensaje:
Imagen 5: Mensaje de verificación satisfactoria con HAQM SES
Para este blog, registraremos dos correos con la finalidad de usar uno como remitente y el otro como receptor, por lo que debemos repetir los mismos pasos con otra dirección de correo.
Registro de número de teléfono celular destino en HAQM SNS
Para poder enviar SMS necesitamos verificar el número de teléfono celular en HAQM SES, para ello seguiremos los siguientes pasos.
Primero, iremos a la consola de AWS y buscaremos el servicio HAQM SNS, en el servicio iremos a la opción Text messaging (SMS), dentro de Mobile, luego buscamos el botón Add phone number y haremos clic.
Imagen 6: Consola de HAQM SNS
En la pantalla de añadir un número de teléfono celular, introducimos el número de teléfono a verificar junto con el código de país, así como el idioma del envío del mensaje de verificación (Para el ejemplo estoy usando un número de teléfono celular de Perú), y daremos clic a Add phone number.
Imagen 7: Añadir número telefónico de celular en HAQM SNS
En la siguiente pantalla, nos solicitará ingresar el código que nos ha debido llegar al celular, el texto del SMS es del tipo:
Código de verificación (entorno de pruebas de AWS SMS Developer): 000000. Este codigo es para pruebas de software y debe ignorarse si se recibe de forma inesperada.
Completamos el campo asociado al código de verificación los números que llegaron en el SMS, para este ejemplo el número es 000000.
Imagen 8: Verificar número telefónico de celular en HAQM SNS
Nota: El blog se desarrolla dentro de la Sandbox, por lo que para aplicar el contenido en un entorno productivo se necesitará iniciar la solicitud de salida de Sandbox en HAQM SES y HAQM SNS.
Despliegue de la solución
Para esta publicación usaremos las variables asociadas al ambiente (environment – env) de sandbox.
La configuración asociada a este ambiente se encuentra en el archivo env-sandbox.yml, en el encontraremos toda la configuración asociada a las variables del ambiente sandbox.
Tener en cuenta que esta configuración de ambientes puede variar, dependiendo del gobierno de cada compañia, por ejemplo, podemos tener ambientes como:
env-development.yml
env-qa.yml
env-production.yml
Imagen 9: Estructura de la solución en CDK.
Ahora crearemos un parámetro con la ayuda del servicio AWS System Manager – Parameter Store, para ello ejecutaremos el siguiente comando:
aws ssm put-parameter --name "/sandbox/account" --value "111111111111" --type String
Cambiar el valor del parámetro por la cuenta AWS donde se desea desplegar.
Resultado:
{ "Version": 1, "Tier": "Standard" }
Necesitamos ejecutar cambios en el archivo env-sandbox.yml.
En la sección buckets/htmlStorage debemos cambiar el prefijo del nombre del bucket, ya que el nombre del bucket es único y si lo dejamos con la misma configuración vamos a tener un error en la creación del bucket S3.
Con el archivo .yml modificado, procederemos con los siguientes pasos de despliegue.
Probar el envío de eventos a través de EventBridge:
Antes de ejecutar la prueba, debemos poblar de datos la tabla de HAQM DynamoDB – aws-sandbox-serverless-messaging-templates, con los comandos del siguiente archivo.
Previo a ejecutar el comando debemos cambiar el valor del atributo source, en el ejemplo muestra el valor *******@tudominio.com, este deberá ser cambiado el correo que verificamos en HAQM SES.
Necesitamos también las plantillas HTML que estarán dentro de HAQM S3, para ello copiaremos el contenido ubicado en la ruta: src/aws-lambdas/templates al bucket creado como parte de nuestro stack.
aws s3 cp src/aws-lambdas/templates s3://aws-sandbox-serverless-html-storage/ —recursive
Tener en cuenta que el nombre del bucket será distinto, según el prefijo que hayan asignado en el archivo .yml de configuración.
Vamos con la prueba…
Para la prueba de envío de mensajes tanto a correo electrónico como número de teléfono celular, usaremos el archivo events.json y el atributo detail dentro de la carpeta raíz del repositorio.
El archivo tiene la siguiente estructura, donde:
language es el idioma del mensaje, opciones actuales: en (Inglés) – es (Español).
product son los posibles productos de la organización.
feature es la funcionalidad dentro del producto.
channel es la canalidad a usar, en este caso las opciones son email o sms.
mail es un atributo requerido cuando el canal es email (Modificar según datos registrados).
phoneNumber es un atributo requerido cuando el canal es sms (Modificar según datos registrados).
Primer paso:
Vamos a la consola de AWS y buscaremos el servicio HAQM EventBridge, en el servicio iremos a la opción Event buses, dentro de Buses, luego buscamos el botón Send events y haremos clic.
Imagen 10: Enviar eventos mediante HAQM EventBridge
Segundo paso:
Buscaremos el nombre del bus que creo el proyecto, para este caso aws-sandbox-serverless-messages-bus, en el espacio Event source insertaremos el siguiente texto:
eventbridge.messages
En el espacio Detail type insertaremos el siguiente texto en el caso sea email:
Si la prueba es para SMS:
sms
Luego copiaremos el contenido de nuestro archivo events.json en la caja de texto Event detail, para el envío de email quedaría así:
Imagen 11: Datos asociados al envío de mensajes email mediante HAQM EventBridge
Luego, nos ubicamos en la parte inferior de la pantalla y damos clic al botón Send, luego nos aparecerá un mensaje que el evento fue enviado de forma satisfactoria.
Imagen 12: Mensaje enviado de forma satisfactoria.
Posterior al envío del evento, llegará el mensaje asociado al correo especificado en el Event detail.
El mensaje tendrá la siguiente apariencia:
Imagen 13: Mensaje en inglés enviado con HAQM SES.
Explicación:
Cuando se envía el evento, este inicia el flujo según la arquitectura diseñada en el blog.
Al enviar los información en Event Detail, esta puede ser utilizada por la función Lambda, que, mediante Handlebars iniciará la compilación de la plantilla HTML con los datos enviados.
Para el ejemplo, uno de los datos es {{name}} el cual toma el valor de la información de Event Detail, podemos usar distintas expresiones de la librería Handlebar, según la documentación asociada.
Imagen 14: Plantilla HTML del mensaje en inglés enviado con HAQM SES.
Ahora haremos la prueba del Event Detail para el envío del SMS:
Imagen 15: Datos asociados al envío de mensajes SMS mediante HAQM EventBridge
Notaremos, que tendremos el mismo comportamiento, pero en este caso el texto estará guardado en nuestra base de datos de DynamoDB:
{{name}}, Welcome to AWS Peru Cloud Academy! We're thrilled that you've successfully created your account.
Imagen 16: Mensaje en inglés enviado con HAQM SNS.
Esta sección de implementación proporciona una base sólida para desplegar la arquitectura de mensajería de forma automatizada y reproducible. El uso de AWS CDK nos permite mantener la infraestructura como código, facilitando el versionado, las actualizaciones y el mantenimiento del sistema.
Limpieza de recursos
Dado que la implementación se realizó utilizando AWS CDK, la limpieza de recursos es significativamente más sencilla y segura, para ello seguiremos los siguientes pasos.
Costos asociados
Vamos a realizar un cálculo aproximado de costos mensuales basado en los servicios mostrados en la arquitectura y un envío de 100,000 mensajes mensuales con un tamaño de 5 KB.
- HAQM EventBridge: Con 100,000 eventos: ~$0.10
- HAQM SQS: $0.40 por millón de solicitudes, con 200,000 mensajes (100k x 2 colas): ~$0.08
- AWS Lambda: 100,000 ejecuciones x 2 funciones = 200,000 ejecuciones, asumiendo 128 MB memoria y 2000ms por ejecución – $1.29
- HAQM S3: Almacenamiento: $0.023 por GB, Almacenamiento para las plantillas HTML ~ $0.06
- HAQM SES: $0.10 por 1,000 emails, 100,000 emails: $10.00
- HAQM SNS: SMS: Los costos varían significativamente por país, asumiendo Perú ($0.14578 por SMS), 100,000 SMS: $14,578.00
- HAQM DynamoDB: Costo aproximado mensual: $0.26
El detalle de esta calculadora lo pueden encontrar en este enlace, excepto los costos asociados al envío de SMS mediante HAQM SNS.
Resumen:
Costo mensual sin envío de SMS: $11.79
Costo mensual con envío de SMS: $14,589.79
Es importante destacar que el mayor costo de esta solución está asociado al envío de SMS, por lo que es recomendable evaluar la necesidad del uso para los objetivos del negocio.
Adicional a ello, el envío de mensajes de texto SMS mediante SNS puede ser cambiado por el proveedor de mensajería de su preferencia.
Conclusión
Esta arquitectura de mensajería basada en eventos ofrece una solución Serverless robusta y escalable usando servicios AWS. El sistema es económico al pagar solo por el uso, fácil de mantener y adaptable a futuros requisitos de comunicación. Su implementación puede transformar la comunicación digital de una organización proporcionando una base sólida para innovación y crecimiento.
Sobre el autor
![]() |
Hugo Dominguez es Arquitecto de Soluciones Sr. de HAQM Web Services (AWS), cuenta con amplia experiencia en diseño e implementación de soluciones cloud, Hugo ayuda a empresas latinoamericanas en la adopción estratégica de tecnologías, contribuyendo a la transformación digital del sector empresarial. |
Revisores técnicos
![]() |
Juan Miguel Bermúdez Mieles es arquitecto de soluciones en HAQM Web Services para Sector Público. Juan Miguel apoya a distintas entidades e instituciones públicas en Centro América y el Caribe en la adopción de nuevas tecnologías y prácticas que permitan el mejoramiento de sus servicios. |
![]() |
Rodrigo Cabrera Pliego es Arquitecto de Soluciones Sr. de HAQM Web Services en México para el sector financiero, Rodrigo tiene amplio conocimiento de servicios Serverless en la nube de AWS, arquitecturas distribuidas y modernas, con más de 20 años de experiencia en IT. |
![]() |
Gabriel Paredes es Arquitecto de Soluciones Sr. de HAQM Web Services en Colombia para la industria Financiera. Cuenta con mas de 15 años de experiencia en el sector de TI, donde ha tenido el privilegio de acompañar a múltiples clientes de sector público y privado en su camino de transformación digital mediante el poder del Cloud Computing. Gabriel es especialista en soluciones de AI/ML. |