<?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: Afu Tse (Chainiz)</title>
    <description>The latest articles on DEV Community by Afu Tse (Chainiz) (@chainiz).</description>
    <link>https://dev.to/chainiz</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2992158%2F16abbe92-50ce-496c-b6b8-a42d4697f90e.jpg</url>
      <title>DEV Community: Afu Tse (Chainiz)</title>
      <link>https://dev.to/chainiz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chainiz"/>
    <language>en</language>
    <item>
      <title>AWS presenta Intelligent Tiering para Amazon CloudWatch Logs</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Thu, 16 Jul 2026 16:23:48 +0000</pubDate>
      <link>https://dev.to/chainiz/aws-presenta-intelligent-tiering-para-amazon-cloudwatch-logs-2gj3</link>
      <guid>https://dev.to/chainiz/aws-presenta-intelligent-tiering-para-amazon-cloudwatch-logs-2gj3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon CloudWatch Logs ahora puede mover automáticamente tus logs entre distintos niveles de almacenamiento según su uso, reduciendo costos sin que tengas que administrar reglas de ciclo de vida ni procesos adicionales.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Recientemente, AWS anunció &lt;strong&gt;CloudWatch Logs Intelligent Tiering&lt;/strong&gt;, una nueva funcionalidad que mueve automáticamente los logs entre distintos niveles de almacenamiento según la frecuencia con la que se consultan.&lt;/p&gt;

&lt;p&gt;Puedes consultar todos los detalles en el &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/07/amazon-cloudwatch-intelligent-tiering/" rel="noopener noreferrer"&gt;anuncio oficial de AWS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Su objetivo es simple: &lt;strong&gt;reducir los costos de almacenamiento sin que tengas que administrar manualmente el ciclo de vida de tus logs.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Cómo funcionaba antes?
&lt;/h2&gt;

&lt;p&gt;Hasta ahora, todos los logs permanecían almacenados en el nivel &lt;em&gt;Standard&lt;/em&gt;, sin importar si se consultaban todos los días o si llevaban meses sin usarse.&lt;/p&gt;

&lt;p&gt;Eso obligaba a muchas organizaciones a tomar decisiones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminar logs antes de tiempo para ahorrar dinero.&lt;/li&gt;
&lt;li&gt;Exportarlos a S3 y construir procesos adicionales para consultarlos cuando fueran necesarios.&lt;/li&gt;
&lt;li&gt;Mantener todo en CloudWatch y asumir un mayor costo de almacenamiento.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2iri124h2zzfmyzcsq3p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2iri124h2zzfmyzcsq3p.png" alt="Ciclo Tradicional" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En otras palabras, había un equilibrio entre costo y simplicidad operativa.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Cómo funciona ahora?
&lt;/h2&gt;

&lt;p&gt;Con Intelligent Tiering, CloudWatch analiza automáticamente la frecuencia con la que se consultan los logs.&lt;/p&gt;

&lt;p&gt;El ciclo es completamente automático:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inicio&lt;/strong&gt;: Todos los logs nuevos se almacenan en el nivel &lt;em&gt;Standard&lt;/em&gt;, donde ofrecen el máximo rendimiento para consultas frecuentes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Después de 30 días sin consultas&lt;/strong&gt;: Si un log no ha sido consultado durante 30 días consecutivos, CloudWatch lo mueve automáticamente al nivel &lt;em&gt;Infrequent Access&lt;/em&gt;, optimizando el costo de almacenamiento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Después de 90 días sin consultas&lt;/strong&gt;: Si permanece sin consultas durante 90 días, se traslada automáticamente a &lt;em&gt;Archive Instant Access&lt;/em&gt;, el nivel de almacenamiento de menor costo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Si vuelves a consultar un log archivado&lt;/strong&gt;: CloudWatch lo mueve automáticamente de nuevo al nivel &lt;em&gt;Standard&lt;/em&gt; durante los siguientes 30 días, sin necesidad de realizar ninguna acción manual.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fat1thgoam209ngdu68gv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fat1thgoam209ngdu68gv.png" alt="Ciclo Automatico" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A pesar de estos cambios de almacenamiento, la experiencia para los usuarios prácticamente no cambia.&lt;/p&gt;

&lt;p&gt;Puedes seguir utilizando &lt;strong&gt;CloudWatch Logs Insights&lt;/strong&gt; de la misma forma, independientemente del nivel donde se encuentre el log.&lt;/p&gt;




&lt;h2&gt;
  
  
  Un ejemplo práctico
&lt;/h2&gt;

&lt;p&gt;Imagina una aplicación que genera &lt;strong&gt;500 GB de logs cada día&lt;/strong&gt; y que, por requisitos de auditoría, debe conservarlos durante &lt;strong&gt;180 días&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En seis meses, la aplicación acumularía aproximadamente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;500 GB × 180 días = 90.000 GB&lt;/strong&gt;, es decir, cerca de &lt;strong&gt;90 TB de logs&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El patrón de uso podría ser el siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los logs de los últimos &lt;strong&gt;30 días&lt;/strong&gt; se consultan constantemente para investigar incidentes.&lt;/li&gt;
&lt;li&gt;Los logs de entre &lt;strong&gt;31 y 90 días&lt;/strong&gt; se revisan con poca frecuencia.&lt;/li&gt;
&lt;li&gt;Los logs de entre &lt;strong&gt;91 y 180 días&lt;/strong&gt; solo se consultan durante auditorías o investigaciones excepcionales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Con el modelo tradicional&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Todos los logs permanecerían en el nivel &lt;em&gt;Standard&lt;/em&gt;, aunque la mayoría casi nunca se consultara.&lt;/p&gt;

&lt;p&gt;Tomando como ejemplo una tarifa referencial de &lt;strong&gt;USD 0,03 por GB al mes&lt;/strong&gt;, el costo estimado sería:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;90.000 GB × USD 0,03 = USD 2.700 al mes&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Con Intelligent Tiering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CloudWatch distribuiría automáticamente los logs según su frecuencia de consulta:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel&lt;/th&gt;
&lt;th&gt;Periodo&lt;/th&gt;
&lt;th&gt;Volumen estimado&lt;/th&gt;
&lt;th&gt;Tarifa referencial&lt;/th&gt;
&lt;th&gt;Costo mensual&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Últimos 30 días&lt;/td&gt;
&lt;td&gt;15.000 GB&lt;/td&gt;
&lt;td&gt;USD 0,03/GB&lt;/td&gt;
&lt;td&gt;USD 450&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrequent Access&lt;/td&gt;
&lt;td&gt;Días 31 a 90&lt;/td&gt;
&lt;td&gt;30.000 GB&lt;/td&gt;
&lt;td&gt;USD 0,015/GB&lt;/td&gt;
&lt;td&gt;USD 450&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive Instant Access&lt;/td&gt;
&lt;td&gt;Días 91 a 180&lt;/td&gt;
&lt;td&gt;45.000 GB&lt;/td&gt;
&lt;td&gt;USD 0,005/GB&lt;/td&gt;
&lt;td&gt;USD 225&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El costo total estimado sería:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;USD 450 + USD 450 + USD 225 = USD 1.125 al mes&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Ahorro estimado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comparando ambos modelos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;USD 2.700 − USD 1.125 = USD 1.575 de ahorro mensual&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto representa una reducción aproximada del:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;58 % en el costo de almacenamiento&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Y lo mejor es que todo ocurre automáticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sin exportar logs a Amazon S3.&lt;/li&gt;
&lt;li&gt;Sin restauraciones manuales.&lt;/li&gt;
&lt;li&gt;Sin crear políticas adicionales para mover los datos.&lt;/li&gt;
&lt;li&gt;Sin cambiar la forma habitual de consultar los logs.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0kys426h71xvcpktnlv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0kys426h71xvcpktnlv.png" alt="Ejemplo" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si un auditor necesita revisar información de hace seis meses, ejecuta la consulta y CloudWatch gestiona automáticamente el cambio de nivel.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Las tarifas utilizadas en este ejemplo son ilustrativas. El costo real depende de la región de AWS, el volumen almacenado, las consultas realizadas y las tarifas vigentes de cada nivel.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿Por qué es importante?
&lt;/h2&gt;

&lt;p&gt;No se trata únicamente de ahorrar dinero.&lt;/p&gt;

&lt;p&gt;También reduce la complejidad operativa.&lt;/p&gt;

&lt;p&gt;Muchas empresas construyen pipelines para mover logs entre CloudWatch, S3 o Glacier únicamente para reducir costos.&lt;/p&gt;

&lt;p&gt;Con esta nueva funcionalidad, AWS elimina gran parte de esa administración automática y permite mantener los logs centralizados en CloudWatch. Esto facilita el análisis, acelera la resolución de incidentes (MTTR) y reduce el esfuerzo operativo.  &lt;/p&gt;




&lt;h2&gt;
  
  
  La perspectiva FinOps
&lt;/h2&gt;

&lt;p&gt;Esta es probablemente la parte más interesante.&lt;/p&gt;

&lt;p&gt;Uno de los principios fundamentales de FinOps es:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pagar únicamente por el valor que realmente estás utilizando.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los logs tienen un comportamiento muy predecible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mucho valor durante los primeros días.&lt;/li&gt;
&lt;li&gt;Valor medio durante las primeras semanas.&lt;/li&gt;
&lt;li&gt;Muy poco acceso después de varios meses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intelligent Tiering adapta automáticamente el costo al valor real del dato.&lt;/p&gt;

&lt;p&gt;Además:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No tiene costo adicional por habilitarlo.&lt;/li&gt;
&lt;li&gt;No hay cargos adicionales por las transiciones automáticas entre niveles de almacenamiento.&lt;/li&gt;
&lt;li&gt;Solo pagas el almacenamiento correspondiente al nivel donde se encuentra cada log.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es un buen ejemplo de cómo AWS sigue incorporando capacidades que ayudan a optimizar costos sin aumentar la carga operativa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;CloudWatch Logs Intelligent Tiering es una mejora sencilla, pero con un impacto importante para los equipos de operaciones y FinOps.&lt;/p&gt;

&lt;p&gt;Permite mantener los logs centralizados en CloudWatch mientras optimiza automáticamente los costos de almacenamiento, eliminando la necesidad de crear procesos adicionales para mover o administrar los datos.&lt;/p&gt;

&lt;p&gt;En definitiva, es una funcionalidad que demuestra cómo una buena automatización puede reducir costos, simplificar la operación y permitir que los equipos se enfoquen en generar valor, en lugar de administrar infraestructura.&lt;/p&gt;




&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cwl_intelligent_tier.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cwl_intelligent_tier.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>finops</category>
      <category>cloudwatch</category>
      <category>spanish</category>
    </item>
    <item>
      <title>AWS Lambda MicroVMs: El futuro del cómputo serverless explicado desde cero</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Sat, 04 Jul 2026 22:45:20 +0000</pubDate>
      <link>https://dev.to/chainiz/aws-lambda-microvms-el-futuro-del-computo-serverless-explicado-desde-cero-1bf4</link>
      <guid>https://dev.to/chainiz/aws-lambda-microvms-el-futuro-del-computo-serverless-explicado-desde-cero-1bf4</guid>
      <description>&lt;p&gt;¿Alguna vez escuchaste el término "serverless" y pensaste que era magia negra? No te preocupes, a todos nos pasó. En este artículo vamos a explorar una novedad muy reciente de Amazon Web Services (AWS) que está cambiando las reglas del juego: &lt;strong&gt;Lambda MicroVMs&lt;/strong&gt;. Y lo vamos a hacer sin asumir que ya sabes todo sobre la nube.&lt;/p&gt;




&lt;h2&gt;
  
  
  Primero lo primero: ¿qué es AWS Lambda?
&lt;/h2&gt;

&lt;p&gt;Imagina que tienes una función que convierte una foto a blanco y negro. Con el modelo tradicional, necesitarías un servidor encendido las 24 horas del día esperando que alguien suba una foto, incluso si nadie lo hace en toda la noche.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; resuelve eso con una idea simple: &lt;em&gt;tu código solo corre cuando lo necesita&lt;/em&gt;. No hay servidor esperando. AWS lo enciende, ejecuta tu función, y lo apaga. Tú pagas únicamente por el tiempo que duró la ejecución.&lt;/p&gt;

&lt;p&gt;Suena perfecto, ¿verdad? Y lo es... para muchos casos. Pero tiene un límite importante: &lt;strong&gt;cada función Lambda dura máximo 15 minutos&lt;/strong&gt; y no recuerda nada entre una llamada y la siguiente. Es como un empleado con amnesia total.&lt;/p&gt;




&lt;h2&gt;
  
  
  El problema que nadie había resuelto bien
&lt;/h2&gt;

&lt;p&gt;Con el auge de la inteligencia artificial, aparecieron nuevas necesidades. Pensemos en un asistente de código con IA: el usuario escribe, la IA genera código, y ese código se ejecuta. Todo en tiempo real. Todo en un ambiente seguro.&lt;/p&gt;

&lt;p&gt;¿Cuál es el desafío? Necesitas tres cosas al mismo tiempo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Velocidad&lt;/strong&gt;: el ambiente debe iniciar casi al instante.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aislamiento&lt;/strong&gt;: el código de un usuario no puede tocar el de otro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estado&lt;/strong&gt;: el ambiente debe recordar lo que pasó antes (paquetes instalados, archivos creados, contexto).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hasta hace poco, en AWS tenías que elegir: o velocidad, o aislamiento, o estado. Nunca los tres juntos sin volverse loco gestionando infraestructura.&lt;/p&gt;




