IaC con lenguajes de programación usando AWS CDK - Diseño de constructs y stacks

Se explica la definición de infraestructura con TypeScript/Python mediante CDK, la elección entre constructs L1/L2/L3 y las técnicas de pruebas.

Descripción general de CDK

CDK es un framework de IaC para definir infraestructura de AWS en TypeScript, JavaScript, Python, Java, C#/.Net y Go. En lugar de escribir a mano plantillas YAML/JSON de CloudFormation, usted define los recursos con las clases y los métodos de un lenguaje de programación. CDK genera automáticamente las plantillas de CloudFormation y ejecuta el despliegue.

Constructs y pruebas

Los constructs L1 se corresponden uno a uno con los recursos de CloudFormation, y en ellos se especifican directamente las propiedades del recurso. Los constructs L2 tienen configurados valores predeterminados seguros, por lo que permiten definir recursos con menos código. Los constructs L3 (patrones) son abstracciones de alto nivel que combinan varios recursos, y LambdaRestApi construye API Gateway y Lambda de una sola vez. Con hasResourceProperties del módulo Assertions, se prueba que la plantilla generada contiene los recursos y las propiedades esperados.

Automutación con CDK Pipelines

CDK Pipelines adopta la forma de «automutación», en la que el propio pipeline se define con CDK y los cambios en la configuración del pipeline se despliegan a través del pipeline. Con CodePipeline como backend, configura automáticamente las etapas de obtención del código fuente → cdk synth → autoactualización → despliegue. En los despliegues multicuenta / multirregión, los conceptos de Wave y Stage permiten describir de forma declarativa los despliegues en paralelo y el control del orden. Por ejemplo, puede definir en código un flujo que despliega primero en el entorno de desarrollo, intercala una aprobación manual y después despliega en el entorno de producción. Si incorpora cdk diff a las comprobaciones de las solicitudes de extracción, puede confirmar el alcance de los cambios de la infraestructura durante la revisión y advertir eliminaciones o sustituciones de recursos no deseadas.

Gobernanza con Aspects y reglas personalizadas

La función Aspects de CDK es un mecanismo que recorre todos los constructs de una pila para realizar validaciones transversales y forzar la aplicación de propiedades. Por ejemplo, puede crear un Aspect que fuerce el cifrado en todos los buckets de S3 o un Aspect que añada etiquetas a todas las funciones de Lambda. La biblioteca cdk-nag proporciona como Aspects las prácticas recomendadas de AWS y reglas de cumplimiento como NIST e HIPAA, y detecta las infracciones en el momento de cdk synth. También es posible crear Aspects propios para forzar reglas específicas de la organización (convenciones de nomenclatura, prohibición de determinadas regiones, prohibición del acceso público, etc.). Además de las comprobaciones con CloudFormation Guard y las reglas de Config, puede advertir las infracciones de políticas en el momento de cdk synth.

Precios de CDK

Por CDK en sí no se cobran cargos adicionales. CDK es una herramienta que genera plantillas de CloudFormation, y el único coste es la tarifa de uso de los recursos de AWS que se despliegan. Si crea pipelines de CI/CD con CDK Pipelines, se aplican los cargos de CodePipeline y CodeBuild. Se aplica el cargo de almacenamiento de S3 (el bucket de arranque de CDK) donde se guardan las plantillas generadas por cdk synth. Los cargos al usar CDK corresponden a los recursos desplegados y al bucket de arranque.

Relación con CloudFormation y elección

CDK convierte el código escrito en un lenguaje de programación, en última instancia, en una plantilla de CloudFormation y lo despliega. Es decir, el despliegue en sí lo realiza CloudFormation, y CDK se sitúa como una capa que facilita su escritura. Para una configuración sencilla y estática, también existe la opción de escribir directamente las plantillas de CloudFormation. Por otro lado, cuando hay muchas repeticiones y bifurcaciones condicionales y se desea organizarlas como componentes reutilizables, CDK, que permite aprovechar la expresividad de un lenguaje de programación, pasa a ser un candidato. Se elige según los requisitos, por ejemplo un framework específico si el uso se centra en serverless y otra herramienta si se trabaja con varias nubes.

Abstracción que aprovecha la potencia del lenguaje

En CDK, puede usar las funciones de un lenguaje de programación conocido para definir la infraestructura. Puede generar las configuraciones repetidas con bucles y expresar las diferencias entre entornos con bifurcaciones condicionales. Si agrupa una configuración de uso frecuente como un componente (construct) que monta el conjunto adecuado de recursos según sus entradas, puede reutilizarla. Si convierte la configuración estándar de la organización en componentes y la comparte como paquetes, el equipo puede usar el mismo diseño. Al abstraer en forma de código, puede reducir la duplicación y concentrar los cambios en un solo lugar.

Despliegue y ciclo de vida

CDK cuenta con mecanismos que dan soporte desde el desarrollo hasta la operación. Antes de empezar a usarlo, se realiza una configuración inicial que prepara los recursos necesarios para el despliegue. Antes de desplegar un cambio, puede comprobar las diferencias con la configuración actual y aplicarlo después de entender qué va a cambiar. Puede separar la configuración por entorno y desplegar configuraciones distintas en desarrollo / producción a partir del mismo código. Si comprueba si los recursos creados a mano se han desviado de las definiciones del código y realiza los cambios a través del código, resulta más fácil evitar la desviación de la configuración. Con estos mecanismos, puede desplegar repetidamente la misma configuración a partir del mismo código.

Resumen

CDK es un framework de IaC que define la infraestructura de AWS aprovechando la expresividad de los lenguajes de programación. Permite elegir el nivel de abstracción con la jerarquía de constructs de L1 a L3, crear CI/CD de tipo automutación con CDK Pipelines e imponer reglas de gobernanza a nivel de código con Aspects. Poder escribir bifurcaciones condicionales y bucles en un lenguaje de programación es una característica de CDK.

Referencias (recursos oficiales de AWS)

Las fuentes primarias de esta página son el sitio web y la documentación oficiales de AWS. Consulta las páginas oficiales siguientes para conocer las especificaciones y los precios más recientes.

Si esta página y la documentación oficial difieren, prevalece la documentación oficial.

Compartir