<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Steven Fernández</title>
    <description>The latest articles on DEV Community by Steven Fernández (@auztinorix).</description>
    <link>https://dev.to/auztinorix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1347402%2F90f5abc4-d913-4fbb-b7e4-b75f032a53d4.png</url>
      <title>DEV Community: Steven Fernández</title>
      <link>https://dev.to/auztinorix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/auztinorix"/>
    <language>en</language>
    <item>
      <title>Implementando el patrón SNS SQS Fan-out en AWS con Terraform</title>
      <dc:creator>Steven Fernández</dc:creator>
      <pubDate>Tue, 13 Jan 2026 22:15:25 +0000</pubDate>
      <link>https://dev.to/auztinorix/implementando-el-patron-sns-sqs-fan-out-en-aws-con-terraform-1i24</link>
      <guid>https://dev.to/auztinorix/implementando-el-patron-sns-sqs-fan-out-en-aws-con-terraform-1i24</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

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

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




&lt;h2&gt;
  
  
  ¿Por qué el patrón Fan-out es importante?
&lt;/h2&gt;

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

&lt;p&gt;En integraciones tradicionales punto a punto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cada nuevo consumidor incrementa la complejidad&lt;/li&gt;
&lt;li&gt;Los productores quedan fuertemente acoplados&lt;/li&gt;
&lt;li&gt;Los cambios generan alto impacto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El patrón Fan-out permite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publicar eventos una sola vez&lt;/li&gt;
&lt;li&gt;Distribuirlos a múltiples consumidores&lt;/li&gt;
&lt;li&gt;Escalar de manera independiente&lt;/li&gt;
&lt;li&gt;Aislar fallos entre sistemas downstream&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  SNS y SQS como base del Fan-out en AWS
&lt;/h2&gt;

&lt;p&gt;Amazon SNS actúa como el &lt;strong&gt;broker de eventos&lt;/strong&gt;, mientras que Amazon SQS permite que cada consumidor procese mensajes de forma independiente y confiable.&lt;/p&gt;

&lt;p&gt;Esta combinación ofrece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fan-out nativo&lt;/li&gt;
&lt;li&gt;Filtrado de mensajes por suscripción&lt;/li&gt;
&lt;li&gt;Alta durabilidad y disponibilidad&lt;/li&gt;
&lt;li&gt;Desacoplamiento total entre productores y consumidores&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Visión general de la arquitectura
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Flujo de alto nivel
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Un productor publica un mensaje en un SNS Topic&lt;/li&gt;
&lt;li&gt;SNS evalúa las políticas de filtrado configuradas&lt;/li&gt;
&lt;li&gt;El mensaje se distribuye a una o más colas SQS&lt;/li&gt;
&lt;li&gt;Cada consumidor procesa los mensajes de forma independiente&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluw7one45vqwf3wm1lvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluw7one45vqwf3wm1lvq.png" alt="Arquitectura general" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Diseño con Terraform (Infrastructure as Code)
&lt;/h2&gt;

&lt;p&gt;La solución está completamente implementada usando &lt;strong&gt;Terraform&lt;/strong&gt;, permitiendo versionar, auditar y reproducir la infraestructura de manera consistente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enfoque modular
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Root module: orquesta el patrón Fan-out&lt;/li&gt;
&lt;li&gt;Módulo SNS: crea y configura el Topic&lt;/li&gt;
&lt;li&gt;Módulo SQS: crea las colas y políticas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este enfoque facilita la reutilización y extensión del patrón en otros proyectos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decisiones de diseño relevantes
&lt;/h2&gt;

&lt;p&gt;Algunas decisiones clave tomadas en este proyecto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uso de Amazon SNS en lugar de EventBridge para mantener simplicidad y foco en el patrón&lt;/li&gt;
&lt;li&gt;Soporte para colas &lt;strong&gt;Standard y FIFO&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Naming consistente basado en entorno, proyecto y funcionalidad&lt;/li&gt;
&lt;li&gt;Filtrado de mensajes mediante &lt;strong&gt;subscription filter policies&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Buenas prácticas AWS aplicadas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Arquitectura desacoplada y orientada a eventos&lt;/li&gt;
&lt;li&gt;Infrastructure as Code&lt;/li&gt;
&lt;li&gt;Diseño modular&lt;/li&gt;
&lt;li&gt;Validaciones en variables Terraform&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Casos de uso comunes
&lt;/h2&gt;

&lt;p&gt;Este patrón es común en escenarios como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detección de fraude&lt;/li&gt;
&lt;li&gt;Notificaciones&lt;/li&gt;
&lt;li&gt;Auditoría y logging&lt;/li&gt;
&lt;li&gt;Integración entre microservicios&lt;/li&gt;
&lt;li&gt;Procesamiento asíncrono&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Repositorio GitHub
&lt;/h2&gt;

&lt;p&gt;El código fuente está disponible públicamente:&lt;/p&gt;

&lt;p&gt;🔗 Repositorio: &lt;a href="https://github.com/auztinorix/terraform-aws-sns-sqs-fanout" rel="noopener noreferrer"&gt;https://github.com/auztinorix/terraform-aws-sns-sqs-fanout&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Consideraciones para producción
&lt;/h2&gt;

&lt;p&gt;Para un uso en producción se recomienda:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configurar un backend remoto de Terraform&lt;/li&gt;
&lt;li&gt;Implementar monitoreo con CloudWatch&lt;/li&gt;
&lt;li&gt;Revisar políticas IAM bajo el principio de menor privilegio&lt;/li&gt;
&lt;li&gt;Evaluar costos según volumen de mensajes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cierre
&lt;/h2&gt;

&lt;p&gt;Este proyecto representa un primer paso en mi objetivo de &lt;strong&gt;contribuir de forma constante a la comunidad AWS&lt;/strong&gt;, compartiendo soluciones reales y aplicables basadas en experiencias de arquitectura.&lt;/p&gt;

&lt;p&gt;Espero que este aporte sea útil y, sobre todo, que motive a otros a compartir su conocimiento con la comunidad 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>architecture</category>
      <category>community</category>
    </item>
  </channel>
</rss>