&lt;h2&gt;
  
  
  Entra Lambda MicroVMs: lo mejor de tres mundos
&lt;/h2&gt;

&lt;p&gt;El 22 de junio de 2026, AWS anunció &lt;strong&gt;Lambda MicroVMs&lt;/strong&gt;, una nueva primitiva de cómputo que combina exactamente esas tres características.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué es una MicroVM?
&lt;/h3&gt;

&lt;p&gt;Una MicroVM es una &lt;strong&gt;máquina virtual muy pequeña y ligera&lt;/strong&gt;. Piénsala como una computadora completa pero en miniatura, que vive dentro de los servidores de AWS. Cada usuario recibe su propia MicroVM, completamente separada de las demás.&lt;/p&gt;

&lt;p&gt;Está construida sobre &lt;strong&gt;Firecracker&lt;/strong&gt;, una tecnología de código abierto creada por AWS que ya alimenta más de 15 billones de invocaciones de Lambda al mes. No es algo nuevo e inestable; es tecnología probada a escala gigantesca, adaptada para este nuevo uso.&lt;/p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2nt3hsjrlvir37t9ci2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2nt3hsjrlvir37t9ci2.png" alt="opciones-computo" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Las tres superpoderes de Lambda MicroVMs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Aislamiento real (como una VM)
&lt;/h3&gt;

&lt;p&gt;En Lambda tradicional, múltiples funciones pueden compartir el mismo "kernel" del sistema operativo. Es como vivir en un edificio donde todas las habitaciones comparten las mismas tuberías: si algo falla en una, puede afectar a otras.&lt;/p&gt;

&lt;p&gt;Con MicroVMs, &lt;strong&gt;cada sesión tiene su propio kernel, su propia memoria y su propio disco&lt;/strong&gt;. Es como darle a cada usuario su propio apartamento independiente. Lo que pase dentro no puede salir.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Estado persistente (recuerda lo que hiciste)
&lt;/h3&gt;

&lt;p&gt;Lambda tradicional olvida todo cuando termina. MicroVMs no.&lt;/p&gt;

&lt;p&gt;Si instalas una librería de Python, sigue ahí. Si creaste un archivo, sigue ahí. Si entrenaste un modelo pequeño, sigue ahí. &lt;strong&gt;El estado se preserva hasta 8 horas&lt;/strong&gt;, y cuando el usuario no está activo, la MicroVM se "suspende" (como poner en pausa una película) para ahorrar costos.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Inicio casi instantáneo
&lt;/h3&gt;

&lt;p&gt;Las máquinas virtuales tradicionales tardan minutos en arrancar. Las MicroVMs usan una técnica llamada &lt;strong&gt;snapshot&lt;/strong&gt;: en lugar de arrancar desde cero, retoman desde una foto guardada del estado inicial. El resultado es que inician en fracciones de segundo.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Cómo funciona en la práctica?
&lt;/h2&gt;

&lt;p&gt;El flujo es sencillo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Creas una imagen&lt;/strong&gt;: escribes un &lt;code&gt;Dockerfile&lt;/code&gt; con tu app (por ejemplo, una app Flask de Python) y la subes a Amazon S3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS construye la imagen&lt;/strong&gt;: Lambda toma tu Dockerfile, lo ejecuta, y guarda una "foto" del estado del sistema cuando tu app ya está corriendo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lanzas MicroVMs&lt;/strong&gt;: cada usuario que se conecta recibe su propia MicroVM iniciada desde esa foto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La MicroVM se suspende sola&lt;/strong&gt;: si el usuario no hace nada por un tiempo, se pausa automáticamente. Cuando regresa, continúa donde dejó.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cada MicroVM tiene su propia URL con HTTPS, compatible con protocolos modernos como HTTP/2, gRPC y WebSockets.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Para qué sirve esto en el mundo real?
&lt;/h2&gt;

&lt;p&gt;Algunos casos de uso donde MicroVMs brilla:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Asistentes de código con IA&lt;/strong&gt; (como GitHub Copilot o Cursor): la IA genera código y ese código se ejecuta en un sandbox seguro, sin riesgo de que afecte otros usuarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notebooks interactivos&lt;/strong&gt; (como Jupyter): cada científico de datos tiene su propio ambiente con sus paquetes y datos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plataformas de aprendizaje de programación&lt;/strong&gt;: cada estudiante tiene su propio entorno donde puede instalar lo que quiera y romper cosas sin afectar a nadie más.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Análisis de malware&lt;/strong&gt;: ejecutar código potencialmente malicioso en un ambiente completamente aislado y desechable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipelines de CI/CD&lt;/strong&gt;: cada pull request se prueba en su propio ambiente limpio.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lambda Functions vs MicroVMs: ¿cuándo usar cada uno?
&lt;/h2&gt;

&lt;p&gt;No es que uno reemplaza al otro. Son herramientas diferentes para problemas diferentes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situación&lt;/th&gt;
&lt;th&gt;¿Qué usar?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Procesar un webhook de Stripe&lt;/td&gt;
&lt;td&gt;Lambda Function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redimensionar imágenes automáticamente&lt;/td&gt;
&lt;td&gt;Lambda Function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cada usuario necesita su propio sandbox&lt;/td&gt;
&lt;td&gt;Lambda MicroVM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sesiones largas con estado (notebooks, IDEs)&lt;/td&gt;
&lt;td&gt;Lambda MicroVM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ejecutar código generado por IA de forma segura&lt;/td&gt;
&lt;td&gt;Lambda MicroVM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La propia AWS lo resume bien: &lt;em&gt;"Lambda Functions para cargas de trabajo orientadas a eventos; Lambda MicroVMs para aplicaciones multi-tenant que necesitan darle a cada usuario su propio ambiente aislado."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Disponibilidad y precios
&lt;/h2&gt;

&lt;p&gt;Al momento de escribir este artículo, Lambda MicroVMs está disponible en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US East (N. Virginia y Ohio)&lt;/li&gt;
&lt;li&gt;US West (Oregon)&lt;/li&gt;
&lt;li&gt;Asia Pacific (Tokyo)&lt;/li&gt;
&lt;li&gt;Europe (Ireland)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El precio se basa en uso por segundo de vCPU y RAM. Cuando la MicroVM está suspendida, &lt;strong&gt;solo pagas por el almacenamiento del snapshot&lt;/strong&gt;, no por cómputo. Esto lo hace eficiente para sesiones intermitentes.&lt;/p&gt;

&lt;p&gt;Soporta hasta 16 vCPUs, 32 GB de RAM y 32 GB de disco por MicroVM, corriendo sobre arquitectura ARM64 (AWS Graviton).&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusión: ¿por qué importa esto?
&lt;/h2&gt;

&lt;p&gt;Lambda MicroVMs resuelve un problema que se volvió urgente con la IA: cómo ejecutar código de usuarios o de modelos de lenguaje de forma &lt;strong&gt;rápida, segura y con memoria&lt;/strong&gt;, sin que los desarrolladores tengan que convertirse en expertos en virtualización.&lt;/p&gt;

&lt;p&gt;Para ti como estudiante, esto es relevante por dos razones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Es tecnología nueva&lt;/strong&gt;: entenderla ahora te da ventaja cuando este tipo de arquitectura se vuelva el estándar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refleja hacia dónde va la industria&lt;/strong&gt;: el cómputo serverless ya no es solo para funciones simples. Está evolucionando para soportar cargas de trabajo complejas, stateful e impulsadas por IA.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La nube no deja de sorprendernos. Y lo mejor es que nunca es tarde para subirse al tren.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Fuentes y lecturas adicionales
&lt;/h2&gt;

&lt;p&gt;Las siguientes fuentes fueron consultadas para la elaboración de este artículo. Si quieres profundizar, son el punto de partida ideal:&lt;/p&gt;

&lt;h3&gt;
  
  
  Fuentes oficiales de AWS
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Blog oficial&lt;/strong&gt; - Artículo de lanzamiento de Lambda MicroVMs (22 jun. 2026)&lt;br&gt;
&lt;em&gt;"Run isolated sandboxes with full lifecycle control: AWS Lambda introduces MicroVMs"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://aws.amazon.com/blogs/aws/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/aws/run-isolated-sandboxes-with-full-lifecycle-control-aws-lambda-introduces-microvms/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS What's New&lt;/strong&gt; - Anuncio oficial del producto (22 jun. 2026)&lt;br&gt;
&lt;em&gt;"AWS introduces Lambda MicroVMs for isolated execution of user and AI-generated code"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/06/aws-lambda-microvms/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2026/06/aws-lambda-microvms/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Lambda MicroVMs - Página del producto&lt;/strong&gt;&lt;br&gt;
🔗 &lt;a href="https://aws.amazon.com/lambda/lambda-microvms/" rel="noopener noreferrer"&gt;https://aws.amazon.com/lambda/lambda-microvms/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Medios especializados
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Register&lt;/strong&gt; - Cobertura independiente del lanzamiento (23 jun. 2026)&lt;br&gt;
&lt;em&gt;"AWS debuts Lambda MicroVMs with up to 8 hours runtime"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://www.theregister.com/devops/2026/06/23/aws-debuts-lambda-microvms-with-up-to-8-hours-runtime/5260035" rel="noopener noreferrer"&gt;https://www.theregister.com/devops/2026/06/23/aws-debuts-lambda-microvms-with-up-to-8-hours-runtime/5260035&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;InfoQ&lt;/strong&gt; - Análisis técnico detallado (30 jun. 2026)&lt;br&gt;
&lt;em&gt;"AWS Launches Lambda MicroVMs for Isolated Agent and User Code Execution"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://www.infoq.com/news/2026/06/aws-lambda-microvms/" rel="noopener noreferrer"&gt;https://www.infoq.com/news/2026/06/aws-lambda-microvms/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Artículos de la comunidad
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DEV Community&lt;/strong&gt; - Prueba práctica por un AWS Community Builder (24 jun. 2026)&lt;br&gt;
&lt;em&gt;"AWS Lambda MicroVMs: I Tested the New Stateful Serverless Primitive"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://dev.to/aws-builders/aws-lambda-microvms-i-tested-the-new-stateful-serverless-primitive-40jf"&gt;https://dev.to/aws-builders/aws-lambda-microvms-i-tested-the-new-stateful-serverless-primitive-40jf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DEV Community&lt;/strong&gt; - Introducción técnica para desarrolladores (jun. 2026)&lt;br&gt;
&lt;em&gt;"Introducing Lambda MicroVMs - Isolated, Stateful Sandboxes for Running Untrusted Code on AWS"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://dev.to/aws-builders/introducing-lambda-microvms-isolated-stateful-sandboxes-for-running-untrusted-code-on-aws-5chf"&gt;https://dev.to/aws-builders/introducing-lambda-microvms-isolated-stateful-sandboxes-for-running-untrusted-code-on-aws-5chf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Elevata.io&lt;/strong&gt; - Análisis de casos de uso para agentes de IA (jun. 2026)&lt;br&gt;
&lt;em&gt;"AWS Lambda MicroVMs for AI Agents: When to Use Them"&lt;/em&gt;&lt;br&gt;
🔗 &lt;a href="https://elevata.io/en/aws-lambda-microvms-isolated-execution-ai-agents" rel="noopener noreferrer"&gt;https://elevata.io/en/aws-lambda-microvms-isolated-execution-ai-agents&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
      <category>serverless</category>
      <category>cloud</category>
    </item>
    <item>
      <title>De x86 a ARM: la revolución silenciosa hacia una nube más verde en Microsoft Azure</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Sat, 04 Jul 2026 21:36:59 +0000</pubDate>
      <link>https://dev.to/chainiz/de-x86-a-arm-la-revolucion-silenciosa-hacia-una-nube-mas-verde-en-microsoft-azure-5h39</link>
      <guid>https://dev.to/chainiz/de-x86-a-arm-la-revolucion-silenciosa-hacia-una-nube-mas-verde-en-microsoft-azure-5h39</guid>
      <description>&lt;p&gt;Durante más de cuatro décadas, hablar de servidores era prácticamente sinónimo de hablar de &lt;strong&gt;arquitectura x86&lt;/strong&gt;. Desde los primeros servidores empresariales hasta la mayoría de los centros de datos modernos, Intel y AMD han dominado la infraestructura sobre la que funcionan nuestras aplicaciones.&lt;/p&gt;

&lt;p&gt;Sin embargo, algo está cambiando.&lt;/p&gt;

&lt;p&gt;De forma silenciosa, los principales proveedores de nube como Microsoft Azure están incorporando cada vez más procesadores &lt;strong&gt;ARM&lt;/strong&gt; para ejecutar cargas de trabajo modernas.&lt;/p&gt;

&lt;p&gt;¿La razón?&lt;/p&gt;

&lt;p&gt;No es únicamente el rendimiento.&lt;/p&gt;

&lt;p&gt;Es la eficiencia energética.&lt;/p&gt;




&lt;h2&gt;
  
  
  El problema de los centros de datos modernos
&lt;/h2&gt;

&lt;p&gt;Cada vez que desplegamos una máquina virtual o un clúster de Kubernetes en Azure, detrás existe un servidor físico consumiendo energía.&lt;/p&gt;

&lt;p&gt;Ahora imaginemos un centro de datos con cientos de miles de servidores.&lt;/p&gt;

&lt;p&gt;Incluso una pequeña reducción en el consumo eléctrico por servidor representa un ahorro enorme cuando se multiplica por toda la infraestructura.&lt;/p&gt;

