Integrar aplicaciones completas en AWS CloudFormation

Por Dan Blanco.

Publicado el 2 de frebrero de 2024.

Revisa la publicación original aquí.

La Infraestructura como Código (IaC) de AWS permite a los clientes administrar, modelar y aprovisionar infraestructura a escala. Puedes declarar tu infraestructura como código en YAML o JSON utilizando AWS CloudFormation, en un lenguaje de programación de propósito general utilizando el Kit de Desarrollo de AWS Cloud (CDK), o visualmente utilizando el Compositor de Aplicaciones. Las configuraciones de IaC pueden ser auditadas y controladas en sistemas de control de versiones de tu elección. Finalmente, implementar IaC de AWS permite vistas previas de implementación mediante conjuntos de cambios, rollbacks automáticos, cumplimiento proactivo de recursos utilizando ganchos, y más. Millones de clientes disfrutan de la seguridad y confiabilidad de los productos de IaC de AWS.

Sin embargo, no todos los recursos comienzan en IaC. Los clientes crean recursos no-IaC por diversas razones: desconocen IaC, o prefieren trabajar en la interfaz de línea de comandos (CLI) o en la consola de administración. En 2019, introdujimos la capacidad de importar recursos existentes en CloudFormation. Aunque esta función resultó integral para llevar recursos a IaC de forma individual, el proceso de crear manualmente plantillas para que coincidan con esos recursos no era ideal.

Los clientes tenían que consultar la documentación sobre los recursos y copiar valores manualmente. Además, los clientes nos informaron que tradicionalmente interactúan con aplicaciones (es decir, agrupaciones de recursos relacionados), por lo que tratar con recursos individuales no coincidía con esa experiencia. Nos propusimos crear un flujo más integral para administrar recursos y sus relaciones.

Recientemente, anunciamos el generador de IaC y CDK Migrate, una experiencia de extremo a extremo que permite a los clientes crear una configuración de IaC basada en un recurso y sus relaciones. Esto funciona escaneando una cuenta de AWS y utilizando el esquema de tipos de recursos de CloudFormation para encontrar relaciones entre recursos. Una vez que se crea esta configuración, puedes usarla para importar esos recursos en una pila existente o crear una nueva pila desde cero. ¡Ahora es posible traer aplicaciones enteras a una pila CloudFormation administrada sin tener que recrear ningún recurso!

En esta publicación, exploraré un caso de uso común que hemos visto y esperamos que el generador de IaC resuelva: se necesita administrar una arquitectura de red existente, creada fuera de cualquier herramienta de IaC, mediante CloudFormation.

Generador de IaC en Acción para CloudFormation

Considera el siguiente escenario:

Como nuevo empleado de una organización que recién está comenzando su adopción de la nube, te han encargado continuar el desarrollo de los recursos compartidos de Amazon Virtual Private Cloud (VPC) del equipo. Estos están en uso activo por los equipos de desarrollo. Mientras investigas, descubres que estos recursos se crearon sin ninguna forma de IaC. No hay documentación, y la persona que lo configuró ya no está en el equipo. Complicando el problema, tienes múltiples VPC y sus recursos relacionados, como subredes, tablas de rutas y gateways de Internet.

Entiendes los beneficios de IaC: repetibilidad, confiabilidad, auditabilidad y seguridad. Llevar estos recursos bajo la gestión de CloudFormation extenderá estos beneficios a tus recursos existentes. Has importado recursos en CloudFormation anteriormente, así que te dispones a encontrar todos los recursos relacionados manualmente para crear una plantilla. Sin embargo, rápidamente descubres que esto no será una tarea sencilla. Las VPC no almacenan relaciones con elementos; en cambio, las relaciones están invertidas: los elementos saben a qué VPC pertenecen, pero las VPC no saben qué elementos les pertenecen.

Para encontrar todos los recursos relacionados con una VPC, tendrás que revisar manualmente todos los recursos relacionados con la VPC y escanear para ver a qué vpc-id pertenecen. Deberás ser diligente, ya que es muy fácil omitir un recurso porque no eras consciente de que existía o incluso puede ser una clase de recurso completamente diferente. Por ejemplo, algunos recursos pueden usar una interfaz de red elástica (ENI) para adjuntarse a la VPC, como una instancia de Amazon Relational Database Service.

Sin embargo, recientemente aprendiste sobre el generador de IaC. El generador funciona mediante un escaneo de tu cuenta y crea un inventario actualizado de recursos. CloudFormation luego aprovechará el esquema de tipos de recursos para encontrar relaciones entre recursos. Por ejemplo, puede determinar que una subred tiene una relación con una VPC a través de una propiedad vpc-id.Una vez que se hayan determinado estas relaciones, puedes seleccionar los recursos de nivel superior para los cuales deseas generar una plantilla. Finalmente, podrás aprovechar el asistente para crear una pila a partir de esta plantilla existente.

