<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Cloud Hasta en la Sopa</title>
    <link>https://cloudhastaenlasopa.com/posts/</link>
    <description>Recent content in Posts on Cloud Hasta en la Sopa</description>
    <image>
      <title>Cloud Hasta en la Sopa</title>
      <url>https://cloudhastaenlasopa.com/images/Portada.jpg</url>
      <link>https://cloudhastaenlasopa.com/images/Portada.jpg</link>
    </image>
    <generator>Hugo -- 0.163.0</generator>
    <language>es-ES</language>
    <lastBuildDate>Mon, 15 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cloudhastaenlasopa.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Reflexiones desde el AWS Ambassador Summit 2026</title>
      <link>https://cloudhastaenlasopa.com/2026/06/reflexiones-desde-el-aws-ambassador-summit-2026/</link>
      <pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2026/06/reflexiones-desde-el-aws-ambassador-summit-2026/</guid>
      <description>Tras asistir al AWS Ambassador Summit en Seattle, comparto mis reflexiones sobre el estado de la industria: agentes en producción, la importancia del dato, arquitecturas deficientes y el gap entre C-Level y los equipos técnicos. Sin NDA, solo opiniones honestas de lo que vi y escuché entre 120 expertos de 40 países.</description>
      <content:encoded><![CDATA[<h1 id="reflexiones-sobre-el-aws-ambassador-summit">Reflexiones sobre el AWS Ambassador Summit</h1>
<h2 id="introducción">Introducción</h2>
<p>Este es el segundo año que puedo asistir al AWS Ambassador Summit en Seattle gracias a Logicalis Spain.</p>
<p>El AWS Ambassador Summit es un evento de 3 días en el que todos los <a href="https://aws.amazon.com/es/partners/ambassadors/">AWS Ambassador</a> podemos ir a aprender y hacer comunidad.</p>
<p>En estos 3 días AWS nos cuenta muchas cosas que están bajo NDA y que no puedo contar, pero hay otras que sí.</p>
<p>El evento tiene diferentes tipos de charlas, desde charlas más estratégicas para Partners (recordad que esto me lo sponsoriza mi empresa), charlas sobre nuevos servicios o novedades (NDA), charlas estratégicas sobre AWS (hacia dónde vamos), mesas redondas con los Service Teams de AWS (muchas preguntas y roadmap), un workshop de agentes (basado en la FIFA World Cup 2026) y varios eventos para socializar.</p>
<p>Además, durante este evento podemos disfrutar del conocimiento de mucha gente importante de AWS que participa en las diferentes charlas como <a href="https://www.linkedin.com/in/rp0229">Rahul Pathak</a>, <a href="https://www.linkedin.com/in/rudychetty">Rudy Chetty</a>, <a href="https://www.linkedin.com/in/jigart/">Jigar Thakkar</a>, <a href="https://www.linkedin.com/in/lauragrit/">Laura Grit</a>, e incluso este año tuvimos la suerte de que se pasara a saludar <a href="https://www.linkedin.com/in/swaminathansivasubramanian/">Swami Sivasubramanian</a>.</p>
<p>Pero qué es lo más importante del evento, no son ni las charlas ni los roadmaps, ni estar en las oficinas de AWS en Seattle, ni conocer a Jeff Barr en persona (aunque esto último mola mucho).</p>
<p>Lo más importante es que nos juntamos más de 120 Ambassadors de 40 países diferentes y podemos compartir nuestros puntos de vista, nuestros problemas (que se parecen mucho) y cómo vemos las cosas a futuro.</p>
<p>Esto último puede parecer hasta contraproducente para nuestras empresas, pero realmente es todo lo contrario, porque en casi el 95% de los casos no compartimos región de negocio e incluso si lo compartimos no solemos competir directamente, además de que obviamente no nos contamos las estrategias de nuestras empresas, pero sí discutimos sobre lo que vemos.</p>
<p>Os puedo decir que no hay otro sitio en el que sienta un síndrome del impostor tan grande como aquí y esto no es falsa humildad, sé que soy excepcional en mi trabajo, pero es que dentro de este programa está lo mejor de lo mejor, el ser un crack es el mínimo necesario.</p>
<h2 id="agentes-agentes-y-más-agentes">Agentes, Agentes y más Agentes.</h2>
<p>No creo que os sorprenda si os digo que todo ha girado en torno a los agentes y todas las nuevas capacidades que se van a desbloquear próximamente.</p>
<p>Aquí hay algo que sospechaba: los roadmaps a un año se han terminado. Con toda la revolución Agentic la industria ha llegado a velocidades absurdas. Tanto que ahora mismo pensar en lo que puede venir dentro de un año ha dejado de tener sentido, podemos hacer esbozos de hacia dónde queremos ir, pero no podemos plantearnos revoluciones a un año cuando dentro de unos meses todo puede cambiar.</p>
<p>Pero aquí han surgido varias cosas que me gustaría comentar con más detalle.</p>
<h3 id="la-importancia-del-dato">La importancia del dato.</h3>
<p>Es verdad que la industria se mueve muy rápido, pero a veces nos tenemos que parar a reflexionar.
Por mucho que hagamos agentes muy inteligentes que estén coordinados entre sí, que tengan unos prompts increíbles con integraciones vía MCP conectadas a tus APIs, bases de datos y herramientas internas, si el dato que consumen es malo o está desactualizado, no sirven de nada y sus respuestas van a ser malas.</p>
<p>Por poner un ejemplo, un sistema agéntico para automatizar las operaciones, si está tirando de procedimientos desfasados o solapados o incluso a los que les faltan pasos (porque el operador los conoce), va a fallar o realizar cosas que no queremos.</p>
<p>Y hablando entre nosotros, es algo bastante habitual, en muchos casos nos estamos encontrando que el paso de mejorar, gobernar y basarse en datos no se ha realizado, pero queremos implantar sistemas agénticos ya.</p>
<h3 id="muchas-arquitecturas-son-deficientes">Muchas arquitecturas son deficientes.</h3>
<p>Cuando dos arquitectos se juntan, siempre van a salir las miserias, así que imaginaros si nos juntamos más de 100.</p>
<p>Por eso salió el caso de PocketSO, es verdad que es un caso muy límite y que el problema no era el agente en sí, ni siquiera que tuviese muchos permisos (aunque parte del problema era).</p>
<p>El problema principal es que la arquitectura de la solución no seguía las buenas prácticas mínimas, los entornos no estaban separados, los backups estaban en los mismos volúmenes y se podían modificar, etc.</p>
<p>Es verdad que dar permisos root a un agente, sin definir límites es un problema, pero hay muy malas arquitecturas en producción, es algo que todos sabemos, que todos sufrimos y que no es algo local, pasa en todo el mundo.</p>
<p>Y esto es algo que vamos a ver mucho por desgracia, de hecho en ocasiones lo vemos sin necesidad de que esté la IA involucrada.</p>
<p>Alguien no sabía que tenía que hacer un ritual arcano antes de una subida a producción y el entorno entero se ha caído durante horas. Suena a broma pero muchas veces hacemos cosas mal hechas simplemente porque ya las tenemos automatizadas y en nuestro contexto, cuando alguien sin ese contexto lo ejecuta, se produce una caída a producción de 20 horas (nunca me ha pasado&hellip;).</p>
<p>Esto es algo que en general preocupaba mucho, dar las llaves del calabozo a un agente sin ese contexto y sin solucionar estos problemas puede ser muy problemático.</p>
<h3 id="el-gap-entre-c-level-y-la-capa-técnica">El Gap entre C-Level y la capa Técnica.</h3>
<p>Esto es algo que también ha salido mucho en nuestras conversaciones: hay una presión en los C-Level por usar sistemas agénticos que es desmesurada y en muchas ocasiones absurda.</p>
<p>No me malinterpretéis, probablemente muchos de nosotros llevemos usando agentes, asistentes y GenAI desde el inicio de esta revolución, pero también gracias a esto sabemos de sus limitaciones.</p>
<p>Sabemos cómo usar los prompts, añadir contexto a las steering files, añadir Skills, revisar por qué el prompt se está saltando una instrucción importante, saber que un contexto gigante es casi peor que uno pequeño, aprender a estructurar los contextos para facilitar su uso, etc. Si os habéis pegado con agentes sabéis de qué hablo.</p>
<p>El problema es que todos estamos sufriendo en muchas ocasiones que alguien con un prompt mínimo (y probablemente malo) intenta decirte cómo hacer tu trabajo, cómo montar una arquitectura, incluso retando tus decisiones sin poder defender lo que la IA le ha dicho (la frase de &ldquo;me lo ha dicho Claude o ChatGPT&rdquo; se usa demasiado). Esto está produciendo un gap gigante en la implantación agéntica.</p>
<p>En muchos casos la visión ejecutiva es muy sencilla, cuando esta implementación tiene muchas más aristas de las que creemos.</p>
<p>Algo que me ha pasado últimamente es que me llega una arquitectura hecha con IA para validarla porque hay que implementarla ya y resulta que no hay por donde cogerla, no se ha tenido en cuenta nada del contexto de lo que existe actualmente, si preguntas cosas por un modelo de datos o como has pensado la seguridad te miran raro.</p>
<p>El problema no es que use IA para explorar ideas (eso está genial), el problema es confundir un mal output de un LLM con un plan validado (OjO que un agente bien montado lo puede hacer). Y nosotros nos quedamos entre la espada y la pared: o lo rechazamos y parecemos resistentes al cambio, o lo aceptamos y firmamos una deuda técnica que vamos a pagar durante años.</p>
<h3 id="qué-es-un-agente">Qué es un Agente.</h3>
<p>Los agentes son el futuro, pero todo es un agente.</p>
<p>Esto puede parecer absurdo, pero todos estamos viendo que en muchas ocasiones se habla de agentes, cuando se está usando un automatismo de toda la vida o incluso peor, gente que está convirtiendo en agentes automatizaciones de toda la vida, haciendo llamadas a un LLM solamente para justificar que están usando agentes.</p>
<p>He visto cosas que no creería nadie: un &ldquo;agente&rdquo; que llama a un LLM para parsear un JSON que tiene un esquema fijo, otro que usa Claude para decidir si un número es mayor que otro, y mi favorito personal, uno que invoca un modelo de lenguaje para hacer un <code>grep</code> en un fichero de log. Eso no es un agente, eso es quemar dinero con estilo.</p>
<p>Los agentes son fundamentales cuando hay ambigüedad, cuando necesitas razonamiento, cuando el camino no es determinista. Ahí es donde el stack tiene sentido: un modelo en Bedrock que razona, Agent Core que le da identidad y gobernanza, Strands SDK para orquestar el loop, y MCP para conectar con el mundo exterior. Eso es un agente. Pero si tu flujo es &ldquo;si A entonces B&rdquo;, eso es un <code>if</code> de toda la vida y no necesita un LLM por detrás.</p>
<p>Creo que todos hemos visto a gente usar agentes y llamadas a un LLM para hacer algo que hace un script o tool que ya existe o que es sencillo de implantar. Y el problema no es solo el coste (que también), sino que estás añadiendo complejidad, indeterminación y latencia a algo que antes era simple, instantáneo y predecible.</p>
<h3 id="el-uso-de-asistentes-a-nivel-de-proyecto">El uso de asistentes a nivel de proyecto.</h3>
<p>Este fue uno de los últimos temas, además de porque fue algo que vimos el último día con Laura Grit y cómo AWS había usado un approach nuevo para el Proyecto Mantle usando equipos integrados con agentes.</p>
<p>Esto me pareció bastante interesante, porque a día de hoy en la mayoría de proyectos se utilizan los asistentes y agentes de forma masiva, pero en muchas ocasiones sin un control.</p>
<p>Así que me parece interesante abrir este debate y empezar a gestionar los equipos con un enfoque agéntico, sabiendo cómo podemos mejorar y acelerar los proyectos con una calidad adecuada.</p>
<p>Algo interesante era que todo el equipo tiene un steering compartido y por otro lado que hay que revisar el código para conocerlo, entenderlo y poder defenderlo. Si no eres capaz de hacer estas 3 cosas, la calidad de tus proyectos se va a resentir.</p>
<p>Ojo, esto no significa hacerlo todo a mano, sino poder defender las cosas que vas a implantar y no utilizar el comodín de &ldquo;es que esto me lo pasó mal mi agente de IA&rdquo;.</p>
<h3 id="nadie-va-a-pensar-en-los-juniors">Nadie va a pensar en los Juniors.</h3>
<p>Esto es algo que me preocupa bastante. Ahora mismo no me gustaría ser alguien que está estudiando con un panorama que puede ser desolador, muchas de las tareas que hacían los perfiles Junior están siendo sustituidas por agentes y estamos perdiendo ese conocimiento.</p>
<p>Si no hay Juniors ahora, no vamos a tener Seniors en el futuro y parece que en muchos casos estamos olvidándonos de esto.</p>
<p>Antes un Junior aprendía a prueba y error, peleándose con su código, entendiendo por qué algo no funcionaba. Esos fallos eran parte del camino para convertirse en Senior. Si no permitimos que los Juniors crezcan, tenemos un problema muy grande.</p>
<p>No tengo una solución. Quizás el rol del Junior evolucione hacia saber dirigir agentes, validar outputs y entender qué está haciendo el agente. Pero eso no es sencillo y creo que estamos muy lejos de estar preparados, además de que estamos obviándolos de esta ecuación.</p>
<h2 id="conclusión">Conclusión.</h2>
<p>Me vuelvo de Seattle con una sensación de que todo se está moviendo muy rápido, quizás demasiado y a lo mejor no todo el mundo está preparado.</p>
<p>Por un lado, la velocidad a la que se mueve todo es emocionante. Los agentes ya no son una promesa, son una realidad en producción que está generando valor medible. Y estar rodeado de 120 personas que viven esto en primera persona, en contextos tan diferentes como Japón, India, Noruega o Brasil, te da una perspectiva que no consigues en ningún otro sitio.</p>
<p>Por otro lado, hay una desconexión preocupante entre lo que la tecnología puede hacer y lo que las organizaciones están preparadas para absorber. Los datos siguen sin gobernarse, las arquitecturas siguen sin seguir buenas prácticas y el gap entre lo que pide la dirección y lo que puede ejecutar la capa técnica sigue creciendo.</p>
<p>Y esto no es solo nuestra impresión. Los datos de 2026 son demoledores: según MIT, el 95% de los pilotos de IA generativa no producen impacto medible en la cuenta de resultados. Forrester confirma que el 88% de los pilotos de agentes nunca llegan a producción. Y el 54% de los C-suite admiten que adoptar IA &ldquo;está destrozando su empresa&rdquo; (Writer.com, 2026). El patrón de fracaso no es técnico — es operacional: datos frágiles, gobernanza inexistente y cero feedback loop tras el lanzamiento.</p>
<p>Lo llevamos diciendo años con la migración a cloud, con el modelo de empresas basadas en datos, con los inicios de Machine Learning y parece que con los agentes vamos a repetir los mismos errores (correr antes de saber andar).</p>
<p>Mi takeaway principal: no importa lo inteligente que sea tu agente si le das basura como entrada. Y no importa cuántos agentes despliegues si tu arquitectura es un castillo de naipes.</p>
<p>La revolución agéntica no es solo un problema tecnológico. Es un problema de datos, de arquitectura, de cultura y de personas. Y eso, por mucho que avance la IA, sigue siendo responsabilidad nuestra.</p>
<p>Ahora toca aplicar lo aprendido. Pero no todo fue darle vueltas a la cabeza en Seattle, también hay que desconectar y recordar por qué merece la pena cruzar el charco. Os dejo con el Monte Rainier como prueba de que no todo fueron salas de reuniones.</p>
<h2 id="rainer"><img alt="Rainer" loading="lazy" src="/post006/Rainer_es.png"></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Kiro y Amazon Q Developer CLI: La revolución Agentic en nuestro día a día</title>
      <link>https://cloudhastaenlasopa.com/2025/11/kiro-y-amazon-q-developer-cli-la-revoluci%C3%B3n-agentic-en-nuestro-d%C3%ADa-a-d%C3%ADa/</link>
      <pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2025/11/kiro-y-amazon-q-developer-cli-la-revoluci%C3%B3n-agentic-en-nuestro-d%C3%ADa-a-d%C3%ADa/</guid>
      <description>Descubre cómo Kiro y Amazon Q Developer CLI materializan la revolución Agentic en herramientas reales. Exploramos casos de uso prácticos, el Agentic Loop en acción y cómo estas herramientas están transformando la colaboración humano-agente en el desarrollo de software.</description>
      <content:encoded><![CDATA[<p>En la <a href="../La_Revoluci%C3%B3n_Agentic/">primera parte</a> hablamos de la revolución Agentic: la evolución de modelos tradicionales a agentes inteligentes, de qué era el Agentic Loop, de MCP, de Strand Agents y cómo pueden funcionar en conjunto para hacer maravillas.</p>
<p>Ahora es momento de ver esas maravillas, que en el caso de AWS se han materializado en: <strong>Amazon Q Developer CLI</strong> y <strong>Kiro</strong>.</p>
<p><strong>En este Post vamos a ver:</strong></p>
<ul>
<li>Amazon Q Developer CLI: La evolución natural del desarrollo asistido por IA</li>
<li>Kiro: El agente de IA que está redefiniendo la automatización</li>
<li>Casos de uso revolucionarios que antes eran imposibles</li>
<li>El futuro de la colaboración humano-agente</li>
<li>Por qué esta revolución es diferente a todo lo anterior</li>
</ul>
<h1 id="amazon-q-developer-cli">Amazon Q Developer CLI</h1>
<h2 id="más-allá-de-un-asistente-de-código-o-un-chat-conversacional">Más Allá de un Asistente de Código o un Chat conversacional.</h2>
<p>Hace ya un tiempo, en el re:Invent de 2023 AWS lanzó Amazon Q. En ese momento me pareció el mejor lanzamiento de AWS, pero con el tiempo el globo se fue desinchando y la verdad aunque era útil para algunas cosas, me resultaba poco útil, incluso dándome recomendaciones que no me gustaban.</p>
<p>En marzo de 2024 AWS lanzó <strong>AWS Q Developer CLI</strong> y aquí sí que teníamos una herramienta que es un Game Changer.</p>
<p>Y vamos a ver qué es <strong>AWS Q Developer CLI</strong> y qué se diferencia de lo que teníamos antes.</p>
<h2 id="q-developer-cli-un-asistente-de-ia-agentic-en-tu-cli">Q Developer CLI, Un Asistente de IA Agentic en tu CLI.</h2>
<p>A diferencia de otros asistentes, incluido el propio Q Developer (sin CLI), este se integra en tu propio CLI, de forma que te permite interactuar con tu propio PC y utilizar sus herramientas para ayudarte.</p>
<p>Q Developer te proponía mejoras en tu código o te permitía generar código en base a interacciones con él, pero Q Developer CLI, es capaz de leerse un directorio entero de código, documentación, archivos excel y en base a ellos generar código o incluso ejecutar acciones.</p>
<p>Una mejora clara es que es un asistente dentro de mi propio PC, con mi propio contexto, es más puede leer ficheros (a los que yo le dé acceso) y ejecutar acciones de SO (las que yo permita), de forma que puede ser autónomo en múltiples tareas.</p>
<p>Un ejemplo que suelo comentar, es algo que habitualmente me pasa, algún problema con alguna SCP que he puesto yo. Descubro que tengo alguna SCP (que la mayoría de las veces he creado yo) que me está bloqueando una acción, pero como soy un despistado, no me acuerdo de qué SCP es y tengo que investigarlo, es algo que es sencillo, pero requiere tiempo.</p>
<p>Con Q Developer CLI  puedo darle acceso en modo lectura a mi cuenta master, a mi cuenta problemática e incluso a mi cuenta de Logs, explicarle mi problema y que me ayude a identificarlo.</p>
<p>No es una tarea compleja pero es muy tediosa, además requiere leer muy bien las políticas.</p>
<p>Q es capaz de revisar qué acción se me está denegando, relacionarla con mis SCPs y proponerme una solución, e incluso, si le dejo, ejecutarla él de forma autónoma.</p>
<p>Esto es un ejemplo, pero hay muchos como pedirle que me ayude a identificar problemas de costes o incluso que me simule el coste de una arquitectura.</p>
<p>Por otro lado me centro mucho en AWS, pero también puede revisar documentos que tengo en mi PC y generar nuevos, ayudarme con problemas HTML en una web, o incluso ayudarme con problemas de rendimiento.</p>
<h1 id="kiro">Kiro</h1>
<h2 id="qué-es-kiro">¿Qué es Kiro?</h2>
<p>En julio de 2025 AWS anunció <strong>Kiro</strong> que es un IDE nativo en IA Agentic. Es una clara evolución de Q Developer CLI pero más orientado a un entorno para desarrolladores.</p>
<p>A diferencia de los editores tradicionales con plugins de IA, está diseñado desde cero como un agente inteligente que puede:</p>
<ul>
<li><strong>Entender el contexto completo</strong> del proyecto y sus dependencias.</li>
<li><strong>Ejecutar tareas complejas</strong> de forma autónoma con supervisión humana.</li>
<li><strong>Mantener un contexto persistente</strong> de decisiones y patrones del proyecto.</li>
<li><strong>Integrar herramientas</strong> a través de MCP (Model Context Protocol).</li>
<li><strong>Generar código</strong> de forma autónoma.</li>
</ul>
<h2 id="más-allá-del-vibe-coding-habitual">Más allá del Vibe Coding habitual.</h2>
<p>Una diferencia de Kiro es su método de funcionamiento, en vez de hacer Vibe Coding, Kiro es capaz de definir un Spec para un proyecto de forma que haga los siguientes pasos:</p>
<p><strong>Toma de Requisitos</strong>: Generando unos requisitos legibles del proyecto en base a nuestro contexto.
<strong>Generación de Diseño</strong>: Una vez que los requisitos estén definidos, Kiro va a generar un diseño en base a estos.
<strong>Generación de Tareas</strong>: Cuando ya tengamos un diseño cerrado, Kiro generará una serie de tareas para ejecutar el proyecto en base a los requisitos y el diseño acordado.</p>
<p>Cada uno de estos puntos requiere una validación manual, en esta validación podemos aceptar lo que Kiro propone (No lo recomiendo) o revisar cuidadosamente los requisitos, diseño y tareas para que el proyecto sea exitoso.</p>
<h3 id="ejecución-autónoma">Ejecución Autónoma</h3>
<p>Una vez definido el plan, Kiro puede ejecutar las tareas de forma independiente, desde la generación de código hasta la configuración de infraestructura, pasando por la gestión de dependencias.</p>
<h3 id="gestión-de-contexto-avanzada">Gestión de Contexto Avanzada</h3>
<p>Una de las ventajas de este modelo, es que Kiro tiene un contexto de todo el proyecto y no solo de secciones separadas, además cada interacción de cada tarea va alimentando el contexto, de forma que la ejecución es muy completa.</p>
<p>Además al usar las Specs que yo he validado, Kiro va a seguir las instrucciones sin salirse del camino.</p>
<p>Esto además se potencia en una funcionalidad de Kiro llamada Agent Steering que nos va a permitir realizar una estandarización de convenciones en Kiro, que además podemos compartir no solamente a nivel de todas nuestras interacciones con Kiro en este proyecto, sino las de todo el equipo.</p>
<p>Permitiendo que todo el desarrollo siga las mismas reglas que nosotros imponemos (Naming, Uso de Librerias, Alineamiento del proyecto, etc)</p>
<h2 id="el-impacto-de-kiro-en-el-desarrollo">El Impacto de Kiro en el Desarrollo</h2>
<h3 id="antes-de-kiro">Antes de Kiro</h3>
<pre tabindex="0"><code>Desarrollador/Ingeniero → Planifica → Codifica → Prueba → Despliega → Mantiene
</code></pre><h3 id="con-kiro">Con Kiro</h3>
<pre tabindex="0"><code>Desarrollador/Ingeniero → Define objetivos → Kiro asiste en todo el ciclo → Desarrollador supervisa y ajusta.
</code></pre><p>Esta transformación permite a los desarrolladores centrarse más en la estrategia y la creatividad, mientras Kiro maneja gran parte de la ejecución táctica bajo supervisión.</p>
<p>Obviamente el modelo no es perfecto y Kiro va a cometer errores, de ahí que requiera supervisión, pero va a dar superpoderes a nuestros desarrolladores/ingenieros para ser más eficientes.</p>
<h1 id="mcp-para-aws-q-developer-cli-y-kiro">MCP para AWS Q Developer CLI y Kiro</h1>
<h3 id="cómo-mcp-potencia-estas-herramientas">Cómo MCP Potencia Estas Herramientas</h3>
<p>Tanto Kiro como Amazon Q Developer CLI se aprovechan de MCP (Model Context Protocol) para extender sus capacidades de forma nativa</p>
<p>De esta forma pueden ejecutar herramientas, desde leer o modificar ficheros en local, a conectarse a herramientas externas, como puede ser la propia AWS, también pueden leer documentación oficial, mejores prácticas e incluso problemas conocidos.</p>
<p>Esto hace que si como herramientas individuales son ya muy potentes, el poder interaccionar con otras herramientas los potencia todavía más.</p>
<p>Por ejemplo en muchas ocasiones podéis pedir que instalen una herramienta para ejecutar una acción, como leerse un CSV gigantesco para hacer una correlación de datos.</p>
<h3 id="el-poder-de-la-estandarización">El Poder de la Estandarización</h3>
<p>Ya hablamos en el anterior artículo que MCP es muy interesante porque es un estándar abierto y permite la integración con muchos servicios, que cada día crecen más.</p>
<p>Esta integración MCP significa que:</p>
<ul>
<li>Cualquier herramienta que implemente MCP funciona automáticamente.</li>
<li>Podemos crear nuestros propios MCP servers para mejorar nuestros contextos.</li>
<li>El ecosistema de MCP está creciendo de forma orgánica y colaborativa.</li>
<li>No hay vendor lock-in en las integraciones.</li>
</ul>
<p>Os recomiendo volver a echar un vistazo a los <a href="https://awslabs.github.io/mcp/">MCP que tiene la propia AWS</a>.
Con ellos vais a poder tener una potencia increíble.</p>
<h1 id="por-qué-esta-revolución-es-diferente">Por Qué Esta Revolución es Diferente</h1>
<p>Hasta ahora, el post es un resumen de capacidades, pero en qué me ayuda <strong>Kiro</strong> o <strong>Amazon Q Developer CLI</strong> y por qué es mejor que otras herramientas de IA que usaba hasta ahora.</p>
<p>Vale ya he dicho esto mucho, pero qué significa este cambio.</p>
<p>Hasta ahora yo podía preguntar a cualquier IA y esta me ayudaba, pero no ejecutaba acciones por mí, es verdad que me podía generar mis propios agentes y podría llamarlos, pero es complejo.</p>
<p>En este caso puedo ayudarme de estas herramientas para ejecutar mi día a día, de forma sencilla.</p>
<h2 id="no-es-solo-otra-mejora-incremental">No es Solo Otra Mejora Incremental</h2>
<h3 id="cambio-cualitativo-no-cuantitativo">Cambio Cualitativo, No Cuantitativo</h3>
<p>No voy a usar un LLM revolucionario, es más tanto <strong>Kiro</strong> como <strong>Amazon Q Developer CLI</strong> utilizan los modelos de Anthropic, pudiendo elegir entre las versiones de Claude Sonnet mas recientes.</p>
<p>Como veis ni siquiera son los modelos más potentes de Anthropic, pero cómo los usamos tiene más sentido, el Loop de Agentic va a dividir las tareas en multiples tareas que ejecutara secuencialmente, permitiendo solucionar problemas y mejorar en la respuesta.</p>
<h3 id="transformación-del-rol">Transformación del Rol</h3>
<p>En vez de ejecutar o escribir código nuestro rol cambia a definir la estrategia, es decir puedo pedir a <strong>Amazon Q Developer CLI</strong> que me ayude a encontrar un problema y él ejecutará el diagnóstico por mí y puedo ir guiándole hasta encontrar la solución más adecuada e incluso me ayudará a implementarla.</p>
<p>O en <strong>Kiro</strong> puedo definir un nuevo proyecto y definir los requisitos y guiar el desarrollo.</p>
<p>Además estas herramientas van a ser proactivas y pueden avisarnos de problemas o malas implementaciones.</p>
<h3 id="mejora-de-los-promts">Mejora de los promts</h3>
<p>Ya no necesito ser un ingeniero de Prompts para tener una respuesta coherente, una de las grandes ventajas de este modelo, es que el contexto va creciendo según las interacciones y aprendiendo de los errores. Si el propio modelo detecta un error va a solucionarlo, pero además guarda el contexto de ese error, además va a poder ejecutar herramientas para ganar contexto, como leer un archivo con requerimientos, leer un ejemplo de lo que espero, consultar documentación o ejecutar acciones remotas en una cuenta de AWS u otro proveedor.</p>
<h2 id="el-efecto-multiplicador">El Efecto Multiplicador</h2>
<h3 id="productividad-exponencial">Productividad Exponencial</h3>
<p>Una de las mejoras de estas herramientas es que nos permiten avanzar más rápido, en vez de realizar tareas tediosas, como leernos un YAML (No me ha pasado nunca 🤦) para encontrar que hemos puesto mal un espacio y roto todo el fichero, ellas pueden hacerlo por nosotros de forma rápida.</p>
<p>Además permiten ir optimizando lo que hacemos al vuelo y nos permiten implementarlo a nuestro stack completo.</p>
<p>Imaginad que en mitad del desarrollo descubrimos una forma de mejorar el rendimiento de nuestra APP y que es aplicable a otras áreas, hasta ahora teníamos que tener identificadas estas áreas y aplicar la mejora, ahora estas herramientas lo pueden hacer por nosotros.</p>
<h3 id="democratización-del-desarrollo">Democratización del Desarrollo</h3>
<p>Estas herramientas además ayudan a que capacidades avanzadas estén más accesibles para todo el mundo, aunque dejadme que aquí puntualice que necesitan supervisión humana.</p>
<p>No os recomiendo confiar al 100% en lo que nos proponen, porque no siempre aciertan, si no tenéis experiencia en un área, es recomendable que alguien con experiencia lo revise antes de ponerlo en producción, pero sí es cierto que pueden ayudarnos en áreas en las que tenemos dudas o quizás no entendemos del todo.</p>
<h1 id="aws-q-developer-cli-kiro-y-yo">AWS Q Developer CLI, Kiro y Yo</h1>
<p>Vale pero cómo podemos utilizarlo en nuestro día a día.</p>
<p>Yo utilizo las 2 herramientas, pero para casos de usos diferentes.</p>
<p>AWS Q Developer CLI me ayuda mucho en mi día a día cuando necesito ejecutar acciones, es decir solucionar un problema, ejecutar algo, mientras que Kiro lo utilizo más para el end-to-end de un proyecto, definiendo las especificaciones y requerimientos de este.</p>
<p>Para ayudaros os voy a contar algunos ejemplos de mi día a día.</p>
<h2 id="aws-q-developer-cli">AWS Q Developer CLI</h2>
<p>Cuando tengo que ejecutar alguna acción, resolver problemas, comparar cosas, hacer un assessment, hacer test, hacer documentaciones <strong>AWS Q Developer CLI</strong> es mi campeón.</p>
<p>Por ejemplo, tengo que hacer un Assessment de una cuenta, es algo que realmente puedo hacer con los ojos cerrados, pero que me consume bastante tiempo, por eso puedo lanzar una interacción con Q:</p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#57606a"># Ejemplo de Assessment</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>     █████╗ ███╗   ███╗ █████╗ ███████╗ ██████╗ ███╗   ██╗     ██████╗ 
</span></span><span style="display:flex;"><span>    ██╔══██╗████╗ ████║██╔══██╗╚══███╔╝██╔═══██╗████╗  ██║    ██╔═══██╗
</span></span><span style="display:flex;"><span>    ███████║██╔████╔██║███████║  ███╔╝ ██║   ██║██╔██╗ ██║    ██║   ██║
</span></span><span style="display:flex;"><span>    ██╔══██║██║╚██╔╝██║██╔══██║ ███╔╝  ██║   ██║██║╚██╗██║    ██║▄▄ ██║
</span></span><span style="display:flex;"><span>    ██║  ██║██║ ╚═╝ ██║██║  ██║███████╗╚██████╔╝██║ ╚████║    ╚██████╔╝
</span></span><span style="display:flex;"><span>    ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═══╝     ╚══▀▀═╝  
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Necesito hacer un assessment de varias cuentas de AWS, te paso los perfiles para que ejecutes acciones de solo lectura.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Necesito tener un inventario de assets desplegados, revisar problemas de seguridad, compliance y ver si se siguen las mejores prácticas, además necesito que me ayudes a hacer una propuesta de mejoras.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Tienes documento de ejemplo en la carpeta /Assessment llamado ejemplo_assessment.doc, utilizalo como base
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Los perfiles a utilizar son:
</span></span><span style="display:flex;"><span>Perfil A
</span></span><span style="display:flex;"><span>Perfil B
</span></span><span style="display:flex;"><span>Perfil C 
</span></span></code></pre></td></tr></table>
</div>
</div><p>Este ejemplo es muy sencillo, pero me permite pasando un ejemplo que Q me ejecute una serie de tareas siguiendo un estandar generado por mi.</p>
<p>En este caso necesita leer un doc, y por tanto usar una herramienta externa para leerlo, puedo hacerlo con un MD, pero quiero que me genere un doc en base a mi formato.</p>
<p>Otro ejemplo es cuando me toca realizar un cálculo de Costes en AWS y estoy utilizando servidores con licenciamiento, una pregunta habitual es el coste de este licenciamiento, es algo sencillo de sacar pero muy tedioso porque requiere sacar el coste de las instancias sin licenciamiento y restarlas, pero con Q es sencillo:</p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#57606a"># Ejemplo de Calculo de Coste de Licenciamiento</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>     █████╗ ███╗   ███╗ █████╗ ███████╗ ██████╗ ███╗   ██╗     ██████╗ 
</span></span><span style="display:flex;"><span>    ██╔══██╗████╗ ████║██╔══██╗╚══███╔╝██╔═══██╗████╗  ██║    ██╔═══██╗
</span></span><span style="display:flex;"><span>    ███████║██╔████╔██║███████║  ███╔╝ ██║   ██║██╔██╗ ██║    ██║   ██║
</span></span><span style="display:flex;"><span>    ██╔══██║██║╚██╔╝██║██╔══██║ ███╔╝  ██║   ██║██║╚██╗██║    ██║▄▄ ██║
</span></span><span style="display:flex;"><span>    ██║  ██║██║ ╚═╝ ██║██║  ██║███████╗╚██████╔╝██║ ╚████║    ╚██████╔╝
</span></span><span style="display:flex;"><span>    ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═══╝     ╚══▀▀═╝  
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>En el archivo ec2instances.xlsx tengo una tabla con el coste de cómputo por instancia, quiero calcular el coste para las instancias que tienen licenciamiento, así que quiero que saques <span style="color:#0550ae">2</span> columnas adicionales calculando el coste puro de cómputo y el de licenciamiento.
</span></span><span style="display:flex;"><span>Para calcular el coste de cómputo saca el coste de las mismas instancias pero en Linux y ese es el coste de cómputo puro, el coste de licenciamiento es la diferencia entre ese coste y el coste total de la instancia.
</span></span><span style="display:flex;"><span>Utiliza la región eu-west-1 
</span></span></code></pre></td></tr></table>
</div>
</div><p>Este ejemplo me hizo un script que es la base que utilizo ahora cuando necesito hacer estos cálculos.</p>
<p>También podemos pedirle muchas más cosas, por ejemplo revisar SCP, implementar cambios, revisar problemas, etc.</p>
<p>Son cosas que realmente yo puedo hacer, pero que me van a llevar mucho más tiempo.</p>
<h2 id="kiro-1">Kiro</h2>
<p>A diferencia de Q Developer CLI, Kiro lo utilizo en proyectos a largo plazo, cuando quiero mantener un contexto durante mucho tiempo y además necesito crear código complejo, que necesita muchas iteraciones.</p>
<p>En este tipo de proyectos Kiro es mejor (Lo puedo hacer con Q Developer CLI, pero Kiro es mejor).</p>
<p>Por ejemplo si le pido a Kiro lo siguiente:</p>
<pre tabindex="0"><code>&#34;Crea una aplicación de e-commerce con:

- Frontend en Next.js
- Backend en FastAPI
- Base de datos PostgreSQL
- Pagos con Stripe
- Autenticación con Auth0
- Deploy en AWS&#34;
</code></pre><p>Primero me generara un fichero de Requisitos:</p>
<p><img alt="Kiro Spec" loading="lazy" src="/post004/Kiro_Spec_es.png"></p>
<p>Segundo me generara un Diseño:</p>
<p><img alt="Kiro Desing" loading="lazy" src="/post004/Kiro_Desing_es.png"></p>
<p>Y por ultimo una lista de tareas:</p>
<p><img alt="Kiro Desing" loading="lazy" src="/post004/Kiro_Task_es.png"></p>
<p>Una vez tengamos los 3 ficheros, podemos empezar a lanzar tareas y crear nuestra implementación.</p>
<p>De hecho lo he probado en varias implementaciones (Que por motivos contractuales no puedo mostrar) y funciona bastante bien.</p>
<h2 id="modelos-de-pricing">Modelos de Pricing</h2>
<p>También tenemos que comparar su modelo de precios.</p>
<h3 id="amazon-q-developer-cli-1">Amazon Q Developer CLI</h3>
<p>Amazon Q Developer CLI ofrece un modelo de pricing sencillo y orientado a equipos:</p>
<ul>
<li><strong>Free Tier</strong>: 50 solicitudes de agente por mes, ideal para probar la herramienta</li>
<li><strong>Pro Tier</strong>: $19/mes por usuario, con límites aumentados y funcionalidades empresariales como:
<ul>
<li>Límites aumentados de solicitudes de agente</li>
<li>Capacidades de transformación de código (4000 líneas de código por mes)</li>
</ul>
</li>
</ul>
<h3 id="kiro-2">Kiro</h3>
<p>Kiro presenta un modelo más flexible con múltiples niveles:</p>
<ul>
<li><strong>Free</strong>: 50 créditos perpetuos (no se renuevan mensualmente)</li>
<li><strong>Pro</strong>: $20/mes con capacidad aumentada</li>
<li><strong>Pro+</strong>: $40/mes para usuarios con necesidades intermedias</li>
<li><strong>Power</strong>: $200/mes para uso intensivo</li>
</ul>
<p>Los planes de pago incluyen uso adicional flexible a $0.04 por crédito adicional, lo que permite escalabilidad según el uso real.</p>
<h2 id="comparativa-cuándo-usar-cada-herramienta">Comparativa: ¿Cuándo usar cada herramienta?</h2>
<table>
	<thead>
			<tr>
					<th>Aspecto</th>
					<th>Amazon Q Developer CLI</th>
					<th>Kiro</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Mejor para</strong></td>
					<td>Tareas puntuales y resolución de problemas</td>
					<td>Proyectos end-to-end y desarrollo completo</td>
			</tr>
			<tr>
					<td><strong>Tipo de trabajo</strong></td>
					<td>Ejecutar acciones, diagnosticar, analizar</td>
					<td>Crear código complejo con múltiples iteraciones</td>
			</tr>
			<tr>
					<td><strong>Contexto</strong></td>
					<td>Sesiones cortas, problemas específicos</td>
					<td>Contexto persistente a largo plazo</td>
			</tr>
			<tr>
					<td><strong>Casos de uso típicos</strong></td>
					<td>Assessment, cálculo de costes, troubleshooting</td>
					<td>Aplicaciones completas, arquitecturas complejas</td>
			</tr>
			<tr>
					<td><strong>Metodología</strong></td>
					<td>Interacción directa y ejecución inmediata</td>
					<td>Specs → Diseño → Tareas → Implementación</td>
			</tr>
			<tr>
					<td><strong>Supervisión requerida</strong></td>
					<td>Moderada, para acciones críticas</td>
					<td>Alta, especialmente en validación de specs</td>
			</tr>
			<tr>
					<td><strong>Fortaleza principal</strong></td>
					<td>Velocidad en tareas operativas</td>
					<td>Desarrollo estructurado y metodológico</td>
			</tr>
			<tr>
					<td><strong>Pricing</strong></td>
					<td><strong>Free</strong>: 50 solicitudes/mes<br><strong>Pro</strong>: $19/mes por usuario</td>
					<td><strong>Free</strong>: 50 créditos perpetuos<br><strong>Pro</strong>: $20/mes<br><strong>Pro+</strong>: $40/mes<br><strong>Power</strong>: $200/mes</td>
			</tr>
	</tbody>
</table>
<h1 id="pero-es-todo-tan-bonito">¿Pero es todo tan Bonito?</h1>
<p>La respuesta corta es que no. Ni Kiro, ni Q Developer CLI son infalibles, en muchas ocasiones, sobre todo al principio no van a cumplir nuestras espectativas, hace falta tener algunas cosas en cuenta:</p>
<h2 id="revisar-las-specs-con-mucho-cuidado">Revisar las Specs con mucho cuidado</h2>
<p>Este quizas suele ser el primer problema, tenemos que ser muy claro en lo que pedimos.
En el caso de Kiro, hay que ser muy cuidadoso a la hora de generar un SPEC nuevo, tenemos que revisar cada punto, con sumo cuidado.
Muchas veces nosotros suponemos requerimientos porque nos parecen basicos, pero tanto para Kiro como Q Developer CLI no lo son tanto, por lo que nos puede tocar rehacer nuestro trabajo desde el principio.</p>
<p>Por eso mi recomendación con Kiro es gastar tiempo en revisar los requerimientos, el diseño y las tareas, ya que todo el tiempo que gastemos, será beneficioso en nuestras implementaciones. En el caso de Q Developer CLI, es algo similar, tenemos que ser específicos en los límites que ponemos a nuestras interacciones, así como definir bien el contexto. No hace falta hacer un prompt gigante, pero sí ajustarlo y entender qué contexto tiene Q de lo que queremos hacer</p>
<h2 id="estas-herramientas-requieren-supervision">Estas herramientas requieren supervision</h2>
<p>No se trata de dejar a estas herramientas hacer un desarrollo de forma autónoma, si lo hacemos el resultado será bastante malo.</p>
<p>Aquí siempre pongo la analogía de un Junior, a un Junior le puedes delegar trabajo, pero tienes que auditarlo para que no se desvíe y no cometa errores.
Si un Junior comete un error es nuestra culpa como Seniors, ya que no le hemos supervisado bien, pues pasa lo mismo con Kiro y Q Developer, tenemos que auditar qué hacen y si se equivocan alimentar el prompt para que no vuelva a pasar.</p>
<p>Esto al principio puede ser frustrante, pero con el tiempo vas entendiendo cómo trabajan y cómo puedes mejorar tus prompts.</p>
<h2 id="siempre-escogen-el-camino-fácil">Siempre escogen el camino fácil</h2>
<p>Esto no tiene por qué ser algo malo siempre, en muchas ocasiones tendemos a complicarnos y estas herramientas están diseñadas para usar el camino fácil.</p>
<p>El problema es que en otras ocasiones su camino fácil, es deshabilitar una feature, hacer un análisis simple o saltarse un paso. Esto es algo que tenemos que tener en cuenta y ser capaces de detectar.</p>
<h2 id="un-bucle-puede-ser-un-problema-muy-grande">Un bucle puede ser un problema muy grande</h2>
<p>En ciertas ocasiones puedes entrar en un bucle, que te recomienden una solucion, esta no funcione, tengas varias iteracciones fallidas y que vuelvan al inicio a proponer la misma solucion inicial.</p>
<p>Esto no es habitual, pero puede pasar, pero además incluso podemos retroalimentarlo nosotros diciéndole que no haga algo específico y que nos lo proponga como mejor opción si otras fallan&hellip;</p>
<p>Curiosamente tiene una explicación simple.
Por un lado hay que tener en cuenta que los modelos se entrenan en un momento dado y luego se alimentan vía RAG (retrieval-augmented generation) lo que puede suponer que la solución no la busca fuera (En un MCP), pero también puede pasar que nosotros mismos alimentemos el modelo diciéndole que no haga algo, esa acción entra al contexto y aunque la entiendo como no válido, va a proponérnosla porque le hemos dicho que es una opción&hellip;</p>
<p>Al final siempre va a buscar el camino fácil, aunque podemos forzarle a no hacerlo.</p>
<h2 id="se-puede-inventar-features">Se puede inventar features</h2>
<p>Estas herramientas suelen darnos ideas increibles, pero a veces son tan increibles como imposibles.</p>
<p>Esto me ha pasado alguna vez con Control Tower y terraform, en ocasiones me han recomendado usar resources de terraform que no existen (Aunque tendría sentido que sí), en esos casos te puedes dar cuenta tú y preguntar si existe o en otras ocasiones te darás cuenta al implementar.</p>
<p>Tener cuidado con lo que os proponga y si no os cuadra, pedirle que os lo razone.</p>
<h2 id="a-veces-pueden-ser-peligrosas">A veces pueden ser peligrosas</h2>
<p>En alguna ocasión (Más Q Developer CLI que Kiro) ha decidido que es buena idea borrar algo o parar algo sin mi permiso.
En una ocasión me borró el fichero de Credentials de AWS CLI porque no sabía usar un perfil&hellip;</p>
<p>Son herramientas muy potentes, pero que a su vez requieren que estemos atentos, esto podemos limitarlo en el Prompt, pero os recomiendo que estéis atentos a las acciones que ejecutan.</p>
<h1 id="entonces-mejor-no-usarlas">¿Entonces mejor no usarlas?</h1>
<p>Precisamente el punto es el contrario usarlas pero con cabeza.</p>
<p>Son herramientas muy potentes pero que requieren control.</p>
<p>A mí realmente me han solucionado muchas cosas, además de ayudarme mucho.</p>
<ul>
<li>He reducido el tiempo de ejecución de muchas tareas, con la ayuda de Kiro y Q Developer CLI.</li>
<li>Algunas ideas geniales que no se me habían ocurrido o que no tenía tiempo de implementar, ahora están implementadas.</li>
<li>Odio documentar y el tiempo que dedico a documentar se ha reducido muchísimo y además la mayoría de las veces explican las cosas mejor que yo.</li>
<li>Me obligan a hacer testing, pero haciendolo ellas.</li>
</ul>
<h2 id="reflexión-final">Reflexión Final</h2>
<p><strong>La era de los agentes de IA ha comenzado. ¿Estás listo para ser parte de esta revolución?</strong></p>
<p>No se trata de reemplazar a los desarrolladores/Ingenieros, sino de potenciar nuestras capacidades de formas que nunca antes habíamos imaginado. Estas herramientas nos ayudan a ejecutar ciertas tareas que nos llevan mucho tiempo o son repetitivas y nos permiten centrarnos en lo que realmente importa: <strong>crear, innovar y resolver problemas complejos</strong>.</p>
<p>Por poner una curiosidad, a mí me han ayudado a realizar tareas mientras atiendo a una reunión, cosa que antes no podía hacer, porque al final ni atendía a la reunión, ni estaba pendiente de lo que hacía.</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>La revolución Agentic: Del modelo tradicional al Agentic Loop</title>
      <link>https://cloudhastaenlasopa.com/2025/10/la-revoluci%C3%B3n-agentic-del-modelo-tradicional-al-agentic-loop/</link>
      <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2025/10/la-revoluci%C3%B3n-agentic-del-modelo-tradicional-al-agentic-loop/</guid>
      <description>Descubre cómo la revolución Agentic está transformando la IA: del modelo tradicional de pregunta-respuesta al poderoso Agentic Loop. Exploramos MCP, Strand Agents y por qué herramientas como Amazon Q Developer CLI y Kiro representan un cambio fundamental en el desarrollo de software.</description>
      <content:encoded><![CDATA[<p>Este es el primer post que escribo sobre inteligencia artificial, ni en blogs anteriores, ni en el canal de Youtube, ni en mis redes sociales, me he prodigado mucho hablando de IA.
No es que no me gustase, pero en general había exceso de información y sobre todo de <strong>Hype</strong>.</p>
<p>Esto sigue igual, pero desde hace unos meses empecé a usar <strong><a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line.html">Amazon Q Developer CLI</a></strong> y más recientemente <strong><a href="https://kiro.dev/">Kiro</a></strong>, y la verdad es que me apetece hablar de estas herramientas.</p>
<p>Aunque he usado muchas herramientas de IA y modelos para mejorar mi día a día. Para mí tanto Amazon Q Developer CLI como Kiro son un Game Changer en la industria y esto es debido a la revolución de los Agentes de IA.</p>
<p>Ya sé que está muy utilizado lo de <strong>revolución de la IA</strong> y que muchos estamos cansados de <strong>escucharlo cada 5 minutos</strong>, pero sin ese gancho es difícil que leáis el artículo, aun así voy a intentar explicaros un poco en qué consiste esto de los agentes y por qué, en mi opinión, es algo que está cambiando nuestro día a día.</p>
<p>Este artículo va a estar dividido en 2 partes, en esta primera vamos a hablar un poco más de qué es esto de los <strong>Agentes</strong> y en la segunda nos centraremos sobre <strong>Q Developer CLI</strong> y <strong>Kiro</strong>.</p>
<p><strong>En este Post vamos a ver:</strong></p>
<ul>
<li>Qué son los agentes de IA y cómo difieren de los modelos tradicionales</li>
<li>El paradigma del &ldquo;Agentic Loop&rdquo; y su impacto revolucionario</li>
<li>Model Context Protocol (MCP): La clave de la integración</li>
<li>Strand Agents: Framework para agentes individuales potentes</li>
<li>Por qué esta evolución cambia fundamentalmente la IA.</li>
</ul>
<h1 id="de-modelos-a-agentes">De Modelos a Agentes</h1>
<p><img alt="Models vs Agents" loading="lazy" src="/post003/Agentic_1_es.png"></p>
<h2 id="pregunta-respuesta">Pregunta-Respuesta</h2>
<p>Si habéis usado en este tiempo ChatGPT, Claude, Gemini, Copilot, Perplexity, DeepSeek, el modelo de funcionamiento tenía un patrón simple: le pedías algo y contestaba directamente.</p>
<ol>
<li><strong>Usuario hacía una pregunta</strong></li>
<li><strong>El Modelo procesaba la pregunta y respondía</strong></li>
<li><strong>Fin de la interacción</strong></li>
</ol>
<p>Este modelo, aunque útil, tenía limitaciones fundamentales:</p>
<ul>
<li><strong>Pasividad</strong>: La IA sólo respondía cuando se le preguntaba</li>
<li><strong>Contexto limitado</strong>: Cada interacción era independiente, podíamos darle un contexto, pero no era tan completo</li>
<li><strong>Sin persistencia</strong>: En cada nueva sesión teníamos que cargar nuestro contexto</li>
<li><strong>Sin acción</strong>: Solo proporcionaban información, no ejecutaban nada en nuestros equipos</li>
</ul>
<p>Es verdad que en los últimos años estos modelos han ido evolucionando y han ido ganando profundidad, haciendo pequeños loops, que han mejorado su respuesta.</p>
<h2 id="los-agentes-de-ia">Los Agentes de IA</h2>
<p>Los agentes de IA representan una evolución increíble:</p>
<ol>
<li><strong>Proactividad</strong>: Pueden iniciar acciones sin necesidad de que lo pidamos explícitamente (también los podemos limitar, para que no ejecuten cosas que no queremos)</li>
<li><strong>Persistencia</strong>: Mantienen contexto y memoria a largo plazo</li>
<li><strong>Autonomía</strong>: Pueden tomar decisiones y ejecutar tareas complejas</li>
<li><strong>Integración</strong>: Se conectan con sistemas externos y herramientas</li>
<li><strong>Aprendizaje continuo</strong>: Mejoran con cada interacción</li>
</ol>
<p>Además de esto, podemos utilizar agentes especializados, de forma que sean mucho más óptimos a la hora de ejecutar ciertas tareas. Incluso es algo muy bueno a la hora de reducir los modelos: en vez de utilizar modelos gigantescos, podemos usar modelos destilados, más pequeños pero mucho más optimizados para las tareas del agente.</p>
<p>Por ejemplo, un agente de optimización de recursos solo tiene que saber de ese contexto, no requiere un conocimiento profundo en otras materias, algo que es común en un LLM.</p>
<p>También es posible utilizar diferentes modelos por cada agente, lo que permite usar el mejor modelo para cada propósito.</p>
<p>Esto nos permite tener múltiples agentes coordinados que ejecuten pequeñas tareas y un orquestador que junte todo y ejecute tareas sumamente complejas.</p>
<h1 id="qué-es-un-agentic-loop">¿Qué es un Agentic Loop?</h1>
<p><img alt="Agentic Loop" loading="lazy" src="/post003/Agentic_2_es.png"></p>
<p>El <strong>Agentic Loop</strong> es el concepto fundamental de lo que estamos hablando y es la mayor diferencia con el modelo tradicional.</p>
<p>Es un ciclo continuo y autónomo que permite a la IA operar de forma independiente, tomar decisiones y ejecutar acciones sin intervención humana constante.</p>
<p>Es decir, en base a algo que le pedimos, los agentes van interaccionando para llegar a una respuesta correcta, incluso son capaces de remediar errores que se produzcan a mitad de loop.</p>
<h2 id="ejemplo-de-arquitectura-de-agentic-loop">Ejemplo de Arquitectura de Agentic Loop</h2>
<p>No existe un solo tipo de Agentic Loop, de hecho hay muchos, pero vamos a poner un ejemplo bastante habitual:</p>
<p><strong>Percepción → Planificación → Acción → Evaluación → Aprendizaje → Percepción&hellip;</strong></p>
<h3 id="1-percepción-perception">1. Percepción (Perception)</h3>
<ul>
<li><strong>Análisis del entorno</strong>: El agente examina el contexto actual, incluyendo datos que carguemos, estado del entorno y objetivos pendientes</li>
<li><strong>Identificación de cambios</strong>: Detecta modificaciones en el entorno que requieren atención</li>
<li><strong>Procesamiento multimodal</strong>: Integra información de múltiples fuentes (aquí podemos llamar a herramientas externas y otros agentes)</li>
</ul>
<h3 id="2-planificación-planning">2. Planificación (Planning)</h3>
<ul>
<li><strong>Definición de objetivos</strong>: Establece metas específicas basadas en el contexto detectado</li>
<li><strong>Descomposición de tareas</strong>: Divide una tarea compleja en múltiples tareas sencillas</li>
<li><strong>Optimización de recursos</strong>: Planifica el uso eficiente de las herramientas a su disposición</li>
<li><strong>Gestión de dependencias</strong>: Identifica prerrequisitos y secuencias necesarias</li>
</ul>
<h3 id="3-acción-action">3. Acción (Action)</h3>
<ul>
<li><strong>Ejecución de tareas</strong>: Realiza las tareas planificadas</li>
<li><strong>Interacción con herramientas</strong>: Utiliza APIs, ejecuta comandos, modifica archivos, etc.</li>
<li><strong>Comunicación</strong>: Interactúa con otros sistemas o agentes (MCP o Strands)</li>
<li><strong>Monitorización</strong>: Supervisa el progreso durante la ejecución</li>
</ul>
<h3 id="4-evaluación-evaluation">4. Evaluación (Evaluation)</h3>
<ul>
<li><strong>Análisis de resultados</strong>: Compara los resultados obtenidos con los objetivos esperados</li>
<li><strong>Detección de errores</strong>: Identifica fallos o desviaciones del plan de tareas</li>
<li><strong>Medición de eficiencia</strong>: Evalúa el rendimiento y uso de recursos</li>
<li><strong>Validación de calidad</strong>: Verifica que los resultados cumplan los requisitos definidos</li>
</ul>
<h3 id="5-aprendizaje-learning">5. Aprendizaje (Learning)</h3>
<ul>
<li><strong>Actualización de conocimientos</strong>: Incorpora nuevos aprendizajes al contexto</li>
<li><strong>Refinamiento de estrategias</strong>: Mejora los enfoques basándose en los resultados</li>
<li><strong>Adaptación de patrones</strong>: Ajusta comportamientos para situaciones similares futuras</li>
<li><strong>Memoria persistente</strong>: Almacena experiencias para referencias futuras</li>
</ul>
<p>Este modelo es infinito, es decir, le pedimos una tarea y va a repetir el loop tantas veces como sea necesario. Es verdad que si tiene algún bloqueo, los loops están diseñados para que, si no se avanza, romperlo y devolvernos el error.</p>
<p>La gran ventaja de este modelo es que es iterativo, es decir, va iterando acciones hasta que encuentra la respuesta correcta.</p>
<h2 id="ejemplo-práctico-del-agentic-loop">Ejemplo Práctico del Agentic Loop</h2>
<p>Vamos a ver un ejemplo real de Amazon Q Developer CLI que utiliza este modelo.</p>
<blockquote>
<p><em>Tengo un Problema, he levantado una máquina en AWS en la cuenta xxx y necesito acceder a ella por SSM, pero no consigo que funcione, haz todo lo necesario para solucionarlo</em></p>
</blockquote>
<p><strong>Ciclo 1:</strong></p>
<ul>
<li><strong>Percepción</strong>: Analiza la configuración de AWS e identifica problemas de configuración.</li>
<li><strong>Planificación</strong>: Decide revisar que tiene acceso a AWS.</li>
<li><strong>Acción</strong>: Lista los perfiles configurados en local.</li>
<li><strong>Evaluación</strong>: Revisa que tiene acceso a AWS.</li>
<li><strong>Aprendizaje</strong>: Conoce el perfil del AWS CLI para ejecutar las acciones.</li>
</ul>
<p><strong>Ciclo 2:</strong></p>
<ul>
<li><strong>Percepción</strong>: Analiza si SSM está configurado.</li>
<li><strong>Planificación</strong>: Decide revisar si el rol de SSM está configurado en la máquina.</li>
<li><strong>Acción</strong>: Ejecuta un describe-instance para revisar la configuración.</li>
<li><strong>Evaluación</strong>: La máquina tiene el Rol de SSM configurado.</li>
<li><strong>Aprendizaje</strong>: El problema no es del rol de la instancia, debe ser de comunicaciones.</li>
</ul>
<p><strong>Ciclo 3:</strong></p>
<ul>
<li><strong>Percepción</strong>: Puede existir un problema de comunicaciones con los endpoints de SSM.</li>
<li><strong>Planificación</strong>: Decide revisar la configuración de la subnet donde está desplegada la instancia.</li>
<li><strong>Acción</strong>: Ejecuta un describe-route-tables de la tabla de rutas de la subnet.</li>
<li><strong>Evaluación</strong>: La instancia está en una subnet privada.</li>
<li><strong>Aprendizaje</strong>: El problema está aquí, la instancia no tiene forma de llegar a los endpoints de SSM.</li>
</ul>
<p><strong>Ciclo 4:</strong></p>
<ul>
<li><strong>Percepción</strong>: Es necesario desplegar los endpoints de SSM.</li>
<li><strong>Planificación</strong>: Decide crear los endpoints de SSM en la subnet donde está la instancia.</li>
<li><strong>Acción</strong>: Ejecuta un create-vpc-endpoint por cada endpoint de SSM, desplegándose en la subnet indicada.</li>
<li><strong>Evaluación</strong>: Los endpoints son necesarios para que SSM funcione.</li>
<li><strong>Aprendizaje</strong>: El problema debería estar resuelto; hemos permitido la comunicación con los endpoints.</li>
</ul>
<p><strong>Ciclo 5:</strong></p>
<ul>
<li><strong>Percepción</strong>: Hay que revisar que SSM esté operativo.</li>
<li><strong>Planificación</strong>: Decide revisar el estado de SSM.</li>
<li><strong>Acción</strong>: Ejecuta un describe-instance-information para ver el estado de SSM.</li>
<li><strong>Evaluación</strong>: El agente está operativo y reporta.</li>
<li><strong>Aprendizaje</strong>: El problema ya está resuelto, la instancia es accesible por SSM.</li>
</ul>
<p>Este es un ejemplo pequeño y simplificado, realmente hay más pasos y en algunos casos es necesaria nuestra intervención. Lo normal (si no hubiésemos dicho que hiciese todo lo necesario para resolverlo) es que cuando detectase el problema nos diese varias alternativas para solucionarlo.</p>
<h2 id="por-qué-es-algo-que-cambia-la-ia">Por qué es algo que cambia la IA</h2>
<ol>
<li><strong>Autonomía Real</strong>: Los agentes pueden trabajar independientemente durante horas o días</li>
<li><strong>Mejora Continua</strong>: Cada ciclo hace al agente más eficiente</li>
<li><strong>Adaptabilidad</strong>: Se ajusta dinámicamente a cambios en el entorno</li>
<li><strong>Escalabilidad</strong>: Puede manejar múltiples tareas simultáneamente</li>
<li><strong>Persistencia</strong>: Mantiene el contexto y progreso a largo plazo</li>
</ol>
<h2 id="diferencias-clave-con-el-modelo-anterior">Diferencias Clave con el Modelo Anterior</h2>
<table>
	<thead>
			<tr>
					<th>Aspecto</th>
					<th>Modelo Tradicional</th>
					<th>Agentic Loop</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Iniciativa</strong></td>
					<td>Reactivo</td>
					<td>Proactivo</td>
			</tr>
			<tr>
					<td><strong>Duración</strong></td>
					<td>Interacción única</td>
					<td>Proceso continuo</td>
			</tr>
			<tr>
					<td><strong>Memoria</strong></td>
					<td>Sin persistencia</td>
					<td>Memoria a largo plazo</td>
			</tr>
			<tr>
					<td><strong>Capacidad</strong></td>
					<td>Solo respuestas</td>
					<td>Ejecución de tareas</td>
			</tr>
			<tr>
					<td><strong>Aprendizaje</strong></td>
					<td>Estático</td>
					<td>Dinámico y continuo</td>
			</tr>
			<tr>
					<td><strong>Integración</strong></td>
					<td>Limitada</td>
					<td>Extensiva con herramientas</td>
			</tr>
	</tbody>
</table>
<h1 id="model-context-protocol-mcp">Model Context Protocol (MCP)</h1>
<p><img alt="MCP" loading="lazy" src="/post003/MCP_es.png"></p>
<p>Hasta ahora hemos hablado de agentes, pero muchas veces necesitamos cosas más concretas o incluso conectarnos con herramientas de terceros; aquí es donde entra MCP.</p>
<h2 id="qué-es-mcp">¿Qué es MCP?</h2>
<p>El <strong>Model Context Protocol (MCP)</strong> es el estándar abierto desarrollado por Anthropic que hace posible la revolución Agentic. Es el protocolo que permite a los agentes de IA integrarse de forma nativa con cualquier herramienta, API, servicio o sistema. Es un estándar abierto que permite que cualquiera genere sus propios MCP y permita la integración con otros sistemas.</p>
<p>A mí este modelo me encanta, porque en vez de una apuesta por un modelo propietario, en este caso se ha ido directo a un modelo Open Source que permite la integración de cualquier agente independientemente del LLM que use, quien lo desarrolle o quién sea su consumidor objetivo.</p>
<p>Esto es algo que no ha sido habitual en la industria, lo normal es que cada compañía diseñe su propia integración propietaria y que fuerce al resto a usarla.</p>
<h2 id="arquitectura-de-mcp">Arquitectura de MCP</h2>
<h3 id="componentes-principales">Componentes Principales</h3>
<p><strong>1. MCP Servers</strong></p>
<ul>
<li>Proporcionan herramientas específicas a los agentes</li>
<li>Pueden ser servicios AWS, otro Cloud, APIs de terceros o herramientas locales, etc.</li>
<li>Exponen capacidades de forma estandarizada</li>
</ul>
<p><strong>2. MCP Clients</strong></p>
<ul>
<li>Los agentes de IA que consumen las herramientas</li>
<li>Amazon Q Developer CLI y Kiro son ejemplos de clientes MCP</li>
</ul>
<p><strong>3. Protocol Layer</strong></p>
<ul>
<li>Capa de comunicación estandarizada</li>
<li>Garantiza interoperabilidad entre diferentes sistemas</li>
<li>Maneja autenticación, autorización y gestión de errores</li>
</ul>
<h2 id="mcp-en-la-práctica">MCP en la Práctica</h2>
<h3 id="qué-podemos-hacer-con-un-mcp">Qué podemos hacer con un MCP</h3>
<p>Básicamente <strong>cualquier cosa</strong>, para que os hagáis una idea, yo uso múltiples MCPs en mi día a día.</p>
<p>Uso MCPs que me permiten acceder a ficheros locales de mi PC, por otro lado, uso MCPs que leen la documentación de AWS, otros que me ayudan con el diseño de ciertos servicios e incluso algunos específicos de Terraform, pero las posibilidades son infinitas.</p>
<p>Además, desarrollar un MCP no es excesivamente complejo y nos permite que nosotros mismos podamos generar MCPs; asimismo, podemos ir iterando y mejorando nuestros propios MCPs con el tiempo.</p>
<h3 id="ejemplo-práctico-configuración-de-mcp-server">Ejemplo Práctico: Configuración de MCP Server</h3>
<p>Un ejemplo de cómo configurar un MCP server básico para acceder a la documentación de AWS:</p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#1f2328">{</span>
</span></span><span style="display:flex;"><span>  <span style="color:#0550ae">&#34;mcpServers&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#0550ae">&#34;aws-docs&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">{</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;command&#34;</span><span style="color:#1f2328">:</span> <span style="color:#0a3069">&#34;uvx&#34;</span><span style="color:#1f2328">,</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;args&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">[</span><span style="color:#0a3069">&#34;awslabs.aws-documentation-mcp-server@latest&#34;</span><span style="color:#1f2328">],</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;env&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#0550ae">&#34;FASTMCP_LOG_LEVEL&#34;</span><span style="color:#1f2328">:</span> <span style="color:#0a3069">&#34;ERROR&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#1f2328">},</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;disabled&#34;</span><span style="color:#1f2328">:</span> <span style="color:#cf222e">false</span><span style="color:#1f2328">,</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;autoApprove&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">[</span><span style="color:#0a3069">&#34;search_documentation&#34;</span><span style="color:#1f2328">,</span> <span style="color:#0a3069">&#34;read_documentation&#34;</span><span style="color:#1f2328">]</span>
</span></span><span style="display:flex;"><span>    <span style="color:#1f2328">},</span>
</span></span><span style="display:flex;"><span>    <span style="color:#0550ae">&#34;filesystem&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">{</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;command&#34;</span><span style="color:#1f2328">:</span> <span style="color:#0a3069">&#34;uvx&#34;</span><span style="color:#1f2328">,</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;args&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">[</span><span style="color:#0a3069">&#34;mcp-server-filesystem&#34;</span><span style="color:#1f2328">,</span> <span style="color:#0a3069">&#34;--path&#34;</span><span style="color:#1f2328">,</span> <span style="color:#0a3069">&#34;/workspace&#34;</span><span style="color:#1f2328">],</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;disabled&#34;</span><span style="color:#1f2328">:</span> <span style="color:#cf222e">false</span><span style="color:#1f2328">,</span>
</span></span><span style="display:flex;"><span>      <span style="color:#0550ae">&#34;autoApprove&#34;</span><span style="color:#1f2328">:</span> <span style="color:#1f2328">[</span><span style="color:#0a3069">&#34;read_file&#34;</span><span style="color:#1f2328">,</span> <span style="color:#0a3069">&#34;list_directory&#34;</span><span style="color:#1f2328">]</span>
</span></span><span style="display:flex;"><span>    <span style="color:#1f2328">}</span>
</span></span><span style="display:flex;"><span>  <span style="color:#1f2328">}</span>
</span></span><span style="display:flex;"><span><span style="color:#1f2328">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Este archivo de configuración permite a cualquier agente MCP acceder tanto a la documentación de AWS como al sistema de archivos local de forma estandarizada.</p>
<p>Además, está configurando que estas herramientas de lectura estén preaprobadas.</p>
<h3 id="ventajas-de-mcp">Ventajas de MCP</h3>
<ol>
<li><strong>Interoperabilidad</strong>: Cualquier agente puede usar cualquier MCP server</li>
<li><strong>Extensibilidad</strong>: Fácil agregar nuevas capacidades sin modificar el agente</li>
<li><strong>Reutilización</strong>: Los MCP servers se pueden compartir entre diferentes proyectos</li>
<li><strong>Estandarización</strong>: Protocolo común que facilita el desarrollo y mantenimiento</li>
</ol>
<h1 id="strand-agents">Strand Agents</h1>
<p><img alt="Strands Agents" loading="lazy" src="/post003/Strand_es.png"></p>
<p>Además de los MCP, existe otro framework muy interesante que es <strong>Strand Agents</strong>. Mientras que MCP se centra en la integración de herramientas individuales, Strand Agents se centra más en la propia creación de los agentes, así como en su orquestación, en integrar múltiples agentes, en permitir la persistencia de estados y contextos, etc.</p>
<h2 id="qué-es-strand-agents">¿Qué es Strand Agents?</h2>
<p><strong>Strand Agents</strong> es un SDK simple pero potente desarrollado por Amazon que adopta un enfoque basado en modelos para construir y ejecutar agentes de IA. Desde asistentes conversacionales más habituales (lo típico en IA) hasta flujos de trabajo autónomos complejos, permite orquestar desde un desarrollo en local hasta el despliegue en producción de la aplicación.</p>
<h3 id="características-principales-del-framework">Características Principales del Framework</h3>
<ul>
<li><strong>Ligero pero muy flexible</strong>: Permite desde un bucle de agente muy sencillo, pero que es completamente personalizable</li>
<li><strong>Agnóstico</strong>: Tiene soporte para utilizar Amazon Bedrock y también modelos propios de Anthropic, LiteLLM, Llama, Ollama, OpenAI, Writer y proveedores personalizados</li>
<li><strong>Capacidades Avanzadas</strong>: Permite implementar sistemas multiagente, agentes autónomos y soporte de streaming</li>
<li><strong>MCP Integrado</strong>: Tiene soporte nativo para servidores Model Context Protocol (MCP), permitiendo acceso a miles de herramientas preconstruidas</li>
</ul>
<h2 id="arquitectura-de-strand-agents">Arquitectura de Strand Agents</h2>
<h3 id="componentes-principales-1">Componentes Principales</h3>
<p><strong>1. Agent Core</strong></p>
<ul>
<li>Motor de razonamiento basado en LLM que procesa las peticiones del usuario</li>
<li>Gestión automática del ciclo de vida del agente (inicialización, ejecución, finalización)</li>
<li>Soporte para múltiples proveedores de modelos de forma intercambiable</li>
</ul>
<p><strong>2. Tool System</strong></p>
<ul>
<li>Sistema de herramientas nativo usando decoradores Python</li>
<li>Hot reloading automático desde directorios de herramientas</li>
<li>Integración nativa con servidores MCP para acceso a herramientas externas</li>
</ul>
<p><strong>3. Session Management</strong></p>
<ul>
<li>Persistencia automática de conversaciones y estado del agente</li>
<li>Soporte para almacenamiento local (FileSessionManager) y en la nube (S3SessionManager)</li>
<li>Gestión inteligente de contexto con estrategias configurables</li>
</ul>
<p><strong>4. Multi-Agent Orchestration</strong></p>
<ul>
<li>Coordinación de múltiples agentes especializados trabajando juntos</li>
<li>Comunicación entre agentes para resolver tareas complejas</li>
<li>Distribución automática de tareas según las capacidades de cada agente</li>
</ul>
<h2 id="el-poder-de-strand-agents-en-la-práctica">El Poder de Strand Agents en la Práctica</h2>
<h3 id="capacidades-avanzadas">Capacidades Avanzadas</h3>
<p><strong>Structured Output</strong></p>
<ul>
<li>Obtención de respuestas estructuradas usando modelos Pydantic</li>
<li>Validación automática de tipos y esquemas</li>
<li>Integración perfecta con sistemas de datos existentes</li>
</ul>
<p><strong>Sistema de Hooks Extensible</strong></p>
<ul>
<li>Callbacks configurables en diferentes puntos del ciclo de vida del agente</li>
<li>Modificación de comportamiento sin cambiar el código core</li>
<li>Monitorización y logging avanzado de las operaciones</li>
</ul>
<p><strong>Observabilidad Completa</strong></p>
<ul>
<li>Métricas detalladas de cada ejecución del agente</li>
<li>Trazas completas del proceso de razonamiento</li>
<li>Información sobre tokens usados, tiempo de ejecución y herramientas utilizadas</li>
</ul>
<h2 id="ventajas-de-strand-agents">Ventajas de Strand Agents</h2>
<h3 id="ventajas-del-ecosistema-strand-agents">Ventajas del Ecosistema Strand Agents</h3>
<ol>
<li><strong>Simplicidad</strong>: API basada en Python que permite desarrollar agentes de forma simple</li>
<li><strong>Flexibilidad</strong>: Soporte para múltiples proveedores de modelos y herramientas personalizadas</li>
<li><strong>Escalabilidad</strong>: Desde agentes simples hasta sistemas multiagente complejos</li>
<li><strong>Observabilidad</strong>: Métricas y trazas completas para debugging y optimización</li>
<li><strong>Persistencia</strong>: Gestión automática de estado y sesiones a largo plazo</li>
<li><strong>Integración</strong>: Soporte nativo para MCP y ecosistema de herramientas extenso</li>
</ol>
<h1 id="combinando-mcp-con-strand-agents">Combinando MCP con Strand Agents</h1>
<p>Una de las cosas más interesantes de este enfoque es que podemos utilizar Strand Agents con MCP de forma que tengamos una orquestación de agentes y herramientas brutal.</p>
<ul>
<li><strong>MCP</strong> proporciona la integración estándar con herramientas</li>
<li><strong>Strand Agents</strong> proporciona el framework robusto para crear agentes potentes</li>
<li><strong>Combinándolos</strong> nos permiten crear un ecosistema completo para agentes empresariales.</li>
</ul>
<p>Esta combinación permite crear agentes mucho más complejos, pero además orquestar estos Strand Agents y MCPs de forma que tengamos una solución mucho más optimizada, además de poder gestionar estados, contextos, etc.</p>
<h1 id="recursos-adicionales">Recursos Adicionales</h1>
<p>Si queréis profundizar en estos conceptos, aquí tenéis algunos enlaces útiles:</p>
<h2 id="mcp-model-context-protocol">MCP (Model Context Protocol)</h2>
<ul>
<li><strong><a href="https://modelcontextprotocol.io/introduction">Documentación oficial de MCP</a></strong> - Guía completa del protocolo</li>
<li><strong><a href="https://github.com/modelcontextprotocol/servers">Repositorio de MCP Servers</a></strong> - Colección de servidores MCP oficiales</li>
<li><strong><a href="https://github.com/awslabs/mcp">AWS Labs MCP Servers</a></strong> - MCPs específicos de AWS desarrollados por AWS Labs</li>
<li><strong><a href="https://github.com/modelcontextprotocol/python-sdk">MCP SDK</a></strong> - SDK de Python para desarrollar MCPs</li>
</ul>
<h2 id="strand-agents-1">Strand Agents</h2>
<ul>
<li><strong><a href="https://strandsagents.com/latest/">Web oficial de Strand Agents</a></strong> - Sitio oficial del framework</li>
<li><strong><a href="https://github.com/strands-agents/sdk-python">SDK de Python</a></strong> - Repositorio oficial del SDK</li>
<li><strong><a href="https://github.com/strands-agents/mcp-server">MCP Server</a></strong> - Servidor MCP para Strand Agents</li>
<li><strong><a href="https://github.com/strands-agents/samples">Ejemplos y samples</a></strong> - Repositorio con ejemplos prácticos</li>
<li><strong><a href="https://strandsagents.com/latest/documentation/docs/">Documentación</a></strong> - Guías y tutoriales completos</li>
</ul>
<h2 id="herramientas-mencionadas">Herramientas Mencionadas</h2>
<ul>
<li><strong><a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line.html">Amazon Q Developer CLI</a></strong> - Documentación oficial</li>
<li><strong><a href="https://kiro.dev/">Kiro</a></strong> - IDE con agentes integrados</li>
</ul>
<h1 id="conclusión-de-la-primera-parte">Conclusión de la Primera Parte</h1>
<p>Al principio del artículo comentaba que otras veces no me apetecía escribir sobre IA, no porque no me pareciese interesante, sino porque había demasiado hype y creo que nos saturaba mucho.</p>
<p>Pero este cambio con el modelo Agentic no es solo una mejora incremental en el modelo de IA.</p>
<p>Estamos en un momento muy importante porque estas dos tecnologías juntas nos han dado dos herramientas en AWS que no hay palabras para describirlas como son <strong>Amazon Q Developer CLI</strong> y <strong>Kiro</strong>, que han venido a cambiar cómo trabajamos hasta ahora.</p>
<hr>
<p><strong>En la segunda parte explicaremos cómo Amazon Q Developer CLI y Kiro están aplicando estos conceptos para revolucionar el desarrollo de software, y qué significa esto para el futuro de nuestra industria.</strong></p>
<p>👉 <strong>Próximo: &ldquo;Kiro y Amazon Q Developer CLI: La revolución Agentic en nuestro día a día&rdquo;</strong></p>
]]></content:encoded>
    </item>
    <item>
      <title>Cómo Sobrevivir al re:Invent: Guía Completa para Aprovechar al Máximo el Evento</title>
      <link>https://cloudhastaenlasopa.com/2025/10/c%C3%B3mo-sobrevivir-al-reinvent-gu%C3%ADa-completa-para-aprovechar-al-m%C3%A1ximo-el-evento/</link>
      <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2025/10/c%C3%B3mo-sobrevivir-al-reinvent-gu%C3%ADa-completa-para-aprovechar-al-m%C3%A1ximo-el-evento/</guid>
      <description>Guía práctica y completa para sobrevivir al AWS re:Invent. Desde dónde alojarse en Las Vegas hasta qué llevar en la maleta, pasando por las mejores estrategias para aprovechar las sesiones y keynotes. Todo lo que necesitas saber para que tu experiencia en el evento más importante de AWS sea un éxito.</description>
      <content:encoded><![CDATA[<p>Este post está realizado en base al contenido del video del canal de YouTube <a href="https://www.youtube.com/watch?v=daTSQLzJ86k">Cloud Hasta En La Sopa</a></p>
<p>Este es mi cuarto año yendo al <strong>AWS re:Invent</strong> y la verdad es que me apetecía un montón hacer una guía sobre el propio evento, sobre cómo planificar y cómo aprovechar al máximo esta experiencia única.</p>
<p>Es un evento que es muy interesante, pero a la vez creo que es difícil de planificar. Por eso he decidido compartir todos los consejos y trucos que he aprendido a lo largo de estos años para que puedas sobrevivir y disfrutar al máximo del re:Invent.</p>
<p><strong>En este post vamos a ver:</strong></p>
<ul>
<li>☁️ Qué es el AWS re:Invent y por qué es especial</li>
<li>🌵 Las particularidades de Las Vegas que debes conocer</li>
<li>🏨 Dónde alojarse: los mejores hoteles según tu presupuesto</li>
<li>🎒 Qué llevar en la maleta (y qué es imprescindible)</li>
<li>📚 Cómo navegar por las sesiones y keynotes</li>
<li>🎁 La Expo y el swag</li>
<li>🎉 Las fiestas y eventos sociales</li>
<li>💡 Mis tips finales para sobrevivir</li>
</ul>
<h1 id="qué-es-el-aws-reinvent-">¿Qué es el AWS re:Invent? ☁️</h1>
<p>El <strong>re:Invent</strong> es el evento anual de AWS que se celebra en Las Vegas. Siempre se celebra en Las Vegas desde que se inició, hace 12 años.</p>
<p>El evento siempre es más o menos en las mismas fechas: justo después de Acción de Gracias en Estados Unidos.</p>
<p>Este año (2025) es del <strong>1 de diciembre al 5 de diciembre</strong>. Acción de Gracias es el cuarto jueves de noviembre, por lo que el evento empieza el siguiente lunes. Es decir, finales de noviembre o primeros de diciembre.</p>
<p>Es el evento más importante de AWS, donde se anuncian las principales novedades, se imparten miles de sesiones técnicas y se reúnen decenas de miles de profesionales de todo el mundo (más de 65.000 asistentes los últimos años).</p>
<h1 id="las-vegas-lo-que-necesitas-saber-">Las Vegas: Lo que Necesitas Saber 🌵</h1>
<h2 id="un-desierto-con-particularidades">Un Desierto con Particularidades</h2>
<p>Las Vegas es una ciudad bastante peculiar dentro de Estados Unidos, conocida obviamente por el juego y por ser el patio de recreo de Estados Unidos, pero que tiene algunas cosas importantes que hay que saber.</p>
<h3 id="el-clima-del-desierto">El Clima del Desierto</h3>
<p>Lo primero es que es <strong>un desierto</strong>, y esto es crucial. La temperatura no es muy baja en general, pero es verdad que hace frío.</p>
<p>Es un desierto: por las noches hace frío, por el día hace bastante calor. No un calor excesivo (es en diciembre), pero sí que hay una <strong>diferencia de temperatura muy grande</strong>.</p>
<p>Por otro lado, <strong>el ambiente es muy, muy seco</strong>. Eso se nota mucho, sobre todo por las noches. Al despertarte vas a notar que tienes la garganta muy seca y en el día a día los labios se resecan mucho.</p>
<p><img alt="Desierto" loading="lazy" src="/post005/Desert_es.png"></p>
<h3 id="el-strip-más-grande-de-lo-que-parece">El Strip: Más Grande de lo que Parece</h3>
<p>No es la ciudad más grande de Estados Unidos, pero es una ciudad grande, sobre todo la parte del <strong>Strip</strong>.</p>
<p>El Strip es la calle principal donde están todos los hoteles principales que hemos visto mil veces en las películas con sus grandes hoteles y luces de neón. Sin embargo, es más grande de lo que aparenta en las películas.</p>
<p>Parece que los hoteles están muy cerca unos de otros, y efectivamente lo están, pero son gigantescos. Moverte de un hotel a otro toma tiempo. Es más, salir de un hotel a veces es complicado, ya que básicamente están diseñados para que no salgas de ellos.</p>
<h3 id="el-gran-premio-de-fórmula-1">El Gran Premio de Fórmula 1</h3>
<p>Es importante saber que justo antes del re:Invent se produce el <strong>Gran Premio de Fórmula 1</strong>. Por ello, vais a ver la ciudad un poco diferente a lo habitual, ya que tendrá los muros de la Fórmula 1. El circuito pasa precisamente por el Strip y por casi todos los casinos donde se celebra el re:Invent.</p>
<p>Como ejemplo, la típica imagen de las fuentes del Bellagio es bastante diferente, no vais a ver esta foto porque las gradas están justamente delante de la fuente (aunque el espectáculo se puede ver y mola bastante).</p>
<p><img alt="Fuentes del Bellagio" loading="lazy" src="/post005/Bellagio_es.png"></p>
<h1 id="los-centros-de-conferencias-">Los Centros de Conferencias 🏢</h1>
<p>El evento se realiza en <strong>diferentes centros de conferencias</strong>. Los centros de conferencias normalmente están asociados a un hotel y están en el Strip.</p>
<p>En total son <strong>seis centros de conferencias</strong>, aunque es verdad que el Encore y el Wynn se pueden considerar uno. Los principales son:</p>
<ul>
<li><strong>Venetian</strong> y <strong>Caesar Forum</strong>, que son los más importantes</li>
<li><strong>MGM Grand</strong></li>
<li><strong>Mandalay Bay</strong></li>
<li><strong>Wynn/Encore</strong></li>
</ul>
<p>Moverse de un centro de conferencias a otro no es sencillo y lleva bastante tiempo.</p>
<p>Existen autobuses del propio evento (y gratuitos) que permiten moverte entre ellos, pero con las obras de la Fórmula 1 son bastante lentos y puede llevar bastante tiempo moverse de uno a otro.</p>
<p>Entre el <strong>Venetian</strong> y <strong>Caesar Forum</strong> es sencillo ya que habilitan un puente peatonal que los conecta, por lo que se tarda poco (10-15 minutos).</p>
<p>Entre el <strong>Caesar Forum</strong> y el <strong>MGM Grand</strong> hay un <strong>monorail</strong> que es bastante rápido. Yo para moverme entre estos dos hoteles lo recomiendo porque es lo más rápido y es gratuito (solo en ese tramo, del MGM al Caesar o del Caesar al MGM).</p>
<p>El Wynn y el Encore están también conectados, por lo que ir de uno a otro no es problema.</p>
<h1 id="dónde-alojarse-guía-de-hoteles-">Dónde Alojarse: Guía de Hoteles 🏨</h1>
<h2 id="el-mejor-venetian-pero">El Mejor: Venetian (Pero&hellip;)</h2>
<p>Obviamente el <strong>mejor hotel es el Venetian</strong>, porque es donde está toda la acción: donde está la Expo, las keynotes y hay un montón de sesiones, además está muy cerca del Caesar Forum, y por último es el hotel donde van a estar todos los eventos de partners.</p>
<p><strong>Pero</strong> también es el más caro, excesivamente caro. Es un hotel de cinco estrellas, además está prácticamente reservado entero por AWS y por los partners, con lo cual es muy complicado tener una habitación, además de que es carísimo.</p>
<p><img alt="Venetian" loading="lazy" src="/post005/Venetian_es.png"></p>
<h2 id="las-mejores-alternativas">Las Mejores Alternativas</h2>
<h3 id="hoteles-recomendados">Hoteles Recomendados</h3>
<p>Nota: El orden no es necesariamente por orden de preferencia.</p>
<ul>
<li><strong>Harrah&rsquo;s</strong>: Es uno de los mejores hoteles, está pegado al Venetian y tiene acceso directo al Caesar Forum. Por lo que vas a estar muy cerca de las sessiones y de la expo.</li>
<li><strong>The LINQ</strong>: Esta pegado al Harrah&rsquo;s es tambien un muy buen hotel y comparte el acceso al Harrah&rsquo;s, el acceso esta entre los 2 hoteles.</li>
<li><strong>Flamingo</strong>: Es el hotel donde estaré yo este año. Está muy cerca del Caesar Forum. Es el siguiente hotel del strip en esa acera. Es un hotel que no esta tan cerca del Venetian pero si del Caesar Forum.</li>
<li><strong>Treasure Island</strong>: Es un hotel muy recomendado, bastante barato en comparacion con otros. El hotel esta enfrente del Vennetian, aunque esta cerca se tarda un poco en llegar a la expo ya que esta en la otra punta del hotel. Es un hotel que se agota rapidamente en la web del re:Invent.</li>
<li><strong>Horseshoe</strong>: Es el hotel donde estuve yo el año pasado, esta algo mas apartado, pero se puede llegar en 10 minutos al Caesar Forum. Para llegar al strip tambien tienes que cruzar una zona comercial.</li>
<li><strong>Holiday Inn Club Vacations at Desert Club Resort</strong>: No esta en el strip pero tiene una acceso al Caesar Forum muy cerca, aunque no es el acceso principal.</li>
<li><strong>Westin</strong> Tambien esta cerca del strip y del Horseshoe, no esta en el strip pero es sencillo llegar al Caesar Forum.</li>
</ul>
<p>Como veis priorizo mucho la parte del Caesar Forum, basicamente porque el Centro de Conferencias con mas salas y que esta conectado directamente a la expo del Venetian.</p>
<p>Hay más hoteles, pero realmente cuanto más te alejes del <strong>Venetian</strong> más lejos estarás de toda la acción.</p>
<p>Yo otros años me alojé en el <strong>Excalibur</strong>, no es mal hotel, pero está muy lejos del <strong>Venetian</strong> y llegar al <strong>MGM Grand</strong> es complicado. Además, con las obras de la F1 se pierde mucho tiempo yendo en autobús.</p>
<p><img alt="Mapa" loading="lazy" src="/post005/Map_es.png"></p>
<h1 id="qué-llevar-lista-esencial-">Qué Llevar: Lista Esencial 🎒</h1>
<h2 id="ropa-adecuada">Ropa Adecuada</h2>
<h3 id="para-el-día-a-día">Para el Día a Día</h3>
<ul>
<li>
<p><strong>Ropa cómoda</strong></p>
<p>Se camina bastante, por lo que os recomiendo vaqueros y camiseta o ropa ciertamente cómoda.</p>
</li>
<li>
<p><strong>Capas</strong></p>
<p>Debido a la diferencia de temperatura entre día y noche recomiendo llevar sudaderas o chaquetas ligeras, en la calle puede hacer frío (sobre todo de noche), pero andando puedes pasar bastante calor.</p>
</li>
<li>
<p><strong>Zapatos cómodos</strong></p>
<p>Se anda mucho, varios kilómetros al día, por lo que si no quieres sufrir mucho, lleva unas zapatillas cómodas para andar.</p>
</li>
</ul>
<h3 id="para-las-fiestas-nocturnas">Para Las Fiestas Nocturnas</h3>
<p>Si vais a algún <strong>evento de partners por la noche</strong>, algunos de ellos se realizan en discotecas de Las Vegas, si queréis entrar en alguna discoteca necesitaréis algo más formal.</p>
<p>Por eso, si vais a ir a fiestas, os recomiendo llevaros un atuendo más formal.</p>
<p>Ojo, esto solo aplica a las fiestas nocturnas y en discotecas, en general no es necesario, pero si queréis entrar al OMNIA o al Hakkasan, necesitáis ir más formal.</p>
<p>Yo por principios no suelo ir.</p>
<h2 id="elementos-imprescindibles">Elementos Imprescindibles</h2>
<h3 id="1-protector-labial">1. Protector Labial</h3>
<p>Llevar <strong>lápiz labial, vaselina o un protector labial</strong> es crucial. Uno de los problemas en Las Vegas es que el ambiente es muy, muy seco. Normalmente se te secan un montón los labios y se te pueden cortar, con lo cual es muy recomendable llevarlo.</p>
<h3 id="2-botella-de-agua">2. Botella de Agua</h3>
<p>Una <strong>botellita de agua</strong> es crucial. En el re:Invent nos suelen dar una botella de agua para rellenar. Estamos en un desierto, puedes sufrir una deshidratación fácilmente. Se anda un montón y es recomendable estar bien hidratado y beber un montón de agua.</p>
<h3 id="3-mochila">3. Mochila</h3>
<p>Para moverte por el re:Invent, yo solo recomiendo llevar una <strong>mochila</strong>. No hace falta que esté llena, pero es verdad que si vas a la Expo y coges algo de swag, puedes meterlo en la mochila y no tienes que llevar múltiples bolsas y peso. Incluso puedes colgar bolsas en la mochila.</p>
<h3 id="4-maleta-de-mano-extra">4. Maleta de Mano Extra</h3>
<p>Si viajáis y habéis facturado una maleta, llevar también una <strong>maleta de mano</strong>. Aunque la llevéis vacía a la ida, a la vuelta con todo el swag probablemente la necesitéis.</p>
<h3 id="5-portátil-opcional">5. Portátil (Opcional)</h3>
<p>Llevar un laptop o no depende un poco de cada uno. Yo lo suelo llevar. Es verdad que hay sesiones en las que es interesante o incluso obligatorio llevar portátil. Yo suelo recomendar que el portátil por lo menos te lo lleves a Las Vegas y luego ya, dependiendo de si vas a ir a este tipo de sesiones o no, lo metas en la mochila.</p>
<h1 id="las-sesiones-navegando-por-el-catálogo-">Las Sesiones: Navegando por el Catálogo 📚</h1>
<p>Principalmente el re:Invent es un <strong>evento técnico y formativo</strong>. Aquí tenemos un montón de sesiones y es verdad que es muy difícil elegirlas, el <a href="https://registration.awsevents.com/flow/awsevents/reinvent2025/eventcatalog/page/eventcatalog">catálogo de sesiones es infinito</a>.</p>
<p>Aunque la herramienta oficial está bien, para la planificación os recomiendo <a href="https://reinvent-planner.cloud/">el Planner no oficial de Raphael Manke</a>.</p>
<p>Es mucho mejor que la herramienta oficial y permite hacer listas, aquí está la <a href="https://reinvent-planner.cloud/sessions/shared/?shareId=a5d12878-93a7-4b32-9e29-679ba4b51422">mía provisional</a>.</p>
<h2 id="las-keynotes-imprescindibles">Las Keynotes: Imprescindibles</h2>
<p>Primero tenemos las <strong>keynotes</strong>, que son las sesiones principales donde van a hablar los VPs de AWS y el CEO de AWS. Cada día hay una, de lunes a jueves:</p>
<h3 id="programa-de-keynotes">Programa de Keynotes</h3>
<p><strong>Lunes por la noche</strong>: <strong>Dave Brown</strong> - Infraestructura y servicios core</p>
<p><strong>Martes por la mañana</strong>: <strong>Matt Garman</strong> - El CEO de AWS, la keynote más importante.</p>
<p><strong>Miércoles por la mañana</strong>: <strong>Swami Sivasubramanian</strong> - IA, ML y Data</p>
<p><strong>Jueves por la mañana</strong>: <strong>Werner Vogels y Peter DeSantis</strong> - La más recomendable técnicamente, es una sesión a la que hay que ir.</p>
<p><strong>Jueves por la tarde</strong>: <strong>Ruba Borno</strong> - partners (si no sois partner no suele ser muy interesante)</p>
<h3 id="consejos-para-las-keynotes">Consejos para las Keynotes</h3>
<p>Las keynotes obviamente <strong>se graban y se emiten en directo en YouTube</strong>, no es necesario ir, pero la verdad es que el ambiente de la propia keynote, estar allí, ver las novedades de AWS en directo, suele ser bastante chulo.</p>
<p><strong>Truco importante</strong>: Yo recomiendo estar <strong>una hora antes</strong>, incluso a veces algo más, en la cola de la keynote para poder entrar y conseguir un buen sitio.</p>
<p>Es curioso porque hay bastantes asientos reservados y si entras justo 5 o 10 minutos antes de que empiece la keynote puedes sentarte en un muy buen sitio, pero también es verdad que puedes quedarte fuera, sobre todo en las más demandadas.</p>
<h2 id="otros-tipos-de-sesiones">Otros Tipos de Sesiones</h2>
<p>Además de las keynotes, tenemos diferentes tipos de sesiones:</p>
<ul>
<li><strong>Breakout Sessions</strong> - Las sesiones técnicas principales, que se graban y son las que vemos en YouTube.</li>
<li><strong>BootCamps</strong> - Existe la posibilidad de enrolarte en un BootCamp. (Requiere portátil).</li>
<li><strong>Builders&rsquo; Sessions</strong> - Sesiones de 1 hora hands on con una breve introducción teórica. (Requiere portátil).</li>
<li><strong>Chalk Talks</strong> - Sesiones más interactivas y técnicas que no se graban y muy interesantes.</li>
<li><strong>Code Talks</strong> - Sesiones parecidas a las Chalk Talks centradas en código que tampoco se graban.</li>
<li><strong>Exam Prep</strong> - Sesiones para preparar exámenes de AWS.</li>
<li><strong>Gamified Learning</strong> - GameDays, AWS Jams, Escape Rooms y otras sesiones interactivas que te permiten competir y aprender de forma amena. (Requiere portátil)</li>
<li><strong>Interactive Training</strong> - Sesiones de training interactivos parecidos a Skill Builder, pero con expertos in situ.</li>
<li><strong>Lightning Talks</strong> - Sesiones cortas de 15-20 minutos centradas en casos de uso y muy interesantes (aquí están las sesiones de la comunidad de AWS que son auténticas joyas escondidas en el catálogo)</li>
<li><strong>Workshops</strong> - Laboratorios prácticos donde tienes un laboratorio y puedes ir jugando con él, son bastante interesantes, además tienes un entorno AWS preparado y expertos para preguntar. (Requiere portátil).</li>
</ul>
<h2 id="planificación-y-reserva-de-sesiones">Planificación y Reserva de Sesiones</h2>
<h3 id="el-desafío-del-catálogo">El Desafío del Catálogo</h3>
<p>El catálogo de sesiones puede ser <strong>horrible, es muy grande</strong>. Estamos hablando de <strong>más de 2000 sesiones</strong> diferentes y requiere una planificación.</p>
<p>Lo primero que tenéis que hacer es <strong>planificaros</strong> y por eso el planner no oficial es importantísimo.</p>
<h3 id="por-qué-es-importante-planificar">¿Por qué es Importante Planificar?</h3>
<p>Porque <strong>los centros de conferencias están muy separados unos de otros</strong>. Te puede interesar mucho una sesión en el Mandalay, pero la siguiente sesión la tienes en el MGM o la tienes en el Venetian en 10 minutos y <strong>no vas a llegar</strong>.</p>
<p>Además, tienes que tener en cuenta que las sesiones hay que reservarlas, es posible entrar sin reserva pero solamente el 15% del aforo no se reserva, además dependes de que la gente con reserva no se presente y vas a tener que estar mucho antes de la sesión.</p>
<h3 id="mi-estrategia-de-planificación">Mi Estrategia de Planificación</h3>
<p>Yo normalmente lo que suelo hacer es ver <strong>qué sesiones son las más importantes para mí</strong> y sobre eso voy haciéndome la agenda, luego marco en qué centros de conferencia voy a estar más tiempo. <strong>Intento pasar casi todo el día en un solo centro de conferencias</strong>, prefiero no moverme mucho porque se pierde mucho tiempo.</p>
<p>Pero si hay una sesión muy interesante en otro centro de conferencias, voy a ir. Esto os lo digo que es bastante importante y suelo hacerme la planificación y dejármelo todo preparado.</p>
<h3 id="cuándo-se-abren-las-reservas">Cuándo se Abren las Reservas</h3>
<p><strong>A primeros de octubre</strong> (aproximadamente primera o segunda semana de octubre) se abre la reserva de sesiones.
Hay sesiones con un aforo muy pequeño y muy demandadas (Chalk Talks y Code Talks).</p>
<p>Algunas sesiones, por ejemplo Lightning Talks, no se pueden reservar, las keynotes tampoco, pero las sesiones que se pueden reservar es <strong>importante reservarlas con tiempo</strong>.</p>
<h3 id="mi-estrategia-de-reserva">Mi Estrategia de Reserva</h3>
<p>Es más, <strong>yo las reservo el mismo día que se abre la agenda</strong>. Me pongo una alarma en el calendario, estoy 10 minutos antes con todo preparado para reservar las sesiones.</p>
<p>Aquí es importante planificaros bien, saber qué sesiones vas a reservar.</p>
<h2 id="gestión-de-la-carga-de-sesiones">Gestión de la Carga de Sesiones</h2>
<h3 id="no-te-sobrecargues">No Te Sobrecargues</h3>
<p>Os recomiendo que <strong>os relajéis</strong>, que tengáis en cuenta que si vais a muchas sesiones vais a estar muy cansados. Yo el primer año, por ejemplo, creo que uno de los días hice <strong>siete u ocho sesiones</strong>, lo cual es una auténtica barbaridad.</p>
<p>Además, el primer año, el primer día <strong>se me olvidó incluso que tenía que comer</strong> - la hora de la comida se me pasó por completo y fue un desastre. Tuve que comer a todo prisa, horrible.</p>
<h3 id="planifica-las-comidas-y-descansos">Planifica las Comidas y Descansos</h3>
<p>Yo os recomiendo que os <strong>planifiquéis los descansos</strong> para poder parar siempre un rato. También os recomiendo que <strong>os paréis a comer en una mesa</strong>, existe la opción de comida para llevar, puedes cogerte una bolsa y la comes por el camino o la comes fuera de manera muy rápida, pero yo recomiendo <strong>sentaros</strong> porque al final os va a estresar muchísimo.</p>
<h3 id="la-agenda-va-a-saltar-por-los-aires">La agenda va a saltar por los aires</h3>
<p>Todo esto es muy bonito, pero que sepáis que por mucho que os planifiquéis tenéis que tener en cuenta que vuestra agenda va a explotar, por un lado al final puede pasar que no llegues a una sesión o incluso que encuentres algo más interesante que hacer durante ese tiempo.</p>
<p>También os puede pasar que os pongan una reunión a la vez que una sesión en otro Centro de Conferencias (me ha pasado) y tienes que replanificar la agenda.</p>
<p>O que os apuntéis dos veces a la misma sesión en dos días diferentes (hay sesiones que se repiten). He conocido gente que le ha pasado.</p>
<p>Por último, hay unas sesiones que no están en la agenda todavía y que aparecen durante el evento, si aparece un nuevo servicio, normalmente este tiene sesiones asociadas, pero no se liberan hasta que no se publican en la keynote, así que estaros atentos a estas sesiones sobre servicios o features nuevas.</p>
<p>Por cierto, puede pasar que la sesión sobre un servicio nuevo sea en otro centro de conferencias al que tenías pensado ir&hellip;</p>
<h1 id="la-expo-y-el-swag-">La Expo y el Swag 🎁</h1>
<h2 id="qué-esperar-en-la-expo">Qué Esperar en la Expo</h2>
<p>En la Expo hay <strong>un montón de swag</strong> (merchandising gratuito). Hay mogollón de peluches, camisetas, gadgets tecnológicos y todo tipo de regalos de los diferentes partners y proveedores.</p>
<p>Yo os recomiendo pasaros todos los días, para ir viéndola. Es gigantesca y el swag va cambiando, pero además es interesante conocer las novedades que traen los partners.</p>
<p><img alt="Expo" loading="lazy" src="/post005/Expo_es.png"></p>
<h3 id="estrategia-para-el-swag">Estrategia para el Swag</h3>
<p><strong>Último día</strong>: En general no es difícil conseguir swag, pero el último día es muy sencillo ya que el último día tienen que gastarlo porque si no se lo tienen que volver a llevar. Entonces <strong>suele ser el día más fácil de conseguir swag</strong>.</p>
<p>Eso sí, puede ser que ese día queden tallas raras o cosas que nadie quiere. (Ojo, yo he conseguido muchos peluches a última hora)</p>
<p><img alt="SWAG" loading="lazy" src="/post005/SWAG_es.png"></p>
<h1 id="las-fiestas-y-eventos-sociales-">Las Fiestas y Eventos Sociales 🎉</h1>
<h2 id="importancia-del-networking">Importancia del Networking</h2>
<p>Las <strong>fiestas también son muy importantes</strong> en el re:Invent. Hay un montón de fiestas, un montón de maneras de socializar con gente. Aquí ya depende de cada uno, obviamente.</p>
<p>Yo no soy muy fan de las fiestas y no me suelo prodigar en ellas, pero son un buen sitio para pasárselo bien y conocer gente.</p>
<h2 id="dress-code-para-fiestas">Dress Code para Fiestas</h2>
<p>En muchas de ellas hay un <strong>dress code</strong>, pero principalmente en las que se realizan por la noche en una discoteca.</p>
<p>Si vas a un restaurante a cenar por la tarde/noche (hay un montón de eventos así), no suelen pedirte un dress code, pero es verdad que si vas a algún club por la noche, ahí sí que piden un dress code.</p>
<p>Siempre tienes que reservar estas fiestas antes de ir, suele ser por invitación pero hay maneras de conseguirlas.</p>
<h2 id="conference-parties">Conference Parties</h2>
<p>Tenéis una <strong>web increíble que es <a href="https://conferenceparties.com/reinvent2025/">Conference Party</a></strong> donde están todas las fiestas. La web tiene todas las fiestas que se van planificando en el re:Invent, con los enlaces para reservarlas y dónde se realizan.</p>
<p>Tenéis que rellenar vuestros datos y siempre os van a hacer preguntas. Luego son muy pesados los meses posteriores para intentar vender su producto (obviamente es para lo que hacen este tipo de fiestas).</p>
<h2 id="replay">re:Play</h2>
<p>Hay una fiesta a la que sí tienes que ir (al menos una vez), que es el re:Play, es la fiesta oficial del evento el jueves por la noche.</p>
<p>La fiesta se realiza en el recinto de festivales de Las Vegas y es una auténtica pasada. Tenéis de todo: música, DodgeBall, yincanas, juegos variados, comida.</p>
<p>La verdad es que es como un festival nerd, con un poco de todo.</p>
<p>Suele tocar algún grupo conocido (Weezer en 2024 y Portugal The Man en 2023) y cierra algún DJ importante (Zedd 2024, Major Lazer 2023 y Martin Garrix 2022).</p>
<p><img alt="re:Play" loading="lazy" src="/post005/Replay_es.png"></p>
<h2 id="mi-recomendación-sobre-fiestas">Mi Recomendación sobre Fiestas</h2>
<p><strong>Si queréis ir, tenéis que ir</strong> - son bastante chulas y os lo vais a pasar bastante bien, pero también que <strong>descanséis</strong>. Es imposible ir a todas.</p>
<p>Es verdad que hay gente que dice: &ldquo;Oye, yo esta semana voy a ir a todas las sesiones, voy a ir a todas las fiestas, no duermo y ya cuando vuelva a casa dormiré.&rdquo; Se puede hacer, pero es muy complicado.</p>
<p>Mi recomendación es que os lo toméis con calma los primeros días <strong>es una semana</strong> - el re:Invent dura desde el lunes hasta el jueves, y necesitáis energía para aprovechar realmente el evento.</p>
<h1 id="mis-tips-finales-">Mis Tips Finales 💡</h1>
<ul>
<li><strong>Recordar comer</strong> - No seáis como yo y recordar comer. Cada día en cada venue hay un menú diferente de algún país (os recomiendo no ir al Venetian a comer, el comedor es gigante y se tarda en llegar a la mesa)</li>
<li><strong>Hidratarse</strong> - Beber agua constantemente.</li>
<li><strong>Aprender</strong> - El re:Invent es un evento formativo y se puede aprender mucho.</li>
<li><strong>Relacionarse</strong> - Hay mucha gente con un background diferente de la que se puede aprender mucho.</li>
<li><strong>Manejar el hype</strong> - Los lanzamientos siempre son impresionantes, pero hay que intentar bajar un poco el hype y ver si lo que presentan es interesante o simplemente humo (sobre todo esperar a ver el pricing)</li>
<li><strong>Conoce a las caras de AWS</strong> - Ver a los Advocates o a Jeff Barr no es imposible, y son gente bastante abierta, les puedes pedir un selfie.</li>
</ul>
<p>El re:Invent puede ser abrumador la primera vez, pero con estos consejos estarás preparado para aprovechar al máximo estos días intensos en Las Vegas.</p>
<p><strong>¡Nos vemos en Las Vegas!</strong> 🎲☁️</p>
]]></content:encoded>
    </item>
    <item>
      <title>Aurora DSQL: Cómo controlar el tiempo</title>
      <link>https://cloudhastaenlasopa.com/2025/08/aurora-dsql-c%C3%B3mo-controlar-el-tiempo/</link>
      <pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2025/08/aurora-dsql-c%C3%B3mo-controlar-el-tiempo/</guid>
      <description>Análisis técnico profundo de cómo Amazon Aurora DSQL logra escrituras consistentes multi-región mediante el control preciso del tiempo, explorando Amazon Time Sync Service, ClockBound, y la arquitectura distribuida real con Control de Concurrencia Optimista.</description>
      <content:encoded><![CDATA[<p>En el <a href="https://cloudhastaenlasopa.com/2025/06/el-camino-hacia-amazon-aurora-dsql/">artículo anterior</a> vimos cómo hemos llegado hasta Amazon Aurora DSQL y por qué necesitamos una base de datos que permita escrituras consistentes en múltiples regiones. Al final del artículo planteamos la pregunta clave: <strong>¿Cómo ha conseguido AWS una BBDD con escritura multiregional sin romper ACID?</strong></p>
<p>La respuesta está en algo que parece imposible: <strong>controlar el tiempo</strong>.</p>
<p>En este artículo vamos a explorar cómo AWS ha conseguido que Aurora DSQL consiga algo que parecía imposible o al menos muy complejo y es que una BBDD Postgres admita la escritura en múltiples regiones con consistencia.</p>
<p><strong>En este artículo vamos a ver:</strong></p>
<ul>
<li>El problema fundamental del tiempo en bases de datos distribuidas</li>
<li>La solución de AWS: Sincronización de tiempo a escala global</li>
<li>Aurora DSQL: Arquitectura real de sincronización distribuida</li>
<li>Comparativa con Aurora PostgreSQL</li>
<li>Limitaciones y consideraciones</li>
</ul>
<h1 id="el-problema-fundamental-el-tiempo-en-bases-de-datos-distribuidas">El Problema Fundamental: El Tiempo en Bases de Datos Distribuidas</h1>
<p>Antes de entender cómo Aurora DSQL resuelve el problema, necesitamos comprender por qué el tiempo es tan complejo en sistemas distribuidos.</p>
<h2 id="el-teorema-cap-o-teorema-brewer">El Teorema CAP o Teorema Brewer</h2>
<p>En 2000, Eric Brewer formuló el Teorema CAP que establece que en un sistema distribuido solo puedes garantizar dos de estas tres propiedades:</p>
<ul>
<li><strong>Consistency (Consistencia)</strong>: Todos los nodos ven los mismos datos al mismo tiempo</li>
<li><strong>Availability (Disponibilidad)</strong>: El sistema sigue funcionando aunque fallen algunos nodos</li>
<li><strong>Partition tolerance (Tolerancia a particiones)</strong>: El sistema continúa operando aunque se pierda comunicación entre nodos</li>
</ul>
<p>Cualquier base de datos como Aurora PostgreSQL o Aurora MySQL elige Consistencia y Disponibilidad, sacrificando la tolerancia a particiones. Por eso para escritura en Aurora PostgreSQL tenemos un nodo primario y el resto de nodos son réplicas secundarias, tanto en la misma región como en múltiples regiones.
Pero <strong>Aurora DSQL requiere que las tres propiedades estén garantizadas</strong>, lo que requiere un enfoque completamente diferente.</p>
<h2 id="el-problema-de-la-ordenación-temporal">El Problema de la Ordenación Temporal</h2>
<p>Imagina esta secuencia de eventos:</p>
<pre tabindex="0"><code>Región us-east-1  (10:00:00.020123): UPDATE users SET balance = 900 WHERE id = 123
Región us-west-2  (10:00:00.019548): UPDATE users SET balance = 200 WHERE id = 123
Región eu-west-1  (10:00:00.022020): UPDATE users SET balance = 500 WHERE id = 123
Región eu-south-2 (10:00:00.019386): UPDATE users SET balance = 300 WHERE id = 123
</code></pre><p><strong>¿Cuál de estas transacciones debería ejecutarse primero?</strong></p>
<p>Son ejecuciones en 4 regiones diferentes en el mismo segundo, sobre el mismo dato y con valores diferentes.</p>
<p>Si utilizamos un sistema como Aurora PostgreSQL con un nodo en la región us-east-1 primario, el dato correcto sería el dato de esta región, ya que el resto de ejecuciones tendríamos que sumar la latencia, lo que produciría inconsistencias.</p>
<p>Además de este problema estamos suponiendo que los sistemas están completamente sincronizados al milisegundo, pero esto no es siempre así. Una sincronización de tiempo no es sencilla.</p>
<p>Por último estamos viendo un ejemplo de una acción, mientras que una transacción conlleva varias acciones anidadas, lo que puede suponer un problema mayor.</p>
<p><strong>Este es el problema que Aurora DSQL debe resolver</strong>Crear un orden temporal global y consistente para todas las transacciones, independientemente de dónde se originen y tener un tiempo real y sincronizado entre regiones.</p>
<h1 id="la-solución-de-aws-sincronización-de-tiempo-a-escala-global">La Solución de AWS: Sincronización de Tiempo a Escala Global</h1>
<p>Tradicionalmente, cualquier centro de datos ha utilizado <strong>NTP (Network Time Protocol)</strong> para sincronizar con relojes atómicos que tienen una precisión a nivel del nanosegundo. Sin embargo, NTP presenta limitaciones críticas para sistemas que requieren precisión extrema, ya que tiene dependencias con una red conectada y por tanto sufre de latencia de red y por tanto puede llegar a una precisión de milisegundos.</p>
<p>AWS necesitaba una sincronización entre regiones mucho mayor, si quería tener un sistema como Aurora DSQL.</p>
<h2 id="amazon-time-sync-service">Amazon Time Sync Service</h2>
<p>AWS ha invertido mucho en que sus infraestructuras estén sincronizadas, para ello creó Amazon Time Sync Service.</p>
<p>Este servicio utiliza una flota de satélites con relojes atómicos que se conectan con todas las regiones de AWS proporcionando el mismo tiempo a todas ellas.
Los relojes atómicos son muy caros, pero son necesarios en cualquier sistema de posicionamiento satélite como GPS.
Además tienen una ventaja adicional, cuando envían los datos de tiempo sabemos con exactitud a qué distancia está el satélite y por tanto la latencia de la señal con un nivel de precisión muy alto.
A diferencia de un servicio tipo de NTP contra relojes atómicos en tierra esta latencia es estable y por tanto nos da una precisión mucho mayor.</p>
<p><img alt="Time Sync" loading="lazy" src="/post002/Tsync.png"></p>
<p>La precisión alcanzada es del orden de <a href="https://aws.amazon.com/about-aws/whats-new/2025/06/amazon-time-sync-nanosecond-hardware-packet-timestamps/">nanosegundos</a> entre regiones, algo impensable hace pocos años.</p>
<h3 id="clockbound-midiendo-la-precisión-del-tiempo">ClockBound: Midiendo la Precisión del Tiempo</h3>
<p>Complementando Time Sync Service, AWS ha desarrollado <a href="https://github.com/aws/clock-bound">ClockBound</a>, un demonio y librería open source que mide la precisión del reloj de las instancias EC2 y permite determinar el orden temporal real de los eventos.</p>
<p>Aunque el Amazon Time Sync Service proporciona tiempo muy preciso, siempre existe una pequeña desviación en la sincronización. ClockBound cuantifica esta desviación, y añade ciertas funcionalidades fundamentales para Amazon DSQL:</p>
<p><strong>Funcionalidades principales:</strong></p>
<ul>
<li><strong>Intervalos de tiempo con incertidumbre</strong>: En lugar de un timestamp exacto como <code>10:00:00.123456789</code>, ClockBound proporciona un rango <code>[10:00:00.123456785, 10:00:00.123456793]</code> qué garantiza que el tiempo real está dentro de ese intervalo.</li>
<li><strong>Comparación temporal definitiva</strong>: Puede determinar si un evento A ocurre definitivamente antes que un evento B, o si son potencialmente concurrentes.</li>
<li><strong>Detección de concurrencia</strong>: Identifica cuándo dos eventos pueden haber ocurrido al mismo tiempo, lo que es crucial para resolver conflictos de transacciones en DSQL</li>
<li><strong>Optimización de esperas</strong>: Calcula el tiempo mínimo que debe esperar una aplicación para garantizar que un timestamp sea globalmente único.</li>
</ul>
<p>Con ClockBound podemos comparar nuestra secuencia de tiempos de forma más exacta:</p>
<pre tabindex="0"><code>Evento us-east-1: [10:00:00.020120, 10:00:00.020126] 
Evento us-west-2: [10:00:00.019545, 10:00:00.019551]
Resultado: us-west-2 ocurrió definitivamente antes que us-east-1

Evento eu-west-1: [10:00:00.022018, 10:00:00.022022]
Evento eu-south-2: [10:00:00.019384, 10:00:00.019388] 
Resultado: eu-south-2 ocurrió definitivamente antes que eu-west-1

Evento us-east-1: [10:00:00.020120, 10:00:00.020126]
Evento us-west-2: [10:00:00.019545, 10:00:00.019551]
Evento con conflicto: [10:00:00.019550, 10:00:00.020125]
Resultado: El evento conflictivo se solapa con ambos
</code></pre><p>Como podéis suponer sin <strong>ClockBound</strong> Aurora DSQL probablemente no existiría.</p>
<p>Por cierto aunque <strong>ClockBound</strong> ha sido desarrollado por AWS es un proyecto de <strong>código abierto</strong> que <strong>cualquiera puede usar</strong>.</p>
<h1 id="aurora-dsql-arquitectura-real-de-sincronización-distribuida">Aurora DSQL: Arquitectura Real de Sincronización Distribuida</h1>
<p>Bueno ya va siendo hora de empezar a hablar de cómo funciona <strong>Aurora DSQL</strong> y qué componentes lo conforman.</p>
<p>Ahora que entendemos cómo AWS ha resuelto el problema del tiempo, podemos explorar cómo Aurora DSQL utiliza esta tecnología para crear una base de datos verdaderamente distribuida que mantiene las propiedades ACID a escala global.</p>
<h2 id="cómo-funciona-dsql">¿Cómo Funciona DSQL?</h2>
<p>Aurora DSQL no es simplemente un Aurora PostgreSQL mejorado. Es una arquitectura completamente nueva que reimagina cómo debe funcionar una base de datos para permitir la consistencia en multi-región.</p>
<p><strong>Componentes principales:</strong></p>
<p><img alt="DSQL Arch" loading="lazy" src="/post002/DSQL_1.png"></p>
<p>Es importante entender que cada capa escala de forma horizontal, independientemente del resto de capas y dinámicamente, todo ello dependiendo de la carga que demandemos a nuestro Aurora DSQL.</p>
<p>Esto hace que sea un servicio totalmente serverless.</p>
<h3 id="adjudicators"><strong>Adjudicators:</strong></h3>
<p>Aunque la primera capa es <strong>Query Processor</strong>, vamos a hablar primero de la capa de <strong>Adjudicator</strong>.</p>
<p>La capa de <strong>Adjudicator</strong> es probablemente el componente más innovador de Aurora DSQL.
Son procesos distribuidos que implementan algoritmos de consenso para garantizar que todas las regiones estén de acuerdo sobre el orden de las transacciones.</p>
<p>Cuando una transacción necesita ejecutarse, la capa de adjudicator revisa si existe conflicto con alguna otra transacción reciente. Para esto utilizan un algoritmo de consenso optimizado y distribuido, que permite detectar posibles conflictos.</p>
<p>Además esta capa escala horizontalmente pudiendo tener múltiples adjudicators para diferentes particiones de nuestra BBDD, cada adjudicator se ocupa de un espacio diferente de nuestra BBDD.</p>
<p>En Aurora DSQL todas las capas están desacopladas, esto implica que podemos definir sistemas de particiones diferentes para cada capa, de forma que los adjudicator no se particionan en función de cómo vamos a almacenar nuestros datos, sino de cómo vamos a analizar los conflictos entre transacciones, mejorando el rendimiento de esta tarea.</p>
<p>Los adjudicators no están replicados en cada región, sino que están distribuidos por espacios de la BBDD, en cualquier momento un adjudicator puede cambiar de región.</p>
<h3 id="journal-layer"><strong>Journal Layer:</strong></h3>
<p>El <strong>Journal</strong> es donde se registran todas las transacciones aprobadas por los Adjudicators.
Es similar al WAL (Write-Ahead Log) de Aurora PostgreSQL, pero distribuido en varias regiones.</p>
<p>Esto permite que cada transacción aprobada por un adjudicator se escriba directamente en los Journal.
Esta capa es la responsable de la durabilidad de los datos, ya que los registros del Journal son inmutables, están distribuidos y replicados en las regiones que elijamos, de forma que podemos tener una trazabilidad de todas las transacciones en este log de forma confiable y con respaldo.</p>
<h3 id="storage"><strong>Storage:</strong></h3>
<p>La capa de almacenamiento de Aurora DSQL extiende el concepto de Aurora Storage pero añadiendo capacidades de distribución global y consistencia temporal.</p>
<p>Una de las ventajas principales del Storage de Aurora DSQL, es que no es necesario que se ocupe de los conflictos (adjudicator) ni de la durabilidad (journal), esto da más flexibilidad a esta capa permitiendo una optimización mayor.</p>
<p>En vez de basar esta capa en una replicación de datos síncrona, lo que hace esta capa es basar la distribución del storage en particiones de datos, pero añadiendo capacidades de sharding no solo basados en particiones por claves, sino también por tiempo de acceso y regiones, de esta forma los datos están distribuidos de una forma más óptima aunque también estén replicados en las diferentes regiones.</p>
<p>Esto no es posible en una base de datos tradicional.</p>
<h3 id="query-processor"><strong>Query Processor:</strong></h3>
<p>Ya que hemos entendido cómo funcionan el resto de capas podemos hablar de Query Processor.</p>
<p><strong>Query Processor</strong> es la capa donde se recibe cualquier Query y es donde Aurora DSQL recibe las peticiones SQL y las convierte en operaciones distribuidas. A diferencia de Aurora PostgreSQL, aquí no hay un nodo &ldquo;primario&rdquo; único.</p>
<p>Como hemos visto antes nuestro storage no está particionado de una forma estándar, los datos no están replicados en el mismo storage, sino que están distribuidos en diferentes particiones de storage para mejorar el rendimiento.</p>
<p>Esto provoca que cualquier operación de lectura sea menos eficiente porque tenemos que saber dónde está el dato. También pasa con las operaciones de escritura ya que estas van a ser analizadas por la capa de adjudicator antes de escribirse en el Journal y posteriormente a la capa de Storage.</p>
<p>Además hemos visto que todas estas capas están distribuidas en diferentes particiones y que no tienen por qué ser iguales, es decir la capa de adjudicator no está particionada igual que la capa de storage.</p>
<p>Por este motivo <strong>Query Processor</strong> es una capa fundamental, ya que es la capa que orquesta todas nuestras querys, de forma que es capaz de saber en qué partición está un dato en storage para consultarlo o a qué adjudicator tiene que asignar la tarea de escritura de cualquier dato.</p>
<p>De esta forma esta capa minimiza la latencia reduciendo las tareas y loops que se pueden generar en cualquier transacción.</p>
<p>Otra ventaja para mantener la consistencia es que hace una ordenación temporal de las lecturas y elige el dato versionado más óptimo, por eso si realizamos una consulta de lectura de un dato que ha sido modificado después de nuestra lectura, pero por latencia nuestra escritura ha sido más rápida, en vez de devolvernos el dato modificado nos va a dar la versión del dato en el momento de la ejecución de la query.</p>
<h3 id="ejemplo-de-diagrama-completo"><strong>Ejemplo de Diagrama Completo:</strong></h3>
<p><img alt="DSQL Arch" loading="lazy" src="/post002/DSQL_2.png"></p>
<h2 id="pero-en-qué-mejora-esta-arquitectura-a-una-arquitectura-tradicional">¿Pero en qué mejora esta arquitectura a una arquitectura tradicional?</h2>
<p>La verdad es que la arquitectura está bien, pero realmente funciona ¿?</p>
<h3 id="strong-snapshot-isolation"><strong>Strong Snapshot Isolation</strong></h3>
<p>Aurora DSQL utiliza una variación del protocolo <strong>Optimistic Concurrency Control</strong> en lugar de un modelo tradicional. Esto es crucial para el rendimiento en un entorno distribuido.</p>
<p>Básicamente el protocolo de Optimistic Concurrency Control define que si estamos ejecutando una transacción que pueden concurrir con otra, el commit de esta transacción solamente puede ejecutarse en el caso que cumpla con las reglas de aislamiento definidas.</p>
<p>Por eso DSQL usa Strong Snapshot Isolation, este modo de trabajo permite que varias transacciones puedan ejecutarse en paralelo cumpliendo una serie de reglas:</p>
<ol>
<li>Todas las lecturas de la transacción se hacen utilizando el timestamp del inicio de la transacción (<strong>T<small>start</small></strong>).</li>
<li>En el momento de realizar el commit de los datos se establece el timestamp de commit (<strong>T<small>commit</small></strong>).</li>
<li>La transacción puede ejecutar el commit única y exclusivamente si ninguna otra transacción ha realizado un commit en la misma clave durante el tiempo de inicio de la transacción (<strong>T<small>start</small></strong>) y el tiempo de commit (<strong>T<small>commit</small></strong>)</li>
<li>Se ejecutan las escrituras utilizando el timestamp de Commit (<strong>T<small>commit</small></strong>)</li>
</ol>
<p>Esto tiene varias ventajas:</p>
<ol>
<li>Nunca vamos a ver datos que no vengan después de un commit.</li>
<li>Las lecturas son repetibles y por tanto cacheables.</li>
<li>Las lecturas vienen desde un solo punto de tiempo (lógico).</li>
<li>Las escrituras conflictivas son rechazadas, no se pierden escrituras.</li>
</ol>
<p>Por este motivo es tan importante la capa de <strong>Query Processor</strong> y <strong>Adjudicator</strong>, ya que es la encargada de hacer magia y que esto funcione.</p>
<h3 id="optimización-multi-región"><strong>Optimización Multi-Región</strong></h3>
<p>Hasta ahora lo que hemos visto parece que no es muy multi-región, además que seguiríamos teniendo un problema con las latencias, pero hemos visto un punto importante DSQL separa las lecturas de las escrituras y además tiene un componente fundamental como <strong>Query Processor</strong> que es donde se encolan las escrituras antes de realizarse el Commit.</p>
<p>De esta forma toda la transacción se puede llegar a ejecutar localmente aunque los datos estén distribuidos ya que únicamente a la hora de realizar el Commit es cuando necesitamos que la capa de <strong>Adjudicator</strong> valide y es posible que este adjudicator esté en otra región, pero solamente lo necesitamos para ejecutar el commit, no para escribir el dato.</p>
<p>Esto mejora increíblemente el rendimiento, evitando saltos entre regiones innecesarios, por lo que la latencia real de DSQL es mucho más baja de lo que esperaríamos.</p>
<p><img alt="DSQL Optimized" loading="lazy" src="/post002/DSQL_3.png"></p>
<h3 id="optimización-de-failover"><strong>Optimización de FailOver</strong></h3>
<p>Otra ventaja es que la capa de Adjudicator es una capa que no guarda todos los datos, solamente las transacciones recientes, para estudiar si hay conflicto por lo que es fácilmente replicable en caso de caída de una región.</p>
<p>Por otro lado la capa de Journal sí está distribuida y replicada, por lo que en caso de caída los datos están replicados en multi-región.</p>
<p>Por último la capa de storage, que siempre es algo más lenta a la hora de replicar, tiene la capacidad de rehacer todas las escrituras pendientes utilizando la capa de Journal.
<img alt="DSQL FailOver" loading="lazy" src="/post002/DSQL_4.png"></p>
<h2 id="comparativa-con-aurora-postgresql-o-bases-de-datos-tradicionales">Comparativa con Aurora PostgreSQL o bases de datos tradicionales</h2>
<h3 id="eliminación-del-concepto-de"><strong>Eliminación del Concepto de &ldquo;Primario&rdquo;</strong></h3>
<p>En Aurora PostgreSQL, hay un nodo primario que maneja todas las escrituras.</p>
<p>En Aurora DSQL, <strong>podemos iniciar una escritura desde cualquier región</strong>, minimizando las latencias en multi-región.</p>
<h3 id="escalabilidad-horizontal-real"><strong>Escalabilidad Horizontal Real</strong></h3>
<p>Aurora DSQL puede escalar añadiendo más regiones sin que tengamos una degradación de rendimiento.</p>
<h3 id="failover-más-rápido"><strong>FailOver más rápido</strong></h3>
<p>En Aurora PostgreSQL, si la región primaria falla, es necesario que una de las réplicas en otra región pase a ser primario (proceso de 1-2 minutos).</p>
<p>En Aurora DSQL el proceso es mucho más rápido porque no existe un primario y la carga está <strong>distribuida</strong>.</p>
<h3 id="escalado-horizontal"><strong>Escalado Horizontal</strong></h3>
<p>Aurora DSQL es una BBDD con capas totalmente desacopladas, lo que hace que sea posible realizar un escalado horizontal y desescalado horizontal, cosa que en Aurora PostgreSQL o en una BBDD tradicional no es posible</p>
<p>Además es una BBDD totalmente serverless.</p>
<h1 id="limitaciones-y-consideraciones">Limitaciones y Consideraciones</h1>
<p>Aurora DSQL es una maravilla, pero no es una base de datos para todos los públicos, por lo que personalmente no la recomiendo para todo el mundo.</p>
<p>Es una base de datos increíble si tu caso de uso es el adecuado, pero si tienes un caso de uso tradicional, probablemente no sea tu base de datos, incluso puede llegar a ser muchísimo peor que Aurora PostgreSQL.</p>
<p>Es importante remarcar que Aurora DSQL prioriza consistencia sobre latencia extrema:</p>
<ul>
<li>Transacciones simples: 10-50ms adicionales vs Aurora PostgreSQL.</li>
<li>Transacciones complejas: Puede ser 2-5x más lento que Aurora PostgreSQL.</li>
<li>Lecturas: No hay mucha variación ya que se utilizan réplicas locales.</li>
</ul>
<p><em>Comparativa de Latencia en la misma región</em></p>
<p>Si nuestras cargas están en una única región, Aurora DSQL va a tener una latencia mucho mayor.</p>
<h3 id="modelo-de-precios-de-aurora-dsql">Modelo de Precios de Aurora DSQL</h3>
<p>Aurora DSQL utiliza un <strong>modelo de precios serverless</strong> que cobra por:</p>
<p><strong>Compute (Procesamiento):</strong></p>
<ul>
<li>Se factura por Aurora Compute Units (ACUs) consumidas.</li>
<li>Escalado automático basado en la carga de trabajo.</li>
<li>No es necesario provisionar</li>
</ul>
<p><strong>Storage (Almacenamiento):</strong></p>
<ul>
<li>Cobro por GB almacenado por mes</li>
<li>Replicación automática incluida en el precio</li>
<li>Backup automático incluido</li>
</ul>
<p><strong>I/O (Entrada/Salida):</strong></p>
<ul>
<li>Cobro por millones de requests de I/O</li>
<li>Incluye tanto lecturas como escrituras</li>
</ul>
<h3 id="comparación-de-costes-aurora-dsql-vs-aurora-postgresql">Comparación de Costes: Aurora DSQL vs Aurora PostgreSQL</h3>
<p><strong>Escenario ejemplo - Aplicación mediana:</strong></p>
<p><strong>Aurora PostgreSQL (Provisioned):</strong></p>
<pre tabindex="0"><code>- Instancia db.r6g.large: ~$200/mes
- Almacenamiento (100GB): ~$10/mes
- I/O (10M requests): ~$2/mes
- Total aproximado: ~$212/mes (región única)
</code></pre><p><strong>Aurora DSQL (Serverless):</strong></p>
<pre tabindex="0"><code>- Compute (equivalente): ~$300-400/mes
- Almacenamiento (100GB): ~$15-20/mes
- I/O (10M requests): ~$3-5/mes
- Multi-región incluida: Sin costo adicional
- Total aproximado: ~$320-425/mes (multi-región)
</code></pre><p><strong>Factores que afectan el costo:</strong></p>
<ul>
<li><strong>Patrón de tráfico</strong>: Aurora DSQL es más eficiente para cargas variables</li>
<li><strong>Requisitos multi-región</strong>: Aurora DSQL incluye replicación en múltiples regiones sin costo adicional.</li>
<li><strong>Complejidad de transacciones</strong>: Transacciones distribuidas complejas pueden incrementar el costo</li>
<li><strong>Escalado automático</strong>: Puede resultar más económico para aplicaciones con picos de tráfico</li>
</ul>
<p><strong>¿Cuándo Aurora DSQL es más rentable?</strong></p>
<ul>
<li>Aplicaciones con tráfico muy variable (serverless se adapta automáticamente) <em>Siempre que la Latencia lo permita</em></li>
<li>Necesidad de multi-región.</li>
</ul>
<h2 id="casos-de-uso-no-recomendados">Casos de Uso No Recomendados</h2>
<p>Aurora DSQL no es ideal para:</p>
<ul>
<li>Aplicaciones que requieren latencia ultra-baja (&lt;1ms)</li>
<li>Cargas de trabajo principalmente de lectura</li>
<li>Sistemas con presupuesto muy limitado</li>
<li>Aplicaciones que pueden tolerar eventual consistency</li>
</ul>
<p>Aurora DSQL es una nueva categoría de base de datos que da una vuelta a las bases de datos distribuidas y multi-región.
Con esta nueva base de datos, AWS ha abierto la puerta a aplicaciones globales que antes eran técnicamente imposibles.</p>
]]></content:encoded>
    </item>
    <item>
      <title>El camino hacia Amazon Aurora DSQL</title>
      <link>https://cloudhastaenlasopa.com/2025/06/el-camino-hacia-amazon-aurora-dsql/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2025/06/el-camino-hacia-amazon-aurora-dsql/</guid>
      <description>Análisis técnico de la evolución desde los inicios de las BBDD hasta Amazon Aurora DSQL, explicando las innovaciones en AWS que han permitido crear una base de datos distribuida con escrituras consistentes en multiregión.</description>
      <content:encoded><![CDATA[<p>Amazon Aurora DSQL ha sido probablemente el anuncio más impactante en los últimos años en AWS, es un avance brutal que añade una nueva capa a un servicio como Amazon Aurora que ya era impresionante.</p>
<p>Eso sí, no es una BBDD para todos los públicos y vamos a hablar de ella en esta serie de artículos, en este primer artículo vamos a hablar de cómo hemos llegado hasta aquí y qué alternativas tenemos a Amazon Aurora DSQL, porque Amazon Aurora DSQL puede no ser lo más adecuado para nuestro caso de uso.</p>
<p>Por resumir que es Amazon Aurora DSQL, es una BBDD distribuida que permite la consistencia en escritura y por tanto permite transacciones ACID en multi-región.</p>
<p><strong>En este artículo vamos a ver:</strong></p>
<ul>
<li>Que es ACID y su importancia</li>
<li>Cómo han ido evolucionando las BBDD para ser más eficientes.</li>
<li>Cómo Aurora revolucionó las BBDD.</li>
<li>Que nos aporta Aurora Global Database y qué limitaciones tiene.</li>
<li>Por qué necesitamos Aurora DSQL</li>
</ul>
<h1 id="acid-qué-es-eso">¿ACID qué es eso?</h1>
<p>Lo primero es aclarar que es ACID (<strong>A</strong>tomicity, <strong>C</strong>onsistency, <strong>I</strong>solation and <strong>D</strong>urability).</p>
<p>ACID es un término que se acuñó en 1983 y en el que se basa todo el desarrollo de las BBDD actuales y aunque se acuñó en 1983, desde 1973 ya existían este tipos de Bases de Datos.</p>
<p>Para ser ACID compliant una BBDD debe permitir que sus transacciones cumplan estos requisitos:</p>
<h2 id="atomicity-atomicidad">Atomicity (Atomicidad)</h2>
<p>Una transacción suele tener múltiples pasos, pero tiene que tratarse como una única entidad o la transacción se ejecuta correctamente o falla en su totalidad, no puede dejar datos modificados parcialmente.</p>
<h2 id="consistency-consistencia">Consistency (Consistencia)</h2>
<p>La consistencia de una transacción es que los datos son consistentes, de forma que no puedan corromperse al ejecutar una transacción.</p>
<h2 id="isolation">Isolation</h2>
<p>El aislamiento garantiza que las operaciones se ejecutan de forma aislada y sin afectarse entre sí, de forma que al existir múltiples operaciones modificando el mismo registro una no se ejecute hasta que termine la anterior.</p>
<h2 id="durability">Durability</h2>
<p>Garantiza que una transacción una vez completada no pueda perderse incluso en caso de desastre y que los datos sigan estando disponibles una vez recuperado el desastre.</p>
<h2 id="todas-las-bbdd-soportan-transacciones-acid">¿Todas las BBDD soportan transacciones ACID?</h2>
<p>No todas las BBDD soportan ACID, por ejemplo Amazon MemoryDB no es ACID e incluso otras BBDD en AWS como Athena o DynamoDB originalmente no soportaban transacciones ACID (Actualmente las 2 las soportan).</p>
<p>Ahora vamos a ver cómo se ha ido solucionando este problema históricamente y cómo hemos llegado a Amazon Aurora DSQL.</p>
<h1 id="es-fácil-conseguir-que-nuestra-bbdd-sea-acid">¿Es fácil conseguir que nuestra BBDD sea ACID?</h1>
<p>No, no lo es, de hecho es una de las principales limitaciones de una BBDD, si alguna vez os habéis preguntado por qué las BBDD tienen tantos problemas con los sistemas de ficheros en Unix en general, es por esto.</p>
<p>Una transacción en BBDD suele conllevar muchas operaciones de lectura/escritura, además requiere cierto nivel de bloqueo (Mientras se realiza una transacción no se puede ejecutar otra que modifique los mismos datos).</p>
<p>Esto genera muchos problemas a nivel de latencia, pero no solo de latencia de red, incluso de latencia entre los propios componentes de un servidor. Para las BBDD históricamente la latencia de escritura a disco era un problema muy grande.</p>
<p>Los discos han mejorado mucho en velocidad, pero aun así no era suficiente, por eso hace unos años se optó por escribir en memoria en vez de disco. La memoria RAM es mucho más rápida en escritura y lectura por lo que todo son ventajas, pero también tiene una serie de problemas. Por un lado es volátil, con lo que podemos perder los datos y por otro lado tampoco podemos cargar el contenido entero, porque la memoria habitualmente tiene menos tamaño que nuestros discos.</p>
<p>Así que se optó por utilizar algo bastante habitual que es la memoria paginada que es crear “Páginas” de memoria que no dejan de ser bloques físicos de memoria. De esta forma podemos tener parte de nuestros datos en una página de memoria (Los datos frecuentes o nuevos) y volcamos de forma asíncrona los datos a disco para persistirlos. Esto además mejora tanto el performance al usar memoria, como el performance de disco ya que podemos optimizar las escrituras y las lecturas.</p>
<p>Pero tendríamos un problema en caso de un fallo antes de volcar los datos a disco o si necesitamos recuperarlos, pero esto se soluciona con un sistema de logging transaccional conocido como Write-Ahead Logging (WAL) que sigue el principio DO-UNDO-REDO.</p>
<p>Adicionalmente a escribir en memoria el resultado la transacción, se escribe un log con la transacción en sí:</p>
<p><img alt="BBDD old" loading="lazy" src="/post001/DSQL_1.png">
De esta forma si tenemos un fallo podemos cargar una página antigua que esté persistida y aplicar todos las transacciones que no se han persistido (REDO). O en caso contrario si queremos rectificar una transacción podemos saber que ha modificado y volver al estado anterior (UNDO):</p>
<p><img alt="Write-Ahead Logging" loading="lazy" src="/post001/DSQL_2.png"></p>
<p>Este sistema mejora infinitamente el rendimiento de las BBDD y es algo que lleva utilizándose muchos años en cualquier motor de BBDD.</p>
<h1 id="y-cómo-una-bbdd-puede-ser-acid-en-múltiples-zonas-de-disponibilidad">¿Y cómo una BBDD puede ser ACID en múltiples Zonas de Disponibilidad?</h1>
<p>Hasta aquí hemos visto cómo conseguimos esto en un solo servidor, pero si queremos tener alta disponibilidad, tenemos que montar 2 servidores (Un primario y un Stand-By) y aquí aparece el principal problema de todos la latencia de red.</p>
<p>Una transacción no es solo una lectura o escritura en una BBDD, sino que es una secuencia de operaciones y por tanto el tiempo de ejecución de una transacción depende de la latencia.
<img alt="DSQL_3.png" loading="lazy" src="/post001/DSQL_3.png">
Esto es un problema con una replicación síncrona, porque tenemos que esperar a que cada operación se replique. Esto incrementa mucho la duración de la transacción, porque tenemos que mandar la operación por red, que se ejecute en la réplica y esperar a que nos devuelva el ACK. Como la latencia de red es mucho más elevada, el tiempo de ejecución de una transacción se multiplica exponencialmente.
<img alt="DSQL_4.png" loading="lazy" src="/post001/DSQL_4.png">
Podemos optar por una solución un poco más eficiente, que son las Read Réplicas, que en vez de utilizar una replicación síncrona utilizan una replicación asíncrona, de forma similar a como hacíamos con el disco, pero que van a tener un lag de replicación que es el tiempo en el que la réplica no tendrá el dato actualizado.</p>
<p>Seguramente os preguntaréis cómo podemos garantizar que una transacción es ACID con una replicación, si vamos a tener un lag de replicación, la respuesta es sencilla, limitando las escrituras a una sola instancia. De esta forma garantizamos la consistencia y el aislamiento.</p>
<h1 id="es-mejorable">¿Es mejorable?</h1>
<p>Este método era mejorable, ya que el lag de replicación nos puede afectar bastante y aquí es donde entra la magia de Amazon Aurora.</p>
<p>Amazon Aurora hizo algo muy interesante que fue separar la capa de Almacenamiento y la de Computo. Dejando el motor de la BBDD en una instancia y gestionando la capa de almacenamiento de forma independiente.</p>
<p>El motor de BBDD es exactamente igual, pero a la hora de realizar una escritura en vez de llamar directamente a disco, llama a los Storage Node de Aurora.
<img alt="DSQL_5.png" loading="lazy" src="/post001/DSQL_5.png">
Cada nueva escritura lanza este esquema:</p>
<ol>
<li>Los registros se reciben en el Incoming Queue y se almacenan en el Hot Log en memoria</li>
<li>Se devuelve el ACK al motor de la BBDD sin esperar la persistencia</li>
<li>Los datos se registran en el Update Queue y se agrupan para optimizar las escrituras</li>
<li>Se genera un nuevo Data Page distribuyéndolo en 6 copias sincronizadas (2 por cada AZ)</li>
<li>Se realizan backups periódicos de Hot Logs y Data Pages a S3</li>
</ol>
<p>De esta forma se consigue una latencia de replicación muy baja, menor a 100 ms (La cual es bajísima para un entorno multi AZ) en varias zonas de disponibilidad repartidas en 6 Copias, además se consiguen backups continuos y la posibilidad de hacer restauraciones a puntos determinados de tiempo.</p>
<p>Lo mejor es que esto no impacta en el rendimiento de la BBDD ya que las operaciones de Storage no se ejecutan en la misma instancia donde está nuestro motor de BBDD, permitiendo un mayor rendimiento en general.</p>
<p>Y además se replica vía Log todas las transacciones en todos los nodos.
<img alt="DSQL_5.png" loading="lazy" src="/post001/DSQL_6.png">
Aurora soporta hasta 15 read réplicas y 64 TB de almacenamiento automático y puede manejar hasta 500,000 lecturas y 100,000 escrituras por segundo.</p>
<p>Nota: Existen más pasos que he simplificado para un correcto entendimiento, ya que es un almacenamiento distribuido, no solo existe un nodo de Storage, etc.</p>
<p>Nota 2: A nivel de motor de BBDD también se guardan los registros en memoria de forma que la escritura es más rápida.</p>
<h1 id="y-en-múltiples-regiones">¿Y en múltiples Regiones?</h1>
<p>Si necesitamos replicar nuestra BBDD en otra región, nos vamos a encontrar que la latencia de replicación es mucho mayor, básicamente porque la latencia de red entre regiones es muy alta.</p>
<p>Pero aquí es donde entra Amazon Aurora Global Database a ayudarnos.</p>
<p>Amazon Aurora Global Database extiende su modelo de replicación a otras regiones, en este caso además de separar la capa de Almacenamiento, separa la capa de replicación.</p>
<p>De esta forma vamos a tener una capa independiente para gestionar la replicación entre regiones y una capa de storage independiente para gestionar la replicación entre zonas. Esto permite que Amazon Aurora Global Database tenga mejor rendimiento a nivel de BBDD y una replicación entre regiones muy optimizada.</p>
<p><img alt="DSQL_7.png" loading="lazy" src="/post001/DSQL_7.png">
Cada nueva escritura lanza este esquema:</p>
<ol>
<li>Se escriben los nuevos registros en los Storage nodes y réplicas de la  BBDD zonales y adicionalmente se escribe en un servidor de replicación.</li>
<li>El servidor de replicación replica los registros de escritura en el servidor con el agente de replicación perteneciente al grupo de servidores de replicación en otras regiones.</li>
<li>Este servidor de replicación actúa como si fuese una BBDD primaria y  ejecuta los registros de escritura tanto en la réplica global de la BBDD como en los Storage nodes de esta región.</li>
<li>Por último, si el servidor de replicación detecta que no ha recibido algún registro de escritura, los recogerá de los storage nodes de la región primaria.</li>
</ol>
<p>De esta forma también se consigue una latencia de replicación muy baja, menor a 1 segundo en hasta 5 regiones secundarias. Cada región secundario tendrá adicionalmente replicación en zonas de disponibilidad y 6 Copias repartidas entre ellas, además tenemos backup multiregionales y continuos ya que el backup se almacenará también en cada región secundaria.</p>
<h1 id="y-la-escritura-en-múltiples-regiones">¿Y la escritura en múltiples regiones?</h1>
<p>Es el mayor problema que hay en este modelo, ya que las escrituras solo pueden ejecutarse en la región primaria y por tanto la latencia de escritura en multiregión es altísima.</p>
<p>Existe una solución intermedia que es utilizar write forwarding en Amazon Aurora, esto nos permite configurar una réplica global para escribir en ella, aunque realmente lo que estamos haciendo es enviar estas peticiones con un forward a la BBDD principal.
Es una forma un poco más eficiente de escribir en multiregion, que nos permite utilizar endpoints por región, pero no es muy eficiente en escritura.</p>
<h1 id="el-desafío-de-las-escrituras-multiregión-consistentes">El Desafío de las escrituras multiregión consistentes</h1>
<p>Como hemos visto, tanto Amazon Aurora como Aurora Global Database han resuelto los problemas de rendimiento y replicación, siguen teniendo una limitación fundamental: las escrituras deben centralizarse en una región primaria para garantizar la consistencia ACID.</p>
<p>Esta arquitectura funciona perfectamente para aplicaciones que pueden funcionar con escrituras centralizadas, pero ¿qué pasa cuando necesitamos que usuarios en diferentes regiones puedan escribir con baja latencia manteniendo la consistencia de escritura? Aquí es donde Amazon Aurora DSQL entra a escena.</p>
<p>Uno de los problemas de las escrituras, es controlar la secuencia de tiempos, porque si lanzamos una escritura desde una región y lanzamos otra escritura sobre el mismo registro 100ms después en otra región, para cada una de estas regiones el dato correcto no es el mismo, porque no podemos controlar el tiempo y tendremos un problema de consistencia bastante grande.
(Bueno realmente sí podemos controlar el tiempo, pero lo veremos en el próximo artículo).</p>
<h1 id="conclusiones">Conclusiones.</h1>
<p>A lo largo de este artículo hemos recorrido la evolución en AWS que ha llevado al desarrollo de Amazon Aurora DSQL, desde los fundamentos de ACID hasta las limitaciones de los sistemas multiregión actuales.</p>
<p>El sistema de replicación que utiliza Amazon Aurora y Amazon Aurora Global Database es una auténtica maravilla, porque mejora el performance increíblemente y además reduce los tiempos de replicación drásticamente.</p>
<p>Si no necesitamos escrituras multiregion Amazon Aurora o Amazon Global Database es la mejor opción para la mayoría de casos, pero en caso de requerir una BBDD global, distribuida y con escritura consistente en multiregion tenemos que optar por Amazon Aurora DSQL.</p>
<table>
	<thead>
			<tr>
					<th>Característica</th>
					<th>Aurora</th>
					<th>Aurora Global</th>
					<th>Aurora DSQL</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Latencia escritura</td>
					<td>Baja en la zona primaria</td>
					<td>Baja en la zona primaria y alta en multiregion</td>
					<td>Baja en multiregion</td>
			</tr>
			<tr>
					<td>Regiones escritura</td>
					<td>1</td>
					<td>1 primaria y hasta 5 adicionales con write forwarding</td>
					<td>Múltiples</td>
			</tr>
			<tr>
					<td>Read réplicas</td>
					<td>Hasta 15</td>
					<td>Hasta 16 por región</td>
					<td>Distribuidas globalmente</td>
			</tr>
			<tr>
					<td>Casos de uso</td>
					<td>Apps regionales</td>
					<td>Apps globales con lectura intensiva, dashboards</td>
					<td>Apps globales con escritura intensiva en múltiples regiones, gaming, IoT</td>
			</tr>
	</tbody>
</table>
<h3 id="cuánto-cuesta-aurora-dsql">¿Cuánto cuesta Aurora DSQL?</h3>
<p>Aunque AWS todavía no ha publicado precios oficiales, Aurora DSQL será considerablemente más caro que Aurora debido a su complejidad distribuida.</p>
<p>Tomando como referencia <strong>Aurora MySQL/PostgreSQL</strong><br>
<strong>Aurora Global Database</strong>: es un 65% más caro <br>
<strong>Aurora DSQL</strong>: Se estima entre 3 y 5 veces más que Aurora Global</p>
<h3 id="cuál-elegir">¿Cuál elegir?</h3>
<p><strong>NO uses Aurora DSQL si:</strong></p>
<ul>
<li>Tus escrituras pueden centralizarse en una región (&gt;80% de casos)</li>
<li>Necesitas usar MySQL como motor de BBDD</li>
<li>Tus transacciones no requieren baja latencia en escritura multiregión</li>
</ul>
<p><strong>Puedes utilizar Aurora Global Database cuando :</strong></p>
<ul>
<li>Puedes tolerar write forwarding o escrituras en una sola región</li>
<li>Requieres lecturas intensivas multiregion con escrituras ocasionales</li>
<li>Necesitas un DR multiregión pero no escrituras activo-activo</li>
</ul>
<p><strong>Puedes utilizar Aurora Cuando:</strong></p>
<ul>
<li>Tienes Aplicaciones regionales</li>
<li>El presupuesto limitado</li>
<li>Requieres una simplicidad operacional</li>
</ul>
<p>Ahora que tenemos claro el problema, nos tenemos que hacer una pregunta: <strong>¿Cómo ha conseguido AWS una BBDD con escritura multiregional sin romper ACID?</strong></p>
<p>En el próximo artículo desvelaremos los secretos de Aurora DSQL y como AWS ha conseguido domar el tiempo en una BBDD.</p>
<p>👉 <strong>Próximo: &ldquo;Aurora DSQL: Como controlar el tiempo&rdquo;</strong></p>
]]></content:encoded>
    </item>
    <item>
      <title></title>
      <link>https://cloudhastaenlasopa.com/1/01/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/1/01/</guid>
      <description></description>
    </item>
  </channel>
</rss>
