Si un desarrollador tuviera que subir manualmente al servidor, ejecutar pruebas y desplegar cada vez que hace un cambio en el codigo, seria extremadamente tedioso. CI/CD es la forma de automatizar todo este proceso. Simplemente subes tu codigo a Git y el resto — compilar, probar y desplegar — ocurre automaticamente.
Las preguntas del examen DVA-C02 en esta area se centran en como compilar, probar y desplegar automaticamente los cambios de codigo.
Que es CI/CD?
CI (Integracion Continua): Compila y prueba el codigo automaticamente cada vez que multiples desarrolladores fusionan sus cambios. CD (Despliegue Continuo): Despliega automaticamente en un servidor el codigo que ha pasado las pruebas.
En terminos simples, es un pipeline donde cambio de codigo lleva a prueba automatica lleva a despliegue automatico, todo en secuencia.
Cadena de servicios CI/CD de AWS
AWS tiene servicios dedicados para cada etapa del CI/CD, todos conectados por CodePipeline.
Fuente (CodeCommit/GitHub) → Compilacion (CodeBuild) → Despliegue (CodeDeploy) = Pipeline (CodePipeline)
CodeCommit
Un repositorio de codigo fuente basado en Git. Es muy similar a GitHub pero completamente administrado dentro de AWS. Soporta ramas, pull requests (PRs), revisiones de codigo y disparadores de eventos.
CodeBuild
Un servicio de compilacion completamente administrado. Se encarga de transformar codigo en ejecutables o paquetes de despliegue (compilar, ejecutar pruebas, empaquetar, etc.). No se requiere gestion de servidores.
Las fases de compilacion se definen en un archivo buildspec.yml. install: Instalar herramientas y librerias requeridas pre_build: Tareas de preparacion antes de la compilacion (login Docker, configuracion del entorno) build: Compilacion real y ejecucion de pruebas post_build: Tareas post-compilacion (envio de notificaciones, etiquetado de imagenes) artifacts: Especificar donde almacenar la salida de la compilacion
CodeDeploy
Despliega el codigo compilado en servidores reales. El codigo puede desplegarse en instancias EC2, funciones Lambda o contenedores ECS.
El metodo de despliegue se define en un archivo appspec.yml. EC2/on-premises: Definir scripts de hook para ejecutar antes y despues de la instalacion Lambda: Definir cuanto trafico transferir a la nueva version a la vez (ej. incrementos graduales del 10%) ECS: Definicion de tareas y configuracion del balanceador de carga
CodePipeline
Conecta todos los servicios anteriores (fuente, compilacion, despliegue) en un pipeline automatizado unificado. Piensa en el como la cinta transportadora de una fabrica automatizada.
Vincula automaticamente cada etapa: fuente → compilacion → prueba → despliegue Se pueden agregar etapas de aprobacion manual cuando sea necesario (ej. revision de un responsable antes de desplegar en produccion) Se integra con EventBridge para activar automaticamente el pipeline cuando ocurren eventos especificos
SAM (Serverless Application Model)
SAM es un framework para definir e implantar aplicaciones serverless como Lambda usando codigo (archivos YAML). En lugar de hacer clic en la consola para configurar la infraestructura, la defines como codigo. Este enfoque se llama IaC (Infraestructura como Codigo).
sam build: Compila el codigo y prepara un paquete de despliegue. sam deploy: Despliega en AWS via CloudFormation. sam local invoke: Prueba funciones Lambda en tu maquina local sin desplegar en AWS. Extremadamente util durante el desarrollo. template.yaml: Un archivo de configuracion que define declarativamente funciones Lambda, API Gateway, tablas DynamoDB y mas.
Puntos clave del examen
"Archivo que define las fases de compilacion" -- buildspec.yml (CodeBuild)
"Archivo que define el metodo de despliegue" -- appspec.yml (CodeDeploy)
"Automatizacion Fuente a Compilacion a Despliegue" -- CodePipeline
"IaC serverless y pruebas locales" -- SAM
"Repositorio de codigo fuente AWS basado en Git" -- CodeCommit
"Empaquetar salida de compilacion" -- CodeBuild artifacts
"Agregar aprobacion manual al pipeline" -- Etapa de aprobacion manual de CodePipeline
Entender la diferencia precisa entre buildspec.yml (como compilar) y appspec.yml (como desplegar)