Como desarrolladores sin servidor, desarrollamos nuestros servicios con infraestructura como código (IaC) y, recientemente, con infraestructura a partir del código (IfC), pero, principalmente, significa que escribimos código o configuración para generar nuestros recursos de AWS. ¿Qué pasa si lo hemos estado haciendo mal durante todos estos años? ¿Qué pasa si existe una forma mejor y más sencilla de crear servicios sin servidor en AWS?
En este artículo, aprenderás a crear servicios sin servidor dibujando diagramas de infraestructura con AWS Application Composer . Compartiré mi experiencia al usarlo, sus fortalezas y limitaciones actuales, y presentaré mi lista de deseos.
Tabla de contenido
IaC y DevOps son difíciles
Escribir archivos de configuración de recursos o código AWS CDK, SAM o Terraform es difícil.
Debes aprender a usar la herramienta, revisar su documentación, aprender sus mejores prácticas (lee mi publicación sobre mejores prácticas de CDK aquí ) y escribir código o configuración, y mucho.
Históricamente, los desarrolladores se han alejado de escribir configuraciones que generen recursos como los diagramas de Helm (me estremezco al pensar en K8S), lo que ha ralentizado la adopción de dichas herramientas entre los desarrolladores. Sin embargo, con tecnologías como serverless que van de la mano con herramientas más nuevas como AWS CDK y SAM y la tendencia reciente de infraestructura a partir del código, los desarrolladores adoptan la mentalidad de DevOps y están más abiertos a escribir código de infraestructura. Pero sigue siendo difícil.
Hoy quiero presentar una nueva opción que encontré: crear recursos dibujando un diagrama de recursos, sin necesidad de código.
¿Infraestructura de dibujo?
Sí, dibujar diagramas de infraestructura. Todos lo hacemos en algún momento en el trabajo.
Como arquitecto, hago diseños de alto nivel que describen el comportamiento del servicio y cómo los dominios de servicio se conectan entre sí.
Los desarrolladores toman mis diseños de alto nivel y los convierten en diseños de bajo nivel que describen los recursos reales sin servidor de AWS del servicio. Usamos herramientas de diagramas como Lucidchart o Draw.io.
Los diagramas de infraestructura de servicio son una excelente herramienta para presentar una nueva característica, presentar el servicio a un nuevo compañero de equipo o incluso obtener una comprensión clara de cómo funciona el servicio.
Sin embargo, los diagramas de infraestructura también tienen sus problemas.
Los diagramas (casi) siempre están desincronizados
A medida que pasa el tiempo, se agregan características y se corrigen errores. Los desarrolladores cambian los diseños originales y algunos elementos de diseño se descartan debido a la prioridad y nunca se desarrollan. ¿Recuerdas ese diagrama de infraestructura original que creaste meticulosamente y del que estabas tan orgulloso? Ya no está sincronizado con la infraestructura de servicio real y pierde valor rápidamente.
Para solucionar este problema, siempre hay que recurrir al código o a los archivos de configuración de la infraestructura ( AWS CDK , en mi caso). El código no miente , pero analizarlo requiere tiempo y habilidad.
La solución óptima sería sincronizar el diagrama de infraestructura de servicio con el código de servicio. Es un verdadero fastidio recordar actualizar el diagrama constantemente. Nadie lo hace.
Afortunadamente, AWS ideó una forma de hacer exactamente eso de manera automática , haciendo que al mismo tiempo la creación de infraestructura de servicios sea más intuitiva y divertida.
Lo lograron mediante la creación de AWS Application Composer , que permite dibujar diagramas de infraestructura y convertirlos en plantillas de AWS SAM o CloudFormation.
Compositor de aplicaciones de AWS
Hace unos años, en 2021, AWS compró una startup llamada "Stackery" que intentó resolver este mismo problema. En diciembre de 2022, nació AWS Application Composer .
Estuvo disponible de forma general hace menos de un año, en marzo de 2023. Durante AWS re:invent 2023, hicieron un gran anuncio que me llamó la atención.
En lugar de trabajar en la consola y hacer diagramas, ahora puedo usar Application Composer desde la comodidad de mi IDE de Visual Studio.
Repasemos la experiencia del usuario y el flujo de desarrollo.
La experiencia del usuario
Puedes iniciar un nuevo proyecto vacío o cargar un proyecto existente. Decidí cargar mi proyecto de plantilla de libro de recetas de AWS Lambda Handler y ver cómo funciona.
Este es el diagrama de servicio (que, irónicamente, no está sincronizado con la infraestructura; le faltan las alarmas y los paneles de CloudWatch):
Ahora, generemos un diagrama a partir de la plantilla de CloudFormation del proyecto existente y veamos qué obtenemos. En Mac, haga clic en "CMD + SHIFT + P" y elija la plantilla de CloudFormation/SAM del proyecto:
¡Asegúrate de haber instalado la extensión del kit de herramientas de AWS!
El resultado inicial en la pantalla es un diagrama que contiene muchos recursos con conexiones entre ellos. Cada recurso tiene su icono, nombre y configuración actual, que son familiares para AWS.
Una característica muy útil permite agrupar recursos en un grupo o un dominio lógico . He dividido mis recursos entre construcciones de CDK, pero esa división no llegó a CloudFormation. Me llevó dos minutos ordenar todo y obtuve este hermoso diagrama:
Tengo mi grupo de API CRUD (API GW, función Lambda, dos tablas DynamoDB), recursos de CloudWatch, un grupo AppConfig y todas las conexiones entre los recursos.
Impresión inicial: Estoy impresionado; es muy legible y resuelve el problema de desincronización del diagrama. ¿Recuerdas el problema de desincronización del diagrama? Todos los cambios que hagas aquí se traducirán y escribirán automáticamente en tu plantilla SAM o CloudFormation. ¡Incluso los grupos! Agregaron un nuevo atributo 'ApplicationComposer' a CloudFormation.
Veamos lo fácil que es agregar y configurar nuevos recursos sin servidor.
Cómo agregar recursos sin servidor
Digamos que quiero agregar un nuevo recurso de CloudFormation. La búsqueda de recursos es excelente y rápida; puedes agregar más de 1000 recursos. Seleccionemos una función Lambda. Nos aparece un menú fácil de usar con todos los campos esenciales y una lista desplegable:
Normalmente, escribiría mucho código CDK para lo mismo, pero aquí puedo hacerlo en la interfaz de usuario.
Cómo agregar recursos sin servidor menos comunes
Intentemos agregar otro recurso, una implementación de AppConfig.
En este caso, la experiencia podría ser mejor. El panel de configuración de recursos no tiene listas desplegables predefinidas. Debo escribir el código de configuración de CloudFormation. Muchos recursos menos comunes no tienen las mismas listas desplegables que la función Lambda, sino un cuadro de configuración de valor clave donde se colocan todas las configuraciones. Esto es un poco difícil de completar y comprender. Sin embargo, tiene un enlace a la documentación oficial de recursos, lo cual es un buen detalle, y un botón de sugerencias de IA para ejemplos de configuración de muestra.
En general, es una buena idea utilizar los recursos sin servidor más comunes. Con el tiempo, cada vez más recursos recibirán el tratamiento VIP. Y, para ser justos, puedo comparar eso con el hecho de que CDK no tenga abstracciones de construcciones L2 para muchos servicios nuevos.
Conectando recursos
Puedes dibujar líneas de un recurso a otro para conectarlos. Puedes conectar recursos como una API Gateway a una función Lambda y configurar la función específica como el destino de la ruta. Es muy fácil. Sin embargo, solo se admiten algunos recursos. Intenté conectar una cola SQS a un tema SNS y me apareció una ventana emergente con información sobre herramientas que me decía que aún no se admite. Cuando se admite, la experiencia es sencilla.
Limitaciones
Entonces, ya hemos discutido dos limitaciones:
Configuraciones de recursos: falta de experiencia desplegable, lo que no es una experiencia de usuario ideal, pero puedes hacer que funcione.
No puedo conectar algunos recursos que deberían estar conectados dibujando líneas entre ellos.
Sin embargo, existen otras limitaciones que deberíamos discutir.
He utilizado Application Composer en una plantilla CloudFormation de servicios a gran escala y me apareció una advertencia de límite de recursos. Se solucionará, pero por ahora es una limitación.
El diagrama que obtuve era muy grande y llevaría mucho tiempo ordenarlo y agruparlo. Otra limitación es la falta de compatibilidad con CDK. Sí, ya sé que generar construcciones CDK L2 adecuadas es extremadamente difícil, pero un niño puede soñar...
A pesar de todo lo anterior, el servicio tiene un futuro brillante y se convertirá en parte de mi herramienta diaria una vez que se superen estas limitaciones.
¿Deberías usarlo?
¿La experiencia es mejor que escribir IaC? ¿Es más intuitiva o incluso divertida? Sí, al 100 %; cuando todos los recursos son compatibles y tienen su selección desplegable personalizada, sí, es muy fácil.
¿Reemplazará a CDK para mí?
No, no hasta que tenga soporte completo de CDK, pero tiene sus casos de uso, especialmente para la creación de diagramas de infraestructura con fines de documentación.
¿Para quién es?
Es ideal para quienes desean dibujar diseños de bajo nivel u obtener una representación precisa del diagrama de infraestructura de su servicio pequeño o mediano, para quienes desean crear pruebas de concepto rápidamente y, por supuesto, para quienes usan CloudFormation o SAM nativos. Incluso si no lo usará para crear recursos, tiene sentido usarlo para dibujar los diagramas de infraestructura. Recientemente, agregué una imagen de recurso de Application Composer a la documentación del libro de recetas de AWS Lambda Handler porque era fácil de generar y simplificaba la explicación del servicio.
Estoy entusiasmado con el servicio y su futuro; tiene mucho potencial y áreas para crecer. Una vez que se perfeccione la experiencia del usuario, será difícil no usarlo, y el equipo va en la dirección correcta.
Por último, si alguien de App Composer está leyendo esto, mi lista de deseos y mi visión para el servicio se encuentran a continuación.
Lista de deseos de Application Composer
Si consiguiéramos incluir incluso una parte de esta lista de deseos, Application Composer sería excepcional:
Infraestructura desde el chat : ¿Por qué deberíamos molestarnos en definir recursos de diagramas y conectar íconos cuando tenemos utilidades de IA (Amazon Q y CodeWhisperer) directamente en el kit de herramientas de AWS en el IDE? Quiero decirle a mi asistente de IA qué diseñar y que dibuje y configure el diagrama de infraestructura.
Agrupación automática de recursos: agrupa algunos tipos de recursos del mismo tipo (paneles de CW, recursos de AppConfig, etc.).
Opción de diagrama de diseño de alto nivel: cree una opción para "fusionar" objetos en un grupo de dominio para abstraerlos, no solo colocarlos en un grupo. Mientras tanto, visualicemos pilas anidadas en diagramas separados en el IDE.
Resuelva las limitaciones: agregue compatibilidad con L2 CDK y admita más recursos con opciones de configuración detalladas.
Complemento de Github/Jenkins para visualizar cambios: cuando reviso una solicitud de incorporación de cambios, quiero comprender visualmente qué configuración de infraestructura o recursos se agregaron, eliminaron o cambiaron. Ya tenemos algunas herramientas que hacen eso en parte, como " CDK notifier ".
Copiar y pegar elementos: por algún motivo, no pude hacer que esto funcionara. Tal vez sea un error, pero me gustaría agregar recursos similares más rápido.