Práctica de infraestructura como código con AWS CloudFormation - Diseño de plantillas y gestión de stacks
Defina infraestructura con plantillas y previsualice el impacto con change sets antes del despliegue. Detecte drift de configuración con detección de drift y despliegue en toda su organización con StackSets.
Descripcion general de CloudFormation
CloudFormation es un servicio de IaC que define declarativamente recursos AWS en plantillas YAML o JSON y los despliega como stacks. Comparado con la creacion manual de recursos, ofrece reproducibilidad de entornos, control de versiones y automatizacion. Las plantillas se gestionan en Git y se integran en revisiones de codigo y pipelines CI/CD, aplicando los mismos procesos de control de calidad del desarrollo de software a los cambios de infraestructura. SAM es una extension de CloudFormation que simplifica la definicion de aplicaciones serverless. A traves del CloudFormation Registry se pueden gestionar tipos de recursos de terceros y personalizados ademas de los tipos nativos de AWS.
Diseno de plantillas y gestion de stacks
Las plantillas definen Parameters (hasta 200) para valores de entrada en tiempo de despliegue, Mappings para configuraciones por entorno y Conditions para logica condicional. Un stack puede gestionar hasta 500 recursos, y el limite de tamano del cuerpo de la plantilla es 1 MB cuando se sube via S3. Cuando se excede, se usan nested stacks referenciando URLs de plantillas hijas mediante recursos AWS::CloudFormation::Stack. Los change sets se crean antes de actualizar un stack para previsualizar que recursos se agregaran, modificaran o eliminaran. Los recursos que disparan reemplazo causan interrupcion temporal del servicio, haciendo critica la revision del change set. La seccion Outputs combinada con Export/ImportValue permite compartir ARNs e IDs entre stacks, facilitando la separacion de responsabilidades en una arquitectura de micro-stacks. El atributo DeletionPolicy permite especificar Delete (por defecto), Retain (preservar recurso tras eliminar el stack) o Snapshot (tomar snapshot antes de eliminar), protegiendo datos criticos de forma sistematica.
Deteccion de drift y StackSets
La deteccion de drift identifica si los recursos del stack se han desviado de sus definiciones en la plantilla. Cambios manuales desde la consola o scripts se detectan como drift, permitiendo revisar las diferencias respecto a la plantilla. Automatice la deteccion periodica de drift con programaciones de EventBridge para detectar desviaciones de configuracion tempranamente. Tenga en cuenta que la deteccion de drift no soporta todos los tipos de recursos; consulte la lista de recursos soportados en la documentacion. StackSets despliega la misma plantilla en multiples cuentas y regiones en una sola operacion. Con la integracion de Organizations, los despliegues se automatizan a nivel de OU. Cuando se agrega una nueva cuenta a una OU, el StackSet se despliega automaticamente, evitando brechas en la cobertura de guardrails. Configure MaxConcurrentCount y FailureToleranceCount adecuadamente para controlar el riesgo durante despliegues a gran escala. Para profundizar sus conocimientos sobre CloudFormation, libros especializados en Amazon pueden ser utiles.
Mejores practicas de diseno y errores comunes
En el diseno de plantillas, tenga precaucion al cambiar nombres logicos (LogicalId). Cambiar un LogicalId dispara el reemplazo del recurso, lo que puede causar perdida de datos en recursos con estado como instancias RDS o volumenes EBS. Use stack policies para prevenir actualizaciones o eliminaciones de recursos importantes, y establezca UpdateReplacePolicy: Retain en recursos criticos. Las dependencias circulares son un error comun que causa fallos en el despliegue, frecuentemente en referencias mutuas entre security groups; resuelvalas usando recursos separados AWS::EC2::SecurityGroupIngress/Egress. Cuando ocurre un fallo de rollback (UPDATE_ROLLBACK_FAILED), use la API ContinueUpdateRollback para especificar recursos a omitir y recuperar el stack. Para plantillas grandes, combine cfn-lint con TaskCat para pruebas simultaneas multirregion y cfn-guard para validacion automatica de cumplimiento de politicas.
Eleccion entre Terraform y CDK
CloudFormation destaca en entornos exclusivamente AWS que no requieren multi-nube, especialmente al aprovechar funcionalidades nativas como StackSets e integracion con Organizations. El estado es gestionado automaticamente por AWS, eliminando la necesidad de aprovisionar buckets S3 o tablas de bloqueo. Terraform ofrece soporte multi-nube y un amplio ecosistema de providers, permitiendo gestionar recursos fuera de AWS en el mismo flujo de trabajo, aunque la gestion del archivo de estado (S3 + bloqueo DynamoDB) agrega carga operativa. CDK define infraestructura en lenguajes de programacion de proposito general como TypeScript o Python, aprovechando caracteristicas del lenguaje como bucles, condicionales y clases de abstraccion para expresar infraestructura compleja de forma concisa. Dado que CDK genera plantillas CloudFormation, se mantiene acceso a funcionalidades como limites y deteccion de drift. Guia de seleccion: StackSets para despliegue de guardrails organizacionales, CDK para abstracciones programables y Terraform para escenarios multi-nube.
Precios y consideraciones de limites
CloudFormation en si es gratuito. Solo paga por los recursos AWS aprovisionados. Los recursos de terceros (tipos de extension via CloudFormation Registry) generan cargos por operacion de handler (operaciones CREATE/UPDATE/DELETE/READ/LIST). Los limites principales incluyen: 2,000 stacks por cuenta por defecto (ampliable), 200 Outputs por plantilla y 200 Mappings por plantilla. Para mejorar la eficiencia de desarrollo de plantillas, use cfn-lint para detectar errores de sintaxis tempranamente y revise change sets para confirmar el impacto antes del despliegue. Reutilice recursos comunes (VPCs, security groups) con nested stacks para eliminar duplicacion de plantillas. El CLI Rain puede optimizar el formateo y despliegue de plantillas.
Resumen
CloudFormation es un servicio de IaC basado en plantillas que ofrece reproducibilidad y automatizacion de infraestructura. Los change sets permiten previsualizar el impacto antes del despliegue, y la deteccion de drift identifica desviaciones de configuracion. StackSets despliega plantillas en toda la organizacion, automatizando la gestion de infraestructura multi-cuenta y multirregion. Proteja recursos con estado mediante DeletionPolicy y stack policies, y combine con CDK o Terraform para construir una estrategia de IaC optimizada para los requisitos de su proyecto.