DEV Community

Steven Fernández
Steven Fernández

Posted on

Implementando el patrón SNS SQS Fan-out en AWS con Terraform

Introducción

Desde hace mucho tiempo tuve la intención de comenzar a aportar activamente a la comunidad tecnológica, especialmente a la comunidad de AWS, como una forma de retribuir el valioso apoyo, conocimiento y experiencias que muchos profesionales comparten día a día.

Este artículo y el repositorio que lo acompaña nacen con ese objetivo: compartir una implementación clara y reusable del patrón SNS → SQS Fan-out en AWS, utilizando Terraform como Infrastructure as Code (IaC), y dejarla disponible para que otros puedan aprender, reutilizarla o mejorarla.


¿Por qué el patrón Fan-out es importante?

En arquitecturas modernas orientadas a eventos, uno de los desafíos más comunes es desacoplar productores y consumidores sin perder escalabilidad ni flexibilidad.

En integraciones tradicionales punto a punto:

  • Cada nuevo consumidor incrementa la complejidad
  • Los productores quedan fuertemente acoplados
  • Los cambios generan alto impacto

El patrón Fan-out permite:

  • Publicar eventos una sola vez
  • Distribuirlos a múltiples consumidores
  • Escalar de manera independiente
  • Aislar fallos entre sistemas downstream

SNS y SQS como base del Fan-out en AWS

Amazon SNS actúa como el broker de eventos, mientras que Amazon SQS permite que cada consumidor procese mensajes de forma independiente y confiable.

Esta combinación ofrece:

  • Fan-out nativo
  • Filtrado de mensajes por suscripción
  • Alta durabilidad y disponibilidad
  • Desacoplamiento total entre productores y consumidores

Visión general de la arquitectura

Flujo de alto nivel

  1. Un productor publica un mensaje en un SNS Topic
  2. SNS evalúa las políticas de filtrado configuradas
  3. El mensaje se distribuye a una o más colas SQS
  4. Cada consumidor procesa los mensajes de forma independiente

Arquitectura general


Diseño con Terraform (Infrastructure as Code)

La solución está completamente implementada usando Terraform, permitiendo versionar, auditar y reproducir la infraestructura de manera consistente.

Enfoque modular

  • Root module: orquesta el patrón Fan-out
  • Módulo SNS: crea y configura el Topic
  • Módulo SQS: crea las colas y políticas

Este enfoque facilita la reutilización y extensión del patrón en otros proyectos.


Decisiones de diseño relevantes

Algunas decisiones clave tomadas en este proyecto:

  • Uso de Amazon SNS en lugar de EventBridge para mantener simplicidad y foco en el patrón
  • Soporte para colas Standard y FIFO
  • Naming consistente basado en entorno, proyecto y funcionalidad
  • Filtrado de mensajes mediante subscription filter policies

Buenas prácticas AWS aplicadas

  • Arquitectura desacoplada y orientada a eventos
  • Infrastructure as Code
  • Diseño modular
  • Validaciones en variables Terraform

Casos de uso comunes

Este patrón es común en escenarios como:

  • Detección de fraude
  • Notificaciones
  • Auditoría y logging
  • Integración entre microservicios
  • Procesamiento asíncrono

Repositorio GitHub

El código fuente está disponible públicamente:

🔗 Repositorio: https://github.com/auztinorix/terraform-aws-sns-sqs-fanout


Consideraciones para producción

Para un uso en producción se recomienda:

  • Configurar un backend remoto de Terraform
  • Implementar monitoreo con CloudWatch
  • Revisar políticas IAM bajo el principio de menor privilegio
  • Evaluar costos según volumen de mensajes

Cierre

Este proyecto representa un primer paso en mi objetivo de contribuir de forma constante a la comunidad AWS, compartiendo soluciones reales y aplicables basadas en experiencias de arquitectura.

Espero que este aporte sea útil y, sobre todo, que motive a otros a compartir su conocimiento con la comunidad 🚀

Top comments (0)