IaC con lenguajes de programación usando AWS CDK - Diseño de Constructs y Stacks
Aprenda sobre la definición de infraestructura con TypeScript/Python usando CDK, la elección entre constructs L1/L2/L3 y técnicas de pruebas.
Descripción general de CDK
CDK es un framework de IaC que permite definir infraestructura AWS en cinco lenguajes: TypeScript, Python, Java, C# y Go. En lugar de escribir manualmente plantillas YAML/JSON de CloudFormation, define recursos usando clases y métodos del lenguaje de programación. CDK genera automáticamente plantillas de CloudFormation y ejecuta los despliegues.
Constructs y pruebas
Los constructs L1 son mapeos uno a uno de recursos de CloudFormation, donde todas las propiedades deben especificarse explícitamente. Los constructs L2 vienen con valores predeterminados de mejores prácticas aplicados; por ejemplo, los buckets S3 tienen cifrado y versionado habilitados por defecto. Los constructs L3 (patrones) son abstracciones de alto nivel que combinan múltiples recursos; LambdaRestApi construye API Gateway y Lambda juntos en un solo paso. Usando el módulo Assertions con hasResourceProperties, puede probar que la plantilla generada contiene los recursos y propiedades esperados.
Auto-mutación con CDK Pipelines
CDK Pipelines habilita un patrón de "auto-mutación" donde el pipeline en sí se define en CDK, y los cambios de configuración del pipeline también se despliegan a través del pipeline. Usando CodePipeline como backend, configura automáticamente etapas para la obtención del código fuente, cdk synth, auto-actualización y despliegue. Para despliegues multi-cuenta y multirregión, los conceptos Wave y Stage permiten describir declarativamente despliegues paralelos y control de ordenamiento. Por ejemplo, puede definir un flujo que despliega primero en un entorno de desarrollo, incluye un paso de aprobación manual y luego despliega en producción, todo en solo unas pocas docenas de líneas de código. Incorporar cdk diff en las verificaciones de pull requests visualiza el impacto de los cambios de infraestructura durante la revisión, permitiendo la detección temprana de eliminaciones o reemplazos de recursos no deseados. Para ampliar sus conocimientos sobre herramientas de desarrollo, libros especializados en Amazon también pueden ser útiles.
Gobernanza con Aspects y reglas personalizadas
La función Aspects de CDK es un mecanismo que recorre todos los constructs en un stack para realizar validación transversal y aplicar propiedades de forma obligatoria. Por ejemplo, puede crear un Aspect que imponga cifrado en todos los buckets S3 o uno que agregue etiquetas a todas las funciones Lambda. La biblioteca cdk-nag proporciona mejores prácticas de AWS y reglas de cumplimiento para estándares como NIST y HIPAA como Aspects, detectando violaciones durante cdk synth. También puede crear Aspects personalizados para aplicar reglas específicas de la organización (convenciones de nomenclatura, restricciones de región, prohibición de acceso público, etc.). Esto permite la prevención de violaciones de políticas en el momento de escribir código, en lugar de la detección posterior al despliegue mediante CloudFormation Guard o Config Rules.
Precios de CDK
CDK en sí no genera cargos adicionales. CDK es una herramienta que genera plantillas de CloudFormation, y los costos consisten únicamente en las tarifas de uso de los recursos AWS desplegados. Al construir pipelines CI/CD con CDK Pipelines, se aplican cargos de CodePipeline y CodeBuild. El almacenamiento S3 para plantillas generadas por cdk synth (el bucket bootstrap de CDK) también genera una pequeña tarifa de almacenamiento, pero es insignificante en la práctica. Comparado con escribir manualmente YAML de CloudFormation, no hay costo adicional por adoptar CDK.
Resumen
CDK es un framework de IaC que aprovecha la expresividad de los lenguajes de programación para definir infraestructura AWS. Puede elegir niveles de abstracción a través de la jerarquía de constructs L1-L3, construir CI/CD auto-mutante con CDK Pipelines y aplicar reglas de gobernanza a nivel de código con Aspects. Su mayor fortaleza es la capacidad de definir infraestructura flexible con condicionales y bucles, superando las restricciones declarativas de CloudFormation.