&lt;p&gt;Y no solo hablamos de electricidad.&lt;/p&gt;

&lt;p&gt;Menos energía implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;menos calor generado&lt;/li&gt;
&lt;li&gt;menor necesidad de refrigeración&lt;/li&gt;
&lt;li&gt;menores costos operativos&lt;/li&gt;
&lt;li&gt;menor huella de carbono&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por eso la eficiencia energética se ha convertido en un factor estratégico para los hyperscalers (gigantes tecnológicos que poseen y administran infraestructuras de centros de datos masivas a nivel global).&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué diferencia a ARM de x86?
&lt;/h2&gt;

&lt;p&gt;A grandes rasgos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;x86&lt;/strong&gt; utiliza una arquitectura &lt;strong&gt;CISC (Complex Instruction Set Computing)&lt;/strong&gt;, con un conjunto amplio de instrucciones complejas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ARM&lt;/strong&gt; utiliza una arquitectura &lt;strong&gt;RISC (Reduced Instruction Set Computing)&lt;/strong&gt;, basada en instrucciones más simples y optimizadas.&lt;/p&gt;

&lt;p&gt;Esto no significa automáticamente que ARM sea “más rápido”.&lt;/p&gt;

&lt;p&gt;Lo que sí significa es que puede realizar muchas cargas de trabajo consumiendo considerablemente menos energía.&lt;/p&gt;

&lt;p&gt;En otras palabras:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ARM no busca ganar por fuerza bruta.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Busca hacer más con menos.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Por qué ahora?
&lt;/h2&gt;

&lt;p&gt;Hace unos años, ARM estaba asociado principalmente a teléfonos móviles.&lt;/p&gt;

&lt;p&gt;Hoy la situación es muy diferente.&lt;/p&gt;

&lt;p&gt;Las aplicaciones cloud modernas suelen ejecutarse como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;microservicios&lt;/li&gt;
&lt;li&gt;contenedores&lt;/li&gt;
&lt;li&gt;funciones serverless&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;servicios web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas cargas suelen escalar horizontalmente y no siempre necesitan el máximo rendimiento por núcleo.&lt;/p&gt;

&lt;p&gt;En ese escenario, la eficiencia energética se vuelve mucho más importante.&lt;/p&gt;




&lt;h2&gt;
  
  
  ARM en Microsoft Azure
&lt;/h2&gt;

&lt;p&gt;Microsoft ya ofrece máquinas virtuales basadas en &lt;strong&gt;Ampere Altra&lt;/strong&gt;, una familia de procesadores ARM64 diseñada específicamente para centros de datos.&lt;/p&gt;

&lt;p&gt;Entre ellas encontramos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dpsv5&lt;/li&gt;
&lt;li&gt;Dplsv5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas instancias están orientadas a cargas de trabajo como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aplicaciones web&lt;/li&gt;
&lt;li&gt;microservicios&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;.NET 8+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es importante destacar que estas máquinas no reemplazan completamente a las tradicionales basadas en x86.&lt;/p&gt;

&lt;p&gt;Simplemente amplían las opciones disponibles para distintos tipos de aplicaciones.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Cuánto puede ahorrar ARM?
&lt;/h2&gt;

&lt;p&gt;Microsoft no publica el consumo eléctrico exacto de cada máquina virtual, pero sí conocemos información de los procesadores utilizados.&lt;/p&gt;

&lt;p&gt;Según &lt;strong&gt;Ampere Computing&lt;/strong&gt;, sus procesadores para centros de datos pueden ofrecer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hasta &lt;strong&gt;2.5 veces mejor rendimiento por watt&lt;/strong&gt; en determinadas cargas cloud-native&lt;/li&gt;
&lt;li&gt;hasta &lt;strong&gt;50 % menos consumo energético&lt;/strong&gt; para algunas cargas de trabajo comparables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Naturalmente, estos valores dependen del tipo de aplicación y no deben interpretarse como una reducción garantizada para cualquier escenario.&lt;/p&gt;




&lt;h2&gt;
  
  
  El efecto multiplicador
&lt;/h2&gt;

&lt;p&gt;Supongamos un centro de datos con &lt;strong&gt;10.000 servidores&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Si cada servidor lograra ahorrar apenas &lt;strong&gt;100 W&lt;/strong&gt;, el ahorro sería:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 W × 10 000 servidores = 1 MW
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Manteniendo ese ahorro durante un año:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 MW × 24 horas × 365 días = 8 760 MWh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eso representa suficiente energía para abastecer aproximadamente entre 700 y 900 hogares durante un año, dependiendo del consumo promedio de cada región.&lt;/p&gt;

&lt;p&gt;Ahora imaginemos la escala real de Azure, donde existen cientos de miles de servidores distribuidos en decenas de regiones alrededor del mundo.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Significa esto que ARM reemplazará a x86?
&lt;/h2&gt;

&lt;p&gt;No necesariamente.&lt;/p&gt;

&lt;p&gt;Existen muchos escenarios donde x86 continúa siendo la mejor opción.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aplicaciones heredadas (legacy)&lt;/li&gt;
&lt;li&gt;software que solo existe para x86&lt;/li&gt;
&lt;li&gt;determinados motores de bases de datos&lt;/li&gt;
&lt;li&gt;aplicaciones con dependencias específicas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por otro lado, ARM resulta especialmente atractivo para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs REST&lt;/li&gt;
&lt;li&gt;aplicaciones web&lt;/li&gt;
&lt;li&gt;contenedores&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;servicios backend&lt;/li&gt;
&lt;li&gt;aplicaciones desarrolladas con tecnologías modernas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo más probable es que ambas arquitecturas convivan durante muchos años.&lt;/p&gt;




&lt;h2&gt;
  
  
  Más que rendimiento: sostenibilidad
&lt;/h2&gt;

&lt;p&gt;Cuando pensamos en sostenibilidad solemos imaginar paneles solares o energías renovables.&lt;/p&gt;

&lt;p&gt;Sin embargo, también existe una sostenibilidad impulsada por decisiones de arquitectura.&lt;/p&gt;

&lt;p&gt;Elegir un procesador más eficiente puede parecer un detalle menor.&lt;/p&gt;

&lt;p&gt;Pero cuando esa decisión se replica en cientos de miles de servidores, el impacto económico y ambiental es enorme.&lt;/p&gt;

&lt;p&gt;Por eso la transición hacia ARM representa mucho más que una evolución tecnológica.&lt;/p&gt;

&lt;p&gt;Es un cambio en la forma en que diseñamos la infraestructura del futuro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;La revolución de ARM no está ocurriendo porque sea más rápida que x86 en todos los escenarios.&lt;/p&gt;

&lt;p&gt;Está ocurriendo porque ofrece una mejor relación entre rendimiento y consumo energético para muchas cargas modernas.&lt;/p&gt;

&lt;p&gt;Y en un mundo donde la nube continúa creciendo a un ritmo acelerado, esa eficiencia puede marcar una diferencia significativa.&lt;/p&gt;

&lt;p&gt;Quizá la próxima vez que despliegues una máquina virtual en Azure, la pregunta ya no sea únicamente cuántos vCPU necesitas.&lt;/p&gt;

&lt;p&gt;Tal vez la verdadera pregunta sea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Qué arquitectura es la más adecuada para tu carga de trabajo?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Azure – Virtual Machines (Dpsv5 y Dplsv5): &lt;a href="https://learn.microsoft.com/azure/virtual-machines/" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/virtual-machines/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ampere Computing – Cloud Native Processors: &lt;a href="https://amperecomputing.com/" rel="noopener noreferrer"&gt;https://amperecomputing.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Sustainability: &lt;a href="https://www.microsoft.com/sustainability" rel="noopener noreferrer"&gt;https://www.microsoft.com/sustainability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Azure Sustainability: &lt;a href="https://azure.microsoft.com/explore/global-infrastructure/sustainability/" rel="noopener noreferrer"&gt;https://azure.microsoft.com/explore/global-infrastructure/sustainability/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>azure</category>
      <category>arm</category>
      <category>finops</category>
      <category>spanish</category>
    </item>
    <item>
      <title>AWS Graviton: Cómo mejorar el Precio-Rendimiento de tus workloads en AWS</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Wed, 10 Jun 2026 21:51:10 +0000</pubDate>
      <link>https://dev.to/chainiz/aws-graviton-como-mejorar-el-precio-rendimiento-de-tus-workloads-en-aws-bo2</link>
      <guid>https://dev.to/chainiz/aws-graviton-como-mejorar-el-precio-rendimiento-de-tus-workloads-en-aws-bo2</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Reducir costos en la nube suele requerir iniciativas complejas: optimización de recursos, rediseño de arquitecturas, revisión de licencias o implementación de prácticas FinOps.&lt;/p&gt;

&lt;p&gt;Sin embargo, existe una optimización que muchas organizaciones pasan por alto: migrar workloads desde instancias x86 tradicionales hacia instancias basadas en AWS Graviton.&lt;/p&gt;

&lt;p&gt;AWS Graviton es una familia de procesadores ARM64 diseñados por Amazon para ejecutar cargas de trabajo cloud-native con una mejor relación entre costo, rendimiento y consumo energético.&lt;/p&gt;

&lt;p&gt;Este artículo analiza qué es AWS Graviton, cuándo conviene utilizarlo y qué resultados reales han obtenido empresas que ya lo usan en producción.&lt;/p&gt;




&lt;h2&gt;
  
  
  El Problema: Más Costos Sin Más Valor
&lt;/h2&gt;

&lt;p&gt;Muchas organizaciones ejecutan aplicaciones sobre procesadores Intel o AMD simplemente porque siempre lo han hecho.&lt;/p&gt;

&lt;p&gt;Sin embargo, gran parte de las aplicaciones modernas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs REST&lt;/li&gt;
&lt;li&gt;Microservicios&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No requieren características específicas de x86.&lt;/p&gt;

&lt;p&gt;En estos escenarios, seguir utilizando instancias tradicionales puede significar pagar más por resultados similares.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es AWS Graviton?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/ec2/graviton/" rel="noopener noreferrer"&gt;AWS Graviton&lt;/a&gt; es una familia de procesadores ARM desarrollados por Amazon Web Services específicamente para la nube.&lt;/p&gt;

&lt;p&gt;A diferencia de los procesadores genéricos utilizados en centros de datos tradicionales, Graviton fue diseñado para las cargas de trabajo más comunes dentro de AWS.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generación&lt;/th&gt;
&lt;th&gt;Año&lt;/th&gt;
&lt;th&gt;Características&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Graviton&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Primera generación&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graviton2&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;Mejor rendimiento y menor costo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graviton3&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Optimización para cómputo intensivo y Machine Learning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graviton4&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;Más núcleos, memoria y rendimiento&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Beneficios de AWS Graviton
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Menor costo operativo
&lt;/h3&gt;

&lt;p&gt;Las instancias Graviton suelen ser más económicas que sus equivalentes x86.&lt;/p&gt;

&lt;p&gt;En muchos escenarios los ahorros directos oscilan entre 10% y 25%.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Mejor precio-rendimiento
&lt;/h3&gt;

&lt;p&gt;AWS promociona Graviton principalmente por su mejora en precio-rendimiento.&lt;/p&gt;

&lt;p&gt;Esto significa obtener más capacidad de procesamiento por cada dólar invertido.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Menor consumo energético
&lt;/h3&gt;

&lt;p&gt;Los procesadores ARM se caracterizan por su eficiencia energética.&lt;/p&gt;

&lt;p&gt;Esto contribuye a reducir el consumo eléctrico y la huella de carbono de las cargas de trabajo.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Compatibilidad con el ecosistema moderno
&lt;/h3&gt;

&lt;p&gt;Graviton funciona de forma nativa con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes (EKS)&lt;/li&gt;
&lt;li&gt;ECS&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparativa de Costos
&lt;/h2&gt;

&lt;p&gt;Tomemos una instancia de propósito general con características similares.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;x86 (M7i)&lt;/th&gt;
&lt;th&gt;ARM (M7g)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;vCPU&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memoria&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio por hora&lt;/td&gt;
&lt;td&gt;$0.096 USD&lt;/td&gt;
&lt;td&gt;$0.077 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diferencia&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;~20% menos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Cluster Kubernetes
&lt;/h3&gt;

&lt;p&gt;Supongamos un cluster EKS con 20 nodos.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concepto&lt;/th&gt;
&lt;th&gt;x86&lt;/th&gt;
&lt;th&gt;Graviton&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Costo mensual&lt;/td&gt;
&lt;td&gt;$1,402 USD&lt;/td&gt;
&lt;td&gt;$1,124 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ahorro mensual&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;$278 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ahorro anual&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;$3,336 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; AWS suele hablar de hasta 40% mejor precio-rendimiento, no necesariamente 40% menos costo. El beneficio combina ahorro económico y mayor rendimiento. En muchos casos, la reducción directa de costos se encuentra entre 10% y 25%.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Benchmarks Verificados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Amazon RDS PostgreSQL
&lt;/h3&gt;

&lt;p&gt;AWS ejecutó benchmarks sobre Amazon RDS PostgreSQL comparando Graviton4 con generaciones anteriores. Los resultados mostraron:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;Graviton4 vs Graviton3&lt;/th&gt;
&lt;th&gt;Graviton4 vs Graviton2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Queries por segundo&lt;/td&gt;
&lt;td&gt;+23%&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries por dólar&lt;/td&gt;
&lt;td&gt;+23%&lt;/td&gt;
&lt;td&gt;+34%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latencia&lt;/td&gt;
&lt;td&gt;-19%&lt;/td&gt;
&lt;td&gt;-29%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fuente:&lt;br&gt;
&lt;a href="https://aws.amazon.com/blogs/database/leveling-up-amazon-rds-with-aws-graviton4-benchmarks/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/database/leveling-up-amazon-rds-with-aws-graviton4-benchmarks/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Casos de Éxito
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Salesforce
&lt;/h3&gt;

&lt;p&gt;Migró infraestructura analítica basada en Vertica hacia instancias AWS Graviton.&lt;/p&gt;

&lt;p&gt;Resultados obtenidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15% reducción de costos&lt;/li&gt;
&lt;li&gt;40%+ mejora en consultas&lt;/li&gt;
&lt;li&gt;30%+ mejora en dashboards complejos&lt;/li&gt;
&lt;li&gt;30% mejora en tasa de éxito de cargas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fuente: &lt;a href="https://aws.amazon.com/solutions/case-studies/salesforce-graviton-case-study/" rel="noopener noreferrer"&gt;https://aws.amazon.com/solutions/case-studies/salesforce-graviton-case-study/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Supabase
&lt;/h3&gt;

&lt;p&gt;Migró PostgreSQL y APIs desde instancias T3a hacia T4g.&lt;/p&gt;

&lt;p&gt;Resultados obtenidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;28% mejor rendimiento&lt;/li&gt;
&lt;li&gt;10% menor costo por instancia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fuente: &lt;a href="https://aws.amazon.com/ec2/graviton/customers/" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/graviton/customers/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ably
&lt;/h3&gt;

&lt;p&gt;Migró la mayoría de sus workloads Java, Go y Ruby.&lt;/p&gt;

&lt;p&gt;Resultados obtenidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hasta 40% mejor precio-rendimiento&lt;/li&gt;
&lt;li&gt;Migración realizada por un único ingeniero en pocos meses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fuente: &lt;a href="https://aws.amazon.com/ec2/graviton/customers/" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/graviton/customers/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quantcast
&lt;/h3&gt;

&lt;p&gt;Migró su base de datos distribuida Kamke.&lt;/p&gt;

&lt;p&gt;Resultados obtenidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;40% mejor precio-rendimiento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fuente: &lt;a href="https://aws.amazon.com/ec2/graviton/customers/" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/graviton/customers/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprinklr
&lt;/h3&gt;

&lt;p&gt;Migró microservicios y workloads intensivos de almacenamiento hacia Graviton4.&lt;/p&gt;

&lt;p&gt;Resultados obtenidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15% mejora de rendimiento en microservicios Java&lt;/li&gt;
&lt;li&gt;30% mejora en workloads storage-intensive&lt;/li&gt;
&lt;li&gt;20% menos núcleos requeridos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fuente: &lt;a href="https://aws.amazon.com/solutions/case-studies/sprinklr-case-study-graviton/" rel="noopener noreferrer"&gt;https://aws.amazon.com/solutions/case-studies/sprinklr-case-study-graviton/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué Debo Validar Antes de Migrar?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Compatibilidad ARM64
&lt;/h3&gt;

&lt;p&gt;Verifica que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tu aplicación soporte ARM64&lt;/li&gt;
&lt;li&gt;Tus dependencias soporten ARM64&lt;/li&gt;
&lt;li&gt;Tus imágenes Docker tengan versión ARM64&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Docker Multi-Arquitectura
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker buildx build &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/amd64,linux/arm64 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-t&lt;/span&gt; my-app:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CI/CD
&lt;/h3&gt;

&lt;p&gt;Asegúrate de que tus pipelines soporten compilación multi-arquitectura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benchmarking
&lt;/h3&gt;

&lt;p&gt;Antes de migrar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Despliega la aplicación en x86.&lt;/li&gt;
&lt;li&gt;Despliega la misma aplicación en Graviton.&lt;/li&gt;
&lt;li&gt;Ejecuta pruebas de carga.&lt;/li&gt;
&lt;li&gt;Compara:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Throughput&lt;/li&gt;
&lt;li&gt;Latencia&lt;/li&gt;
&lt;li&gt;Uso de CPU&lt;/li&gt;
&lt;li&gt;Consumo de memoria&lt;/li&gt;
&lt;li&gt;Costo por hora&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ¿Cuándo Tiene Sentido Migrar?
&lt;/h2&gt;

&lt;p&gt;AWS Graviton suele ser una excelente opción para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes (EKS)&lt;/li&gt;
&lt;li&gt;Microservicios&lt;/li&gt;
&lt;li&gt;APIs REST&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Procesamiento de datos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puede requerir más análisis cuando existen dependencias propietarias o binarios que únicamente soportan x86.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;AWS Graviton ya no es una tecnología emergente.&lt;/p&gt;

&lt;p&gt;Empresas como Salesforce, Supabase, Ably, Quantcast y Sprinklr ejecutan workloads críticos sobre Graviton obteniendo mejoras medibles en costos y rendimiento.&lt;/p&gt;

&lt;p&gt;Los resultados publicados muestran:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entre 10% y 25% de ahorro directo en costos.&lt;/li&gt;
&lt;li&gt;Hasta 40% mejor precio-rendimiento.&lt;/li&gt;
&lt;li&gt;Mejoras significativas en throughput y latencia.&lt;/li&gt;
&lt;li&gt;Menor consumo energético.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para equipos DevOps, Platform Engineering y FinOps, Graviton representa una de las optimizaciones con mejor retorno de inversión disponibles actualmente en AWS.&lt;/p&gt;

&lt;p&gt;La mejor forma de evaluar su impacto es sencilla:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Despliega una prueba de concepto, mide los resultados y deja que los números hablen por sí solos.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS Graviton: &lt;a href="https://aws.amazon.com/ec2/graviton/" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/graviton/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AWS Graviton Customers: &lt;a href="https://aws.amazon.com/ec2/graviton/customers" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/graviton/customers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Salesforce Case Study: &lt;a href="https://aws.amazon.com/solutions/case-studies/salesforce-graviton-case-study/" rel="noopener noreferrer"&gt;https://aws.amazon.com/solutions/case-studies/salesforce-graviton-case-study/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sprinklr Case Study: &lt;a href="https://aws.amazon.com/solutions/case-studies/sprinklr-case-study-graviton/" rel="noopener noreferrer"&gt;https://aws.amazon.com/solutions/case-studies/sprinklr-case-study-graviton/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AWS Pricing Calculator: &lt;a href="https://calculator.aws/" rel="noopener noreferrer"&gt;https://calculator.aws/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon EKS: &lt;a href="https://aws.amazon.com/eks/" rel="noopener noreferrer"&gt;https://aws.amazon.com/eks/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docker Multi-Platform Builds: &lt;a href="https://docs.docker.com/build/building/multi-platform/" rel="noopener noreferrer"&gt;https://docs.docker.com/build/building/multi-platform/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FinOps Foundation: &lt;a href="https://www.finops.org/" rel="noopener noreferrer"&gt;https://www.finops.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota: Los resultados pueden variar según la carga de trabajo, la región AWS, la arquitectura de la aplicación y el tipo de instancia utilizado. Se recomienda realizar pruebas de rendimiento antes de una migración a producción.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>arm</category>
      <category>finops</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Deploy OpenClaw on AWS Lightsail without manual headaches</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Tue, 02 Jun 2026 13:43:34 +0000</pubDate>
      <link>https://dev.to/chainiz/deploy-openclaw-on-aws-lightsail-without-manual-headaches-1m9d</link>
      <guid>https://dev.to/chainiz/deploy-openclaw-on-aws-lightsail-without-manual-headaches-1m9d</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is an English adaptation of the original Spanish post:&lt;br&gt;
&lt;a href="https://dev.to/chainiz/desplegar-openclaw-en-aws-lightsail-sin-sufrir-7lh"&gt;Desplegar OpenClaw en AWS Lightsail sin sufrir 😎&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want to deploy OpenClaw on AWS Lightsail in a simple, repeatable way without fighting through manual steps every time, a great option is to use &lt;code&gt;AWS CDK + Python + uv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this tutorial, I’ll show you how to provision the required infrastructure using Infrastructure as Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🦀 OpenClaw + AWS Lightsail + IaC&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why automate this?
&lt;/h2&gt;

&lt;p&gt;Doing it manually once is fine.&lt;/p&gt;

&lt;p&gt;Doing it manually again and again? Not so fun.&lt;/p&gt;

&lt;p&gt;With Infrastructure as Code, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer manual errors&lt;/li&gt;
&lt;li&gt;Consistent deployments&lt;/li&gt;
&lt;li&gt;Fully repeatable environments&lt;/li&gt;
&lt;li&gt;Faster setup for your team&lt;/li&gt;
&lt;li&gt;Everything versioned in Git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not just to create a Lightsail instance. The goal is to have a deployment process that you can reproduce, destroy, improve, and run again whenever needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does this stack create?
&lt;/h2&gt;

&lt;p&gt;This project provisions an OpenClaw environment on AWS Lightsail, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An OpenClaw Lightsail instance: &lt;code&gt;openclaw_ls_1_0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Public ports: &lt;code&gt;22&lt;/code&gt;, &lt;code&gt;80&lt;/code&gt;, and &lt;code&gt;443&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A static public Lightsail IP&lt;/li&gt;
&lt;li&gt;Optional snapshots&lt;/li&gt;
&lt;li&gt;IAM role automation for Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Automatic association and disassociation of the static public IP during the stack lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, make sure you have the following installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python &lt;code&gt;3.11+&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;uv, for Python package and project management&lt;/li&gt;
&lt;li&gt;Node.js &lt;code&gt;22 LTS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;AWS CLI v2&lt;/li&gt;
&lt;li&gt;AWS CDK CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can install the AWS CDK CLI globally with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; aws-cdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  0. Clone the repository
&lt;/h2&gt;

&lt;p&gt;Clone the project repository: &lt;a href="https://github.com/r3xakead0/aws-cdk-lightsail-openclaw" rel="noopener noreferrer"&gt;aws-cdk-lightsail-openclaw&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/r3xakead0/aws-cdk-lightsail-openclaw.git
&lt;span class="nb"&gt;cd &lt;/span&gt;aws-cdk-lightsail-openclaw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1. Prepare your local environment
&lt;/h2&gt;

&lt;p&gt;Before synthesizing or deploying the stack, prepare your local environment by installing the project dependencies and validating that your AWS credentials are configured correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check installed versions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
uv &lt;span class="nt"&gt;--version&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;
aws &lt;span class="nt"&gt;--version&lt;/span&gt;
cdk &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.11+&lt;/li&gt;
&lt;li&gt;uv installed&lt;/li&gt;
&lt;li&gt;Node.js 22 LTS&lt;/li&gt;
&lt;li&gt;AWS CLI v2&lt;/li&gt;
&lt;li&gt;AWS CDK CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Install project dependencies
&lt;/h3&gt;

&lt;p&gt;From the root of the repository, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure your AWS credentials
&lt;/h3&gt;

&lt;p&gt;If you do not have AWS credentials configured yet, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will need to provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region, for example us-east-1&lt;/li&gt;
&lt;li&gt;Default output format, for example json&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use AWS profiles, export the profile before continuing.&lt;/p&gt;

&lt;p&gt;For macOS/Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;TU_PROFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;TU_PROFILE&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Validate AWS access
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sts get-caller-identity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see an output similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"UserId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Account"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123456789012"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Arn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::X234X67X901X:user/your-user"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Review the configuration file
&lt;/h2&gt;

&lt;p&gt;Open the following file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;config/dev.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate the main fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;account&lt;/li&gt;
&lt;li&gt;region, for example &lt;code&gt;us-east-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;availability_zone, for example &lt;code&gt;us-east-1a&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;key_pair_name, for example &lt;code&gt;openclaw-dev-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ssh_cidr&lt;/li&gt;
&lt;li&gt;enable_auto_snapshot, which is &lt;code&gt;false&lt;/code&gt; by default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This file defines the environment-specific configuration for your deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Create or import the Lightsail key pair
&lt;/h2&gt;

&lt;p&gt;This part is important: the key pair must be a Lightsail key pair, not an EC2 key pair.&lt;/p&gt;

&lt;p&gt;It also needs to exist in the same region defined in your configuration file.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS/Linux
&lt;/h3&gt;

&lt;p&gt;Generate the key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-m&lt;/span&gt; PEM &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.ssh/openclaw-dev-key &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"openclaw-lightsail"&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/openclaw-dev-key
&lt;span class="nb"&gt;chmod &lt;/span&gt;644 ~/.ssh/openclaw-dev-key.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import it into Lightsail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws lightsail import-key-pair &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--key-pair-name&lt;/span&gt; openclaw-dev-key &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--public-key-base64&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/openclaw-dev-key.pub&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate that the key pair exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws lightsail get-key-pairs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"keyPairs[?name=='openclaw-dev-key'].name"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;

&lt;p&gt;Generate the key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ssh-keygen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PEM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw-lightsail"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import it into Lightsail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key.pub"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Raw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lightsail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import-key-pair&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--key-pair-name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;openclaw-dev-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--public-key-base64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;us-east-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lightsail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;get-key-pairs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;us-east-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"keyPairs[?name=='openclaw-dev-key'].name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Bootstrap CDK
&lt;/h2&gt;

&lt;p&gt;You only need to bootstrap once per AWS account and region.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/bootstrap &amp;lt;ACCOUNT_ID&amp;gt; &amp;lt;REGION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\bootstrap.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AccountId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;REGION&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Run synth and diff
&lt;/h2&gt;

&lt;p&gt;Before deploying, it is a good idea to synthesize the CloudFormation template and review the changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/synth
./scripts/linux-mac/dev/diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\synth.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts\windows\dev\diff.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The diff step helps you review what CDK is going to create, update, or remove before applying the deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Deploy
&lt;/h2&gt;

&lt;p&gt;Now deploy the stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\deploy.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the deployment finishes, you should see outputs such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;InstanceName&lt;/li&gt;
&lt;li&gt;StaticIpName&lt;/li&gt;
&lt;li&gt;PublicIp&lt;/li&gt;
&lt;li&gt;BedrockRoleArn&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Verify that everything is running
&lt;/h2&gt;

&lt;p&gt;Connect to the instance using SSH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/openclaw-dev-key ubuntu@&amp;lt;PUBLIC_IP&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PUBLIC_IP&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run a quick check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;code&gt;http://&amp;lt;PUBLIC_IP&amp;gt;&lt;/code&gt; in your browser&lt;/li&gt;
&lt;li&gt;Verify the instance in the Lightsail console&lt;/li&gt;
&lt;li&gt;Confirm that the Bedrock IAM role exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, your OpenClaw deployment should be up and running on AWS Lightsail.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Destroy the stack when you are done
&lt;/h2&gt;

&lt;p&gt;If this is just a test environment, do not forget to destroy the resources when you finish to avoid unnecessary costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\destroy.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;The KeyPair does not exist&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This usually means one of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The key pair was not created or imported into Lightsail&lt;/li&gt;
&lt;li&gt;The key pair exists in another region&lt;/li&gt;
&lt;li&gt;The key pair is an EC2 key pair instead of a Lightsail key pair&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To fix it, create or import the key pair in Lightsail and make sure it is in the correct AWS region.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack stuck in &lt;code&gt;ROLLBACK_COMPLETE&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;If the stack failed and ended in &lt;code&gt;ROLLBACK_COMPLETE&lt;/code&gt;, delete the failed stack and deploy again.&lt;/p&gt;

&lt;h3&gt;
  
  
  CDK Node.js warning
&lt;/h3&gt;

&lt;p&gt;If CDK shows a warning related to Node.js, make sure you are using Node.js 22 LTS.&lt;/p&gt;

&lt;p&gt;If you use nvm, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The main idea behind this project is not only to deploy an instance.&lt;/p&gt;

&lt;p&gt;The real value is having a repeatable deployment process that does not depend on lost notes, forgotten manual steps, or one-time console configurations.&lt;/p&gt;

&lt;p&gt;With AWS CDK, Python, uv, and Lightsail, you can keep the setup simple while still applying Infrastructure as Code practices from the beginning.&lt;/p&gt;

&lt;p&gt;This makes the deployment easier to reproduce, easier to destroy, and easier to improve over time.&lt;/p&gt;

</description>
      <category>python</category>
      <category>awscdk</category>
      <category>openclaw</category>
      <category>aws</category>
    </item>
    <item>
      <title>Desplegar OpenClaw en AWS Lightsail sin sufrir 😎</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Fri, 24 Apr 2026 15:09:45 +0000</pubDate>
      <link>https://dev.to/chainiz/desplegar-openclaw-en-aws-lightsail-sin-sufrir-7lh</link>
      <guid>https://dev.to/chainiz/desplegar-openclaw-en-aws-lightsail-sin-sufrir-7lh</guid>
      <description>&lt;p&gt;Si deseas desplegar OpenClaw en AWS Lightsail de manera simple, sencilla, repetible y sin pelear con pasos manuales, una buena opción es usar &lt;em&gt;AWS CDK + Python + uv&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;En este tutorial te muestro cómo levantar toda la infraestructura con Infrastructure as Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🦀 OpenClaw + AWS Lightsail + IaC&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué automatizar esto?
&lt;/h2&gt;

&lt;p&gt;Porque hacerlo a mano una vez está bien, pero repetirlo muchas veces es &lt;em&gt;"pesado"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Con IaC (Infrastructure as Code) ganas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menos errores humanos&lt;/li&gt;
&lt;li&gt;Despliegues consistentes&lt;/li&gt;
&lt;li&gt;Repetibilidad total (crear y destruir cuando quieras)&lt;/li&gt;
&lt;li&gt;Más velocidad para tu equipo&lt;/li&gt;
&lt;li&gt;Todo versionado en Git&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Que crea este stack o proyecto?
&lt;/h2&gt;

&lt;p&gt;Tu infraestructura en Lightsail con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instancia OpenClaw (&lt;code&gt;openclaw_ls_1_0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Puertos públicos &lt;code&gt;22&lt;/code&gt;, &lt;code&gt;80&lt;/code&gt;, &lt;code&gt;443&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IP estática pública de Lightsail&lt;/li&gt;
&lt;li&gt;Snapshots opcionales&lt;/li&gt;
&lt;li&gt;Automatización de rol IAM para Bedrock&lt;/li&gt;
&lt;li&gt;Asociación/desasociación automática de la IP estática pública durante el ciclo de vida del stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pre requisitos rápidos
&lt;/h2&gt;

&lt;p&gt;Necesitas tener instalado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python &lt;code&gt;3.11+&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;uv (Gestor de paquetes y proyectos)&lt;/li&gt;
&lt;li&gt;Node.js &lt;code&gt;22 LTS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;AWS CLI v2&lt;/li&gt;
&lt;li&gt;AWS CDK CLI (&lt;code&gt;npm i -g aws-cdk&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  0) Clona el repositorio
&lt;/h2&gt;

&lt;p&gt;Clonar el repositorio de github del proyecto &lt;a href="https://github.com/r3xakead0/aws-cdk-lightsail-openclaw" rel="noopener noreferrer"&gt;aws-cdk-lightsail-openclaw&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/r3xakead0/aws-cdk-lightsail-openclaw.git
&lt;span class="nb"&gt;cd &lt;/span&gt;aws-cdk-lightsail-openclaw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1) Prepara el entorno local
&lt;/h2&gt;

&lt;p&gt;Antes de sintetizar o desplegar el stack, prepara tu entorno local instalando las dependencias del proyecto y validando que tus credenciales de AWS estén configuradas correctamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verifica las versiones instaladas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
uv &lt;span class="nt"&gt;--version&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;
aws &lt;span class="nt"&gt;--version&lt;/span&gt;
cdk &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Asegúrate de tener:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.11+&lt;/li&gt;
&lt;li&gt;uv instalado&lt;/li&gt;
&lt;li&gt;Node.js 22 LTS&lt;/li&gt;
&lt;li&gt;AWS CLI v2&lt;/li&gt;
&lt;li&gt;AWS CDK CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Instala las dependencias del proyecto
&lt;/h3&gt;

&lt;p&gt;Desde la raíz del repositorio, ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configura tus credenciales de AWS
&lt;/h3&gt;

&lt;p&gt;Si todavía no tienes credenciales configuradas, ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ingresa tu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region, por ejemplo us-east-1&lt;/li&gt;
&lt;li&gt;Default output format, por ejemplo json&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si usas perfiles de AWS, puedes exportar el perfil antes de continuar:&lt;/p&gt;

&lt;p&gt;macOS/Linux&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;TU_PROFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows PowerShell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;TU_PROFILE&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Valida el acceso a AWS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sts get-caller-identity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deberías ver una salida similar a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"UserId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Account"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123456789012"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Arn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::123456789012:user/your-user"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2) Revisa el archivo de configuración
&lt;/h2&gt;

&lt;p&gt;Archivo: &lt;code&gt;config/dev.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Asegúrate de validar estos campos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;account&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;región&lt;/code&gt; (ej. &lt;code&gt;us-east-1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;availability_zone&lt;/code&gt; (ej. &lt;code&gt;us-east-1a&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;key_pair_name&lt;/code&gt; (ej. &lt;code&gt;openclaw-dev-key&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh_cidr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enable_auto_snapshot&lt;/code&gt; (&lt;code&gt;false&lt;/code&gt; por defecto)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3) Crea/importa el key pair en Lightsail
&lt;/h2&gt;

&lt;p&gt;Importante: tiene que ser de Lightsail (no EC2) y en la misma region especificada en el archivo de configuración.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS/Linux
&lt;/h3&gt;

&lt;p&gt;Genera la clave:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-m&lt;/span&gt; PEM &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.ssh/openclaw-dev-key &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"openclaw-lightsail"&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/openclaw-dev-key
&lt;span class="nb"&gt;chmod &lt;/span&gt;644 ~/.ssh/openclaw-dev-key.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impórtala:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws lightsail import-key-pair &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--key-pair-name&lt;/span&gt; openclaw-dev-key &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--public-key-base64&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/openclaw-dev-key.pub&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Valídala:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws lightsail get-key-pairs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"keyPairs[?name=='openclaw-dev-key'].name"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;

&lt;p&gt;Genera la clave:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ssh-keygen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PEM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openclaw-lightsail"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impórtala:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key.pub"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Raw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lightsail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import-key-pair&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--key-pair-name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;openclaw-dev-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--public-key-base64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;--region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;us-east-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Valídala:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lightsail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;get-key-pairs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;us-east-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"keyPairs[?name=='openclaw-dev-key'].name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4) Bootstrap (solo una vez por cuenta/region)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/bootstrap &amp;lt;ACCOUNT_ID&amp;gt; &amp;lt;REGION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\bootstrap.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AccountId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;REGION&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5) Synth + Diff (para revisar antes de desplegar)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/synth
./scripts/linux-mac/dev/diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\synth.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts\windows\dev\diff.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6) Deploy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\deploy.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuando termine, verás outputs como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;InstanceName&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;StaticIpName&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PublicIp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BedrockRoleArn&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7) Verifica que todo este vivo
&lt;/h2&gt;

&lt;p&gt;Conéctate por SSH:&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/openclaw-dev-key ubuntu@&amp;lt;PUBLIC_IP&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.ssh\openclaw-dev-key"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PUBLIC_IP&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chequeo rápido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abre &lt;code&gt;http://&amp;lt;PUBLIC_IP&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;revisa la instancia en consola de Lightsail&lt;/li&gt;
&lt;li&gt;confirma que el rol de Bedrock existe en IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8) Destroy cuando termines (para no gastar de mas)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux/macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./scripts/linux-mac/dev/destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows PowerShell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\windows\dev\destroy.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solución de problemas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;The KeyPair does not exist&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;El key pair no esta en Lightsail, esta en otra region o es de EC2.&lt;/li&gt;
&lt;li&gt;Solución: crealo/importalo en Lightsail y en la region correcta.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stack en &lt;code&gt;ROLLBACK_COMPLETE&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Borra el stack fallido y vuelve a desplegar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Warning de Node en CDK
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ejecuta &lt;code&gt;nvm use&lt;/code&gt; para usar Node 22 LTS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;La idea no es solo desplegar una instancia, sino dejar el proceso listo para repetirse sin depender de pasos manuales ni configuraciones perdidas.&lt;/p&gt;

</description>
      <category>python</category>
      <category>awscdk</category>
      <category>openclaw</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Instalación de JFrog Artifactory OSS en Ubuntu 22.04 (Jammy) + PostgreSQL - Guia Completa</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Fri, 06 Feb 2026 13:58:22 +0000</pubDate>
      <link>https://dev.to/chainiz/instalacion-de-jfrog-artifactory-oss-en-ubuntu-2204-jammy-postgresql-guia-completa-7dc</link>
      <guid>https://dev.to/chainiz/instalacion-de-jfrog-artifactory-oss-en-ubuntu-2204-jammy-postgresql-guia-completa-7dc</guid>
      <description>&lt;p&gt;Tutorial paso a paso para instalar &lt;strong&gt;JFrog Artifactory OSS&lt;/strong&gt; en &lt;strong&gt;Ubuntu 22.04 (Jammy)&lt;/strong&gt; usando &lt;strong&gt;PostgreSQL&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Nota: Este setup no está pensado para producción. Cambia contraseñas, restringe accesos y revisa backups/SSL antes de usarlo en entornos reales.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Contenido
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Requisitos&lt;/li&gt;
&lt;li&gt;Arquitectura&lt;/li&gt;
&lt;li&gt;0. Preparación de Ubuntu 22.04 (Jammy)&lt;/li&gt;
&lt;li&gt;1. Base de datos PostgreSQL&lt;/li&gt;
&lt;li&gt;2. Instalar Artifactory OSS&lt;/li&gt;
&lt;li&gt;3. Configurar Artifactory OSS para usar PostgreSQL&lt;/li&gt;
&lt;li&gt;4. Iniciar Artifactory&lt;/li&gt;
&lt;li&gt;5. Abrir puertos (firewall)&lt;/li&gt;
&lt;li&gt;6. Entrar a la UI y credenciales por defecto&lt;/li&gt;
&lt;li&gt;Comandos útiles&lt;/li&gt;
&lt;li&gt;Referencias&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;VM con &lt;strong&gt;Ubuntu 22.04 (Jammy)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Acceso &lt;strong&gt;sudo&lt;/strong&gt; (superusuario)&lt;/li&gt;
&lt;li&gt;Conectividad a internet para bajar paquetes&lt;/li&gt;
&lt;li&gt;Puertos abiertos en firewall (al menos &lt;strong&gt;8082&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Arquitectura
&lt;/h2&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%2Faion4mg95fwz3x53gcda.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%2Faion4mg95fwz3x53gcda.png" alt="Diagram" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  0. Preparación de Ubuntu 22.04 (Jammy)
&lt;/h2&gt;

&lt;p&gt;Confirmar que estás en Jammy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsb_release &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fbt8giced7v5vrmy3f3r6.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%2Fbt8giced7v5vrmy3f3r6.png" alt="lsb_release" width="354" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/os-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fx8i2tyoamihde2mb8rer.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%2Fx8i2tyoamihde2mb8rer.png" alt="os-release" width="751" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actualizar librerías:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nt"&gt;-y&lt;/span&gt; upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  1. Base de datos PostgreSQL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Instalar PostgreSQL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; postgresql postgresql-contrib
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; postgresql
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status postgresql &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 Crear la base de datos y usuario para Artifactory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres psql &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;SQL&lt;/span&gt;&lt;span class="sh"&gt;'
CREATE USER artifactory WITH PASSWORD 'ArtifactoryDemo123!';
CREATE DATABASE artifactory OWNER artifactory ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE artifactory TO artifactory;
&lt;/span&gt;&lt;span class="no"&gt;SQL
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Recomendación: cambia esta contraseña si la VM no es 100% privada.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Instalar Artifactory OSS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Agregar repositorio + key
&lt;/h3&gt;

&lt;p&gt;Agregar el repo OSS (para Jammy):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb https://releases.jfrog.io/artifactory/artifactory-debs jammy main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agregar la key GPG:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO&lt;/span&gt; - https://releases.jfrog.io/artifactory/api/gpg/key/public | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Instalar Artifactory OSS (Open Source)
&lt;/h3&gt;

&lt;p&gt;JFrog recomienda tener &lt;code&gt;net-tools&lt;/code&gt; como prerequisito:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; net-tools
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; jfrog-artifactory-oss
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Configurar Artifactory OSS para usar PostgreSQL
&lt;/h2&gt;

&lt;p&gt;La configuración principal está en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;JFROG_HOME&lt;/code&gt; por defecto: &lt;code&gt;/opt/jfrog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Archivo: &lt;code&gt;/opt/jfrog/artifactory/var/etc/system.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.1 Detener Artifactory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl stop artifactory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Editar &lt;code&gt;system.yaml&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Abrir el archivo &lt;code&gt;system.yaml&lt;/code&gt; con editor VIM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vim /opt/jfrog/artifactory/var/etc/system.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agregar/ajustar esta sección &lt;code&gt;shared&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;shared&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;org.postgresql.Driver&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jdbc:postgresql://127.0.0.1:5432/artifactory&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;artifactory&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ArtifactoryDemo123!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Iniciar Artifactory
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start artifactory.service
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status artifactory.service &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ver logs si hace falta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; artifactory &lt;span class="nt"&gt;-n&lt;/span&gt; 200 &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Abrir puertos (firewall)
&lt;/h2&gt;

&lt;p&gt;Para la UI normalmente se usa &lt;strong&gt;8082&lt;/strong&gt; (y a veces &lt;strong&gt;8081&lt;/strong&gt; según el setup). Para este caso, abre al menos &lt;strong&gt;8082&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 8082/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Entrar a la UI y credenciales por defecto
&lt;/h2&gt;

&lt;p&gt;Abrir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;TU_IP&amp;gt;:8082/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://&amp;lt;TU_IP&amp;gt;:8082/ui/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Login directo: &lt;code&gt;http://&amp;lt;TU_IP&amp;gt;:8082/ui/login&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credenciales por defecto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;admin / password&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Cambia la contraseña apenas puedas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fix rápido (OSS): deshabilitar jfconnect (workaround login “stuck”)
&lt;/h3&gt;

&lt;p&gt;Si al iniciar sesión el botón queda inactivo o se “queda pegado” el login (reportado en OSS 7.125.x), aplica este workaround:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edita:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vim /opt/jfrog/artifactory/var/etc/system.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agrega esto a nivel raíz (top-level), NO dentro de &lt;code&gt;shared&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jfconnect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Reinicia:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart artifactory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Prueba de nuevo: http://:8082/ui/ o http://:8082/ui/login&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comandos útiles
&lt;/h2&gt;

&lt;p&gt;Estado del servicio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status artifactory &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logs recientes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; artifactory &lt;span class="nt"&gt;-n&lt;/span&gt; 200 &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reiniciar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart artifactory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifica que el puertos está escuchando y en qué interfaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ss &lt;span class="nt"&gt;-lntp&lt;/span&gt; | egrep &lt;span class="s1"&gt;':8081|:8082'&lt;/span&gt;
curl &lt;span class="nt"&gt;-I&lt;/span&gt; http://127.0.0.1:8082/ | &lt;span class="nb"&gt;head
&lt;/span&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; http://127.0.0.1:8081/ | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JFrog Platform Installation Documentation: &lt;a href="https://jfrog.com/help/r/jfrog-platform-installation-documentation" rel="noopener noreferrer"&gt;https://jfrog.com/help/r/jfrog-platform-installation-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install Artifactory on Debian/Ubuntu (APT): &lt;a href="https://jfrog.com/help/r/jfrog-installation-setup-documentation/install-artifactory-on-debian" rel="noopener noreferrer"&gt;https://jfrog.com/help/r/jfrog-installation-setup-documentation/install-artifactory-on-debian&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PostgreSQL Documentation: &lt;a href="https://www.postgresql.org/docs/" rel="noopener noreferrer"&gt;https://www.postgresql.org/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ubuntu</category>
      <category>postgres</category>
      <category>jfrog</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Implementar un sitio web estático en Cloudflare Pages usando Terraform y Wrangler CLI</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Sun, 25 Jan 2026 22:58:01 +0000</pubDate>
      <link>https://dev.to/chainiz/implementar-un-sitio-web-estatico-en-cloudflare-pages-usando-terraform-y-wrangler-cli-b70</link>
      <guid>https://dev.to/chainiz/implementar-un-sitio-web-estatico-en-cloudflare-pages-usando-terraform-y-wrangler-cli-b70</guid>
      <description>&lt;p&gt;En este tutorial, aprenderá a implementar un sitio web estático en &lt;strong&gt;Cloudflare Pages&lt;/strong&gt; usando &lt;strong&gt;Terraform&lt;/strong&gt; para el aprovisionamiento de infraestructura y &lt;strong&gt;Wrangler CLI&lt;/strong&gt; para la implementación manual.&lt;/p&gt;

&lt;p&gt;Este enfoque le permite administrar su proyecto de Cloudflare Pages como Infraestructura como Código (IaC), manteniendo un proceso de implementación simple y flexible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qué aprenderás
&lt;/h2&gt;

&lt;p&gt;Al finalizar este tutorial, podrás:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aprovisionar un proyecto de Cloudflare Pages con Terraform&lt;/li&gt;
&lt;li&gt;Implementar un sitio web estático con la CLI de Wrangler&lt;/li&gt;
&lt;li&gt;Configurar un dominio personalizado (opcional)&lt;/li&gt;
&lt;li&gt;Administrar tu infraestructura de forma limpia y reproducible&lt;/li&gt;
&lt;li&gt;Destruir todos los recursos de forma segura cuando ya no sean necesarios&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ¿Por qué Cloudflare Pages + Terraform?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Pages&lt;/strong&gt; ofrece una plataforma rápida, global y sin servidor para alojar sitios web estáticos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terraform&lt;/strong&gt; te permite definir y versionar tu infraestructura, lo que garantiza la consistencia y repetibilidad de tus implementaciones.&lt;/p&gt;

&lt;p&gt;La combinación de ambas herramientas te ofrece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infraestructura como Código&lt;/li&gt;
&lt;li&gt;CDN global rápida&lt;/li&gt;
&lt;li&gt;Implementación sencilla de sitios estáticos&lt;/li&gt;
&lt;li&gt;Gestión sencilla de dominios&lt;/li&gt;
&lt;li&gt;Separación clara entre infraestructura y aplicación&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Requisitos Previos
&lt;/h2&gt;

&lt;p&gt;Antes de comenzar, asegúrese de tener:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt; instalado (versión 1.10.0 o superior)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cuenta de Cloudflare&lt;/strong&gt; con acceso a Pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Token de Cloudflare&lt;/strong&gt; con permisos de Cloudflare Pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js y npm&lt;/strong&gt; instalados (para Wrangler CLI)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Estructura del Proyecto
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudflare-tf-staticweb/
└── infrastructure/           # Carpeta con archivos terraform
    ├── main.tf               # Configuración de Terraform
    ├── providers.tf          # Configuración de providers
    ├── variables.tf          # Definición de variables
    ├── cloudflare.tf         # Recursos de Cloudflare Pages
    ├── outputs.tf            # Outputs del proyecto
    ├── terraform.tfvars      # Variables (no versionar)
└── website/                  # Carpeta con el sitio web estático
    └── index.html            # Contiene el HTLM de la página principal
    └── styles.css            # Contiene el CSS de la página principal
    └── script.js             # Contiene el JS de la página principal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Variables
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;th&gt;Requerida&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cloudflare_api_token&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API Token de Cloudflare&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cloudflare_account_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Account ID de Cloudflare&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;project_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nombre del proyecto&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;"my-website"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;custom_domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dominio personalizado&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;""&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Configuración Inicial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Crear el Proyecto
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear la estructura de carpetas&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;cloudflare-tf-staticweb
&lt;span class="nb"&gt;cd &lt;/span&gt;cloudflare-tf-staticweb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configurar la Infraestructura
&lt;/h3&gt;

&lt;p&gt;En la carpeta "cloudflare-tf-staticweb"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear la carpeta de la infraestructura&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;infrastructure

&lt;span class="c"&gt;# Accede a la carpeta infraestructura&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;infrastructure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "main.tf"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; main.tf
terraform {
  required_version = "&amp;gt;= 1.10.0"

  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~&amp;gt; 4.0"
    }
  }
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "provider.tf"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; provider.tf
provider "cloudflare" {
  api_token = var.cloudflare_api_token
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "variables.tf"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; variables.tf
variable "cloudflare_api_token" {
  description = "The API token for Cloudflare account"
  type        = string
  sensitive   = true
}

variable "cloudflare_account_id" {
  description = "Cloudflare Account ID (visible on dashboard)"
  type        = string
}

variable "project_name" {
  description = "Project name in Cloudflare Pages"
  type        = string
  default     = "my-website"
}

variable "custom_domain" {
  description = "Custom domain (optional, leave blank if not used)"
  type        = string
  default     = ""
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "outputs.tf"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; outputs.tf
output "pages_project_url" {
  description = "Full URL of the Cloudflare Pages project"
  value       = "https://&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;cloudflare_pages_project&lt;/span&gt;&lt;span class="p"&gt;.website.subdomain&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"
}

output "pages_project_subdomain" {
  description = "Subdomain assigned by Cloudflare Pages"
  value       = cloudflare_pages_project.website.subdomain
}

output "project_id" {
  description = "Cloudflare project ID"
  value       = cloudflare_pages_project.website.id
}

output "project_name" {
  description = "Project Name"
  value       = cloudflare_pages_project.website.name
}

output "custom_domain_url" {
  description = "Custom domain URL (if configured)"
  value       = var.custom_domain != "" ? "https://&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.custom_domain&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;" : "Not configured"
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "cloudflare.tf"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; cloudflare.tf
resource "cloudflare_pages_project" "website" {
  account_id        = var.cloudflare_account_id
  name              = var.project_name
  production_branch = "main"

  build_config {
    build_command   = ""        # No build required for static HTML
    destination_dir = "website" # Folder containing index.html
    root_dir        = ""        # Repository root
  }

  # Environment variables (if needed in the future)
  deployment_configs {
    production {
      environment_variables = {
        ENVIRONMENT = "production"
      }
    }

    preview {
      environment_variables = {
        ENVIRONMENT = "preview"
      }
    }
  }

}

# Custom domain (optional)
resource "cloudflare_pages_domain" "custom_domain" {
  count        = var.custom_domain != "" ? 1 : 0
  account_id   = var.cloudflare_account_id
  project_name = cloudflare_pages_project.website.name
  domain       = var.custom_domain
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configurar la pagina web
&lt;/h3&gt;

&lt;p&gt;En la carpeta "cloudflare-tf-staticweb"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear la carpeta del sitio web&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;website

&lt;span class="c"&gt;# Accede a la del sitio web&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "index.html"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.html &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Simple Web App&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="styles.css"&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class="container"&amp;gt;
        &amp;lt;h1 id="greeting"&amp;gt;Hello, World!&amp;lt;/h1&amp;gt;
        &amp;lt;input type="text" id="nameInput" placeholder="Enter your name"&amp;gt;
        &amp;lt;button id="updateBtn"&amp;gt;Update Greeting&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "styles.css"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; styles.css &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

.container {
    background: white;
    padding: 2rem;
    border-radius: 10px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
    text-align: center;
    max-width: 400px;
    width: 90%;
}

h1 {
    color: #333;
    margin-bottom: 1.5rem;
    font-size: 2rem;
}

input {
    padding: 0.8rem;
    width: 100%;
    margin-bottom: 1rem;
    border: 2px solid #ddd;
    border-radius: 5px;
    font-size: 1rem;
}

input:focus {
    outline: none;
    border-color: #2575fc;
}

button {
    background: #2575fc;
    color: white;
    border: none;
    padding: 0.8rem 1.5rem;
    border-radius: 5px;
    cursor: pointer;
    font-size: 1rem;
    transition: background 0.3s;
}

button:hover {
    background: #1a68e8;
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "script.js"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; script.js &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
// Get DOM elements
const greetingElement = document.getElementById('greeting');
const nameInput = document.getElementById('nameInput');
const updateButton = document.getElementById('updateBtn');

// Update greeting when button is clicked
updateButton.addEventListener('click', () =&amp;gt; {
    const name = nameInput.value.trim();

    if (name) {
        greetingElement.textContent = `Hello, &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;!`;
        nameInput.value = ''; // Clear input
    } else {
        greetingElement.textContent = 'Please enter your name!';
        setTimeout(() =&amp;gt; {
            greetingElement.textContent = 'Hello, World!';
        }, 2000);
    }
});

// Also update on Enter key press
nameInput.addEventListener('keypress', (e) =&amp;gt; {
    if (e.key === 'Enter') {
        updateButton.click();
    }
});
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Obtener tu Account ID en Cloudflare
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ve al &lt;a href="https://dash.cloudflare.com" rel="noopener noreferrer"&gt;Cloudflare Dashboard&lt;/a&gt; → Account Home&lt;/li&gt;
&lt;li&gt;Click en los 3 puntos la lado del &lt;strong&gt;"Account Name"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click en &lt;strong&gt;"Copy account ID"&lt;/strong&gt;&lt;/p&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%2Fjnh3hjldt9o9pbdux5n0.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%2Fjnh3hjldt9o9pbdux5n0.png" alt="Get Account ID" width="612" height="190"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Crear API Token en Cloudflare
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ve a &lt;a href="https://dash.cloudflare.com" rel="noopener noreferrer"&gt;Cloudflare Dashboard&lt;/a&gt; → Manage Account → Account API Tokens&lt;/li&gt;
&lt;li&gt;Click en &lt;strong&gt;"Create Token"&lt;/strong&gt; → &lt;strong&gt;"Create Custom Token"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configura los permisos necesarios:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Token name: Terraform Cloudflare Pages

Permissions:
├── Account
│   ├── Cloudflare Pages → Edit
│   └── Account Settings → Read
└── Zone (opcional, solo si usas dominio personalizado)
    └── DNS → Edit

Zone Resources:
└── Include → All zones from an account → Your_Account
&lt;/code&gt;&lt;/pre&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%2F3kznsv0q49mq7cmpajw6.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%2F3kznsv0q49mq7cmpajw6.png" alt="Create Custom Token" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click en &lt;strong&gt;"Continue to summary"&lt;/strong&gt; → &lt;strong&gt;"Create Token"&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Copia el token&lt;/strong&gt; inmediatamente (solo se muestra una vez)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Actualizar Configuración
&lt;/h3&gt;

&lt;p&gt;Crear el archivos de variables y asignar los valores&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cloudflare_account_id&lt;/strong&gt; obtenido del paso 4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cloudflare_api_token&lt;/strong&gt; obtenido del paso 5
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear el archivo "terraform.tfvars"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; terraform.tfvars
# Cloudflare Account ID
cloudflare_account_id = "your-account-id-here"


# Cloudflare API Token
cloudflare_api_token = "your-token"

# Project name
project_name = "my-website"

# Custom domain (optional, leave blank if not used)
custom_domain = ""
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Uso
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Crear la Infraestructura con Terraform
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Accede a la carpeta infraestructura
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;infrastructure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Inicializar Terraform
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Validar la configuración
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform validate
terraform &lt;span class="nb"&gt;fmt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Planificar cambios
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Aplicar cambios
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply &lt;span class="nt"&gt;-auto-approve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto creará el proyecto de Cloudflare Pages, pero aún no habrá contenido desplegado.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ver outputs
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Desplegar el Sitio Web con Wrangler
&lt;/h3&gt;

&lt;p&gt;Una vez que Terraform haya creado el proyecto, despliega tu sitio:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Instalar Wrangler (solo la primera vez)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; wrangler
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Autenticar con Cloudflare
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrangler login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto abrirá un navegador para que autorices Wrangler.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Desplegar el sitio
&lt;/h4&gt;

&lt;p&gt;Desde la raíz del proyecto&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrangler pages deploy website &lt;span class="nt"&gt;--project-name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Reemplaza &lt;code&gt;my-website&lt;/code&gt; con el valor de tu variable &lt;code&gt;project_name&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  4. Verificar el despliegue
&lt;/h4&gt;

&lt;p&gt;Visita la URL mostrada en el output de Terraform o en el resultado del comando deploy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform output pages_project_url

pages_project_url &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://my-website-xxx.pages.dev"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Flnfyk6whqr5aduakkayc.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%2Flnfyk6whqr5aduakkayc.png" alt="website" width="717" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Despliegues Futuros
&lt;/h3&gt;

&lt;p&gt;Para actualizar tu sitio después de hacer cambios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edita tus archivos en website/&lt;/li&gt;
&lt;li&gt;Despliega de nuevo
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrangler pages deploy website &lt;span class="nt"&gt;--project-name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Reemplaza &lt;code&gt;my-website&lt;/code&gt; con el valor de tu variable &lt;code&gt;project_name&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Dominio Personalizado
&lt;/h2&gt;

&lt;p&gt;Para agregar un dominio personalizado:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Actualiza &lt;code&gt;terraform.tfvars&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;custom_domain&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"www.tudominio.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asegúrate de que el dominio esté en Cloudflare&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Aplica los cambios&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Destruir Recursos
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform destroy &lt;span class="nt"&gt;-auto-approve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Recursos Adicionales
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs" rel="noopener noreferrer"&gt;Documentación de Terraform Cloudflare Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/pages/" rel="noopener noreferrer"&gt;Documentación de Cloudflare Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/workers/wrangler/" rel="noopener noreferrer"&gt;Wrangler CLI Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudflare</category>
      <category>terraform</category>
      <category>infrastructureascode</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Valkey vs Redis – Explicación simple y practica</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Thu, 08 Jan 2026 21:59:36 +0000</pubDate>
      <link>https://dev.to/chainiz/valkey-vs-redis-explicacion-simple-y-practica-lai</link>
      <guid>https://dev.to/chainiz/valkey-vs-redis-explicacion-simple-y-practica-lai</guid>
      <description>&lt;h2&gt;
  
  
  🔑 ¿Qué es Valkey?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Valkey&lt;/strong&gt; es un &lt;strong&gt;fork open-source de Redis&lt;/strong&gt;, creado en &lt;strong&gt;2024&lt;/strong&gt;, totalmente compatible, creado tras el cambio de licencia de Redis para mantener una alternativa 100% open source y &lt;strong&gt;respaldado por la Linux Foundation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Surge como respuesta al &lt;strong&gt;cambio de licencia de Redis&lt;/strong&gt; (Redis ≥ 7.4), que dejó de ser open source bajo los estándares de la OSI.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Objetivo de Valkey&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mantener un Redis &lt;strong&gt;100% open source&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Compatibilidad total con Redis (comandos, protocolo, clientes)&lt;/li&gt;
&lt;li&gt;Gobernanza comunitaria y neutral&lt;/li&gt;
&lt;li&gt;Sin vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En la práctica:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Valkey es Redis, pero con licencia abierta y desarrollo comunitario.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 ¿Para qué sirve Valkey?
&lt;/h2&gt;

&lt;p&gt;Exactamente los mismos casos de uso que Redis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache in-memory&lt;/li&gt;
&lt;li&gt;Session store&lt;/li&gt;
&lt;li&gt;Pub/Sub&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Distributed locks&lt;/li&gt;
&lt;li&gt;Streams&lt;/li&gt;
&lt;li&gt;Leaderboards&lt;/li&gt;
&lt;li&gt;Replication&lt;/li&gt;
&lt;li&gt;Persistence (RDB / AOF)&lt;/li&gt;
&lt;li&gt;Redis Cluster&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚖️ Valkey vs Redis (comparación rápida)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Valkey&lt;/th&gt;
&lt;th&gt;Redis (≥ 7.4)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Licencia&lt;/td&gt;
&lt;td&gt;✅ Open Source (BSD/Apache-style)&lt;/td&gt;
&lt;td&gt;❌ RSAL / SSPL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gobernanza&lt;/td&gt;
&lt;td&gt;Linux Foundation&lt;/td&gt;
&lt;td&gt;Redis Inc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compatibilidad&lt;/td&gt;
&lt;td&gt;100% Redis&lt;/td&gt;
&lt;td&gt;Nativa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uso comercial&lt;/td&gt;
&lt;td&gt;✅ Libre&lt;/td&gt;
&lt;td&gt;⚠️ Restricciones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor lock-in&lt;/td&gt;
&lt;td&gt;❌ Bajo&lt;/td&gt;
&lt;td&gt;⚠️ Mayor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud friendly&lt;/td&gt;
&lt;td&gt;✅ Sí&lt;/td&gt;
&lt;td&gt;⚠️ Limitado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Soporte K8s&lt;/td&gt;
&lt;td&gt;✅ Excelente&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧾 La licencia: el punto clave
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Redis hoy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Licencia RSAL / SSPL&lt;/li&gt;
&lt;li&gt;No considerada open source por la OSI&lt;/li&gt;
&lt;li&gt;Restricciones para SaaS y cloud providers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Valkey
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open source real&lt;/li&gt;
&lt;li&gt;Uso comercial sin restricciones&lt;/li&gt;
&lt;li&gt;Ideal para empresas, educación y gobiernos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por eso &lt;strong&gt;AWS, Google, Oracle y otros proveedores apoyan Valkey&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Demo 1 – Valkey local con Docker
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; valkey &lt;span class="nt"&gt;-p&lt;/span&gt; 6379:6379 valkey/valkey:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fsv4ubt3ek2u9tlgrmu4m.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%2Fsv4ubt3ek2u9tlgrmu4m.png" alt="docker run" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prueba rápida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli ping
&lt;span class="c"&gt;# PONG&lt;/span&gt;

redis-cli &lt;span class="nb"&gt;set &lt;/span&gt;demo &lt;span class="s2"&gt;"hola valkey"&lt;/span&gt;
redis-cli get demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Foi7szg2kyzmph654qev2.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%2Foi7szg2kyzmph654qev2.png" alt="redis-cli" width="696" height="214"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Demo 2 – Pub/Sub
&lt;/h2&gt;

&lt;p&gt;Terminal A:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli subscribe events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fekf2dsemgylimldveovh.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%2Fekf2dsemgylimldveovh.png" alt="redis-cli subscribe" width="626" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminal B:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli publish events &lt;span class="s2"&gt;"mensaje desde valkey"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fd0mxmc7mia608oqrvk9g.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%2Fd0mxmc7mia608oqrvk9g.png" alt="redis-cli publish" width="800" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminal A:&lt;br&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%2Fze1a4mrplzsnypa3bjwn.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%2Fze1a4mrplzsnypa3bjwn.png" alt="redis-cli subscribe result" width="630" height="288"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ☸️ Demo 3 – Valkey en Kubernetes
&lt;/h2&gt;

&lt;p&gt;Crear el archivo "valkey.yaml"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;demo&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;demo&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Headless Service required by StatefulSet&lt;/span&gt;
  &lt;span class="na"&gt;clusterIP&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;None&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
      &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;StatefulSet&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;demo&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;serviceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey/valkey:latest&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
              &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
          &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;data&lt;/span&gt;
              &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/data&lt;/span&gt;
          &lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;tcpSocket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
            &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
            &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
          &lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;tcpSocket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
            &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;
            &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;volumeClaimTemplates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;data&lt;/span&gt;
      &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;accessModes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ReadWriteOnce&lt;/span&gt;
        &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1Gi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desplegar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; valkey.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acceso desde un pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; vcli &lt;span class="nt"&gt;-n&lt;/span&gt; demo &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;redis:7 &lt;span class="nt"&gt;--&lt;/span&gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejecuta el ping para validar conexion&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli &lt;span class="nt"&gt;-h&lt;/span&gt; valkey.demo.svc.cluster.local ping
PONG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Código fuente : &lt;a href="https://github.com/r3xakead0/k8s-valkey-demo" rel="noopener noreferrer"&gt;k8s-valkey-demo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔄 ¿Tengo que cambiar código si vengo de Redis?
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mismos comandos&lt;/li&gt;
&lt;li&gt;Mismo protocolo RESP&lt;/li&gt;
&lt;li&gt;Mismos clientes (&lt;code&gt;redis-cli&lt;/code&gt;, &lt;code&gt;node-redis&lt;/code&gt;, &lt;code&gt;ioredis&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solo cambia la imagen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;valkey/valkey&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Conclusión
&lt;/h2&gt;

&lt;p&gt;Si estás construyendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;SaaS&lt;/li&gt;
&lt;li&gt;Plataformas cloud&lt;/li&gt;
&lt;li&gt;Proyectos open source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Valkey es la opción recomendada hoy&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>redis</category>
      <category>valkey</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Develop Kubernetes Services Locally (Yes, Really) with Telepresence</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Wed, 07 Jan 2026 19:19:26 +0000</pubDate>
      <link>https://dev.to/chainiz/develop-kubernetes-services-locally-yes-really-with-telepresence-16pg</link>
      <guid>https://dev.to/chainiz/develop-kubernetes-services-locally-yes-really-with-telepresence-16pg</guid>
      <description>&lt;h2&gt;
  
  
  🚀 What is Telepresence?
&lt;/h2&gt;

&lt;p&gt;Telepresence￼is a development tool that lets you connect your local machine directly to a Kubernetes cluster — as if your app were running inside the cluster, even though it’s actually running on your laptop.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔥 Build, run, and debug Kubernetes services locally, without rebuilding Docker images or redeploying on every change.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧩 What do developers use Telepresence for?
&lt;/h2&gt;

&lt;p&gt;Telepresence shines in day-to-day Kubernetes development:&lt;/p&gt;

&lt;p&gt;✅ Local development against a real cluster&lt;br&gt;
• Your application runs locally&lt;br&gt;
• But it consumes real cluster resources:&lt;br&gt;
• Services&lt;br&gt;
• ConfigMaps&lt;br&gt;
• Secrets&lt;br&gt;
• Internal APIs&lt;/p&gt;

&lt;p&gt;No mocks. No fakes. Just real infrastructure.&lt;/p&gt;

&lt;p&gt;✅ Intercepting Service traffic&lt;br&gt;
• Telepresence can intercept traffic destined for a Kubernetes Service&lt;br&gt;
• That traffic is transparently redirected to your local app&lt;/p&gt;

&lt;p&gt;From the cluster’s point of view, nothing changes.&lt;/p&gt;

&lt;p&gt;✅ Fast, comfortable debugging&lt;br&gt;
• Use local logs&lt;br&gt;
• Attach debuggers (VS Code, IntelliJ, etc.)&lt;br&gt;
• Hot reload&lt;br&gt;
• Breakpoints&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🙌 All without modifying or risking remote or production environments.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  😖 The problem Telepresence solves
&lt;/h2&gt;

&lt;p&gt;❌ Traditional Kubernetes workflow&lt;/p&gt;

&lt;p&gt;Every tiny change usually means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modify code&lt;/li&gt;
&lt;li&gt;docker build&lt;/li&gt;
&lt;li&gt;docker push&lt;/li&gt;
&lt;li&gt;kubectl apply&lt;/li&gt;
&lt;li&gt;Wait for rollout&lt;/li&gt;
&lt;li&gt;Test&lt;/li&gt;
&lt;li&gt;Repeat 😵‍💫&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s minutes per iteration — and it kills productivity.&lt;/p&gt;



&lt;p&gt;✅ With Telepresence&lt;/p&gt;

&lt;p&gt;The workflow becomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Change code locally&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;Test instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⏱️ Feedback in seconds, not minutes.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ How does Telepresence work?
&lt;/h2&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%2F9n45x6yc2qkj49yxakt9.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%2F9n45x6yc2qkj49yxakt9.png" alt="flow" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;High-level flow:&lt;br&gt;
 • Connects to your Kubernetes cluster&lt;br&gt;
 • Deploys a Traffic Manager (proxy)&lt;br&gt;
 • Intercepts traffic for a Service&lt;br&gt;
 • Forwards that traffic to your local machine&lt;/p&gt;

&lt;p&gt;From Kubernetes’ perspective:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 Your app still exists in the cluster — it just happens to live on your local machine.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🧪 Simple example
&lt;/h2&gt;

&lt;p&gt;Without Telepresence&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;Service → Pod &lt;span class="k"&gt;in &lt;/span&gt;Kubernetes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Telepresence&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;Service → your laptop &lt;span class="o"&gt;(&lt;/span&gt;localhost:9000&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else stays the same:&lt;br&gt;
• Databases&lt;br&gt;
• Other microservices&lt;br&gt;
• Secrets&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 Source code: &lt;a href="https://github.com/r3xakead0/minikube-telepresence-demo" rel="noopener noreferrer"&gt;github&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🌟 Why you should care
&lt;/h2&gt;

&lt;p&gt;• ⚡ Much faster development cycles&lt;br&gt;
• 🧪 Real debugging against real infrastructure&lt;br&gt;
• 🛡️ Lower risk (no touching prod clusters)&lt;br&gt;
• 🧩 Perfect fit for Kubernetes &amp;amp; microservices&lt;/p&gt;

&lt;p&gt;If you work with Kubernetes daily, Telepresence can seriously change how fast — and how comfortably — you build software.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://telepresence.io/" rel="noopener noreferrer"&gt;Telepresence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>telepresence</category>
    </item>
    <item>
      <title>Ejecuta tus servicios de Kubernetes desde tu local con Telepresence</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Wed, 07 Jan 2026 18:51:56 +0000</pubDate>
      <link>https://dev.to/chainiz/ejecuta-tus-servicios-de-kubernetes-desde-tu-local-con-telepresence-c44</link>
      <guid>https://dev.to/chainiz/ejecuta-tus-servicios-de-kubernetes-desde-tu-local-con-telepresence-c44</guid>
      <description>&lt;h2&gt;
  
  
  ¿Qué es Telepresence?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://telepresence.io/" rel="noopener noreferrer"&gt;Telepresence&lt;/a&gt; es una herramienta de desarrollo que te permite conectar tu computadora local a un clúster de Kubernetes como si tu aplicación local estuviera corriendo dentro del cluster.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;En pocas palabras:&lt;br&gt;
🔥 Te deja desarrollar y depurar servicios de Kubernetes sin construir imágenes Docker ni hacer deploy cada vez.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿Para qué se usa Telepresence?
&lt;/h2&gt;

&lt;p&gt;Se usa principalmente para:&lt;/p&gt;

&lt;p&gt;✅ Desarrollo local contra Kubernetes real&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tu app corre localmente&lt;/li&gt;
&lt;li&gt;Pero consume Services, ConfigMaps, Secrets y APIs reales del cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Interceptar tráfico de un Service&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redirige el tráfico que iba a un Service del cluster&lt;/li&gt;
&lt;li&gt;Hacia tu aplicación local&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Debugging rápido&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puedes usar logs locales&lt;/li&gt;
&lt;li&gt;Debuggers (VS Code, IntelliJ)&lt;/li&gt;
&lt;li&gt;Hot reload&lt;/li&gt;
&lt;li&gt;Breakpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🙌 Todo sin tocar el cluster remoto y/o productivo.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿Por qué Telepresence es de gran ayuda?
&lt;/h2&gt;

&lt;p&gt;Porque soluciona dolores reales del desarrollo con Kubernetes.&lt;/p&gt;

&lt;p&gt;❌ Sin Telepresence (El problema tradicional)&lt;/p&gt;

&lt;p&gt;Cada cambio implica:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cambiar código&lt;/li&gt;
&lt;li&gt;docker build&lt;/li&gt;
&lt;li&gt;docker push&lt;/li&gt;
&lt;li&gt;kubectl apply&lt;/li&gt;
&lt;li&gt;Esperar el rollout&lt;/li&gt;
&lt;li&gt;Probar&lt;/li&gt;
&lt;li&gt;Repetir 😵‍💫&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto puede tomar minutos por cambio.&lt;/p&gt;

&lt;p&gt;✅ Con Telepresence&lt;/p&gt;

&lt;p&gt;El flujo se vuelve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cambias código local&lt;/li&gt;
&lt;li&gt;Guardas&lt;/li&gt;
&lt;li&gt;Pruebas inmediatamente&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;⏱️ Cambios en segundos, no minutos.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿Cómo funciona Telepresence?
&lt;/h2&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%2F9n45x6yc2qkj49yxakt9.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%2F9n45x6yc2qkj49yxakt9.png" alt="flow" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flujo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se conecta al cluster&lt;/li&gt;
&lt;li&gt;Inserta un proxy (Traffic Manager)&lt;/li&gt;
&lt;li&gt;Intercepta el tráfico de un Service&lt;/li&gt;
&lt;li&gt;Lo envía a tu máquina&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Desde Kubernetes:&lt;br&gt;
👉 Parece que tu app sigue ahí, pero en realidad está en tu computadora.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Ejemplo
&lt;/h2&gt;

&lt;p&gt;Sin Telepresence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;echo Service → Pod en Kubernetes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con Telepresence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;echo Service → tu laptop (localhost:9000)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y el resto del cluster se mantiene igual&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Otros microservicios&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 Codigo fuente: &lt;a href="https://github.com/r3xakead0/minikube-telepresence-demo" rel="noopener noreferrer"&gt;minikube-telepresence-demo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Beneficios
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Desarrollo muchísimo más rápido&lt;/li&gt;
&lt;li&gt;Debug real contra infraestructura real&lt;/li&gt;
&lt;li&gt;Menor riesgo (no tocas ambientes remotos y/o productivos)&lt;/li&gt;
&lt;li&gt;Ideal para Kubernetes + microservicios&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Ejecuta Qwen3 + Ollama + Open WebUI en Docker: Tu propio AI Chat local 🧠</title>
      <dc:creator>Afu Tse (Chainiz)</dc:creator>
      <pubDate>Fri, 02 Jan 2026 22:15:41 +0000</pubDate>
      <link>https://dev.to/chainiz/ejecuta-qwen3-ollama-open-webui-en-docker-tu-propio-ai-chat-local-405m</link>
      <guid>https://dev.to/chainiz/ejecuta-qwen3-ollama-open-webui-en-docker-tu-propio-ai-chat-local-405m</guid>
      <description>&lt;p&gt;¿Quieres montar tu propio entorno de IA local con un modelo potente sin pagar por la nube? &lt;/p&gt;

&lt;p&gt;Con el repositorio &lt;strong&gt;qwen3-container&lt;/strong&gt; puedes hacerlo fácilmente usando Docker Compose, Ollama y Open WebUI 👇&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;a href="https://github.com/r3xakead0/qwen3-container" rel="noopener noreferrer"&gt;código fuente&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔥 En este post te explico qué es, cómo funciona y por qué es útil este proyecto.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 ¿Qué es Qwen3?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ollama.com/library/qwen3" rel="noopener noreferrer"&gt;Qwen3&lt;/a&gt;&lt;/strong&gt; es la última generación de modelos de lenguaje grande (LLM) de &lt;strong&gt;Alibaba Cloud&lt;/strong&gt; — disponible en múltiples tamaños y con capacidades impresionantes de generación de texto, razonamiento y tareas complejas.  ￼&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 ¿Qué hace este repositorio?
&lt;/h2&gt;

&lt;p&gt;El proyecto qwen3-container ofrece un stack listo para producción local que combina:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Ollama&lt;/strong&gt; — runtime local para LLMs, con Qwen3 precargado&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Open WebUI&lt;/strong&gt; — interfaz web tipo chat para interactuar con el modelo&lt;/li&gt;
&lt;li&gt;🐳 &lt;strong&gt;Docker + Docker Compose&lt;/strong&gt; — para levantar todo con un solo comando&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto te permite tener un chat local basado en Qwen3 sin depender de APIs externas ni costos por tokens.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ ¿Cómo funciona el stack?
&lt;/h2&gt;

&lt;p&gt;El proyecto define dos servicios principales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;📌 &lt;strong&gt;ollama-qwen3&lt;/strong&gt;&lt;br&gt;
Ejecuta el modelo Qwen3 dentro de Ollama y expone una API REST en &lt;code&gt;localhost:11434&lt;/code&gt;.  ￼&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📌 &lt;strong&gt;open-webui&lt;/strong&gt;&lt;br&gt;
Proporciona una interfaz de chat en &lt;code&gt;localhost:3000&lt;/code&gt; desde el navegador, donde puedes conversar con Qwen3 sin programar nada.  ￼&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Ffaogmfdgsyddgonyixsh.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%2Ffaogmfdgsyddgonyixsh.png" alt="arquitectura" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Instalación rápida
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Clona el repositorio
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/r3xakead0/qwen3-container.git
&lt;span class="nb"&gt;cd &lt;/span&gt;qwen3-container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configura tu .env (puedes basarte en .env.example)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Genera un secreto seguro&lt;/span&gt;
openssl rand &lt;span class="nt"&gt;-hex&lt;/span&gt; 32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Levanta los contenedores
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F1kdt4o4o5eze7mu30i87.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%2F1kdt4o4o5eze7mu30i87.png" alt="docker compose" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Acceder&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📡 API: &lt;a href="http://localhost:11434" rel="noopener noreferrer"&gt;http://localhost:11434&lt;/a&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%2Fsqyiza7yja4yl3okoxdj.png" alt="api" width="388" height="155"&gt;
&lt;/li&gt;
&lt;li&gt;🧠 UI chat: &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&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%2Fr2ol0f6n01iliog32cua.png" alt="chat" width="800" height="586"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 ¿Por qué usar esto?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Privacidad y control:&lt;/strong&gt; tus datos nunca salen de tu máquina&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Sin dependencia de la nube:&lt;/strong&gt; ni tokens ni facturación&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Desarrollo rápido:&lt;/strong&gt; ideal para prototipos, PoCs o herramientas internas&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Personalización:&lt;/strong&gt; puedes enchufar el API de Ollama a tus propias apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este stack es ideal si estás trabajando con soluciones de IA local o quieres explorar modelos open-weight como Qwen3 sin pagar por servicios externos.  ￼&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;a href="https://www.alibabacloud.com/blog/build-your-own-local-qwen-3-ai-with-ollama-%2B-open-webui-docker_602358" rel="noopener noreferrer"&gt;Articulo de referencia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧩 Recomendaciones
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Cambia el valor de WEBUI_SECRET_KEY por un secreto largo y seguro.  ￼&lt;/li&gt;
&lt;li&gt;👉 Una vez inicializado, deshabilita el registro de nuevos usuarios para proteger tu instancia. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>qwen</category>
      <category>llm</category>
      <category>docker</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