Puedes acceder a la página del generador de IaC en la Consola de Administración de Amazon y comenzar un escaneo en tu cuenta. Los escaneos duran 30 días y puedes realizar tres escaneos por día en una cuenta.

Scan account button and status
CloudFormation

Una vez que se complete el escaneo, crea una plantilla seleccionando el botón Crear Plantilla. Después de seleccionar Comenzar desde una nueva plantilla, completas los detalles relevantes sobre la stack, incluido el nombre de la plantilla y cualquier política de stack. En este caso, lo dejas como Retener.

Create template section with "Start from a new template" selected

En la siguiente página, verás todos los recursos escaneados. Puedes agregar filtros al recurso, como etiquetas, para ver un subconjunto de recursos escaneados. Este ejemplo solo utilizará un filtro de tipo Resource type prefix . Puedes encontrar más información sobre los filtros aquí. Una vez que encuentres la VPC, puedes seleccionarla de la lista.

A VPC selected in the scanned resources list]

En la siguiente página, verás la lista de recursos que CloudFormation ha determinado que tienen un vínculo con esta VPC. Ves que esto incluye una gran cantidad de recursos relacionados con redes. Mantienes todos estos seleccionados para crear una plantilla a partir de ellos.

A list of related resources, all selected

En este punto, seleccionas Crear plantilla y CloudFormation generará una plantilla a partir de los recursos existentes. Dado que no tienes una pila existente para importar estos recursos, debes crear una nueva pila. Ahora seleccionas esta plantilla y luego seleccionas el botón Import to stack.

The template detail page with an import to stack button

Después de ingresar el nombre de la stack, puedes ingresar cualquier parámetro que tu plantilla necesite.

The specify stack details page, with a stack name of "networking" entered

CloudFormation creará un conjunto de cambios para tu nueva pila. Los conjuntos de cambios te permiten ver los cambios que CloudFormation aplicará a una pila. En este ejemplo, todos los recursos tendrán el estado de Import. Ves los recursos que CloudFormation encontró y, una vez que estés satisfecho, creas la stack.

A change set indicating the previously found resources will be created

En este punto, la operación de creación de la pila procederá normalmente, pasando por cada recurso e importándolo a la pila. ¡Puedes informar a tu equipo que has importado con éxito toda tu pila de red! Como próximos pasos, deberías guardar esta plantilla en un sistema de control de versiones. Recientemente anunciamos una nueva función para mantener las plantillas de CloudFormation sincronizadas con los sistemas de control de versiones populares. Finalmente, asegúrate de realizar cualquier cambio a través de CloudFormation para evitar una desviación de configuración entre la configuración declarada y la configuración existente.

Este ejemplo se basó principalmente en CloudFormation, pero los clientes de CDK pueden utilizar CDK Migrate para importar esta configuración en una aplicación de CDK.

Disponible Ahora

El generador de IaC ahora está disponible en todas las regiones donde se admite CloudFormation. Puedes acceder al generador de IaC utilizando la consola, la CLI y el SDK.

Conclusión

En esta publicación, exploramos la nueva función de generador de IaC de CloudFormation. Recorrimos un escenario que requería administrar recursos existentes y utilizamos el flujo del asistente proporcionado por el generador de IaC para generar una plantilla de CloudFormation. Luego utilizamos esa plantilla y creamos una pila para administrar estos recursos. Estos recursos ahora disfrutarán de la seguridad y la repetibilidad que proporciona IaC. Aunque este es solo un ejemplo, anticipamos otros casos de uso para esta función, como habilitar una experiencia de desarrollo centrada en la consola. Estamos muy emocionados de escuchar tus opiniones sobre la función. ¡Por favor, háznoslo saber!


Solutions for Everyone - 1


Dan es un Defensor Sénior de Desarrolladores de AWS con sede en Atlanta para el equipo de IaC de AWS. Cuando no está promoviendo herramientas de IaC, es probable encontrarlo en la cocina preparando algo delicioso o volando en el cielo de Georgia. Encuéntralo en Twitter (@TheDanBlanco) o en el Discord de AWS CloudFormation.


Somos S4E Solutions for Eveyone, Select Partner de AWS en Latinoamérica visítanos y otras soluciones digitales para tu compañía. ¡Conversemos!

Nos puedes encontrar en redes sociales, ¡Síguenos para tener actualizaciones diarias! LinkedIn YouTubeFacebook y Twitter

S4E cuenta con un equipo de soporte certificado en herramientas Atlassian y AWS.