Módulo 10 · Operación y automatización/Lección 64
Desplegar código: CodeBuild y CodePipeline
Del commit a producción sin pasos manuales: compilar, probar y desplegar en una línea de ensamblaje.
Desplegar a mano es una lista de pasos que alguien sigue de memoria: compilar en su portátil, copiar archivos, reiniciar el servidor, cruzar los dedos. Funciona hasta el viernes en que esa persona está de vacaciones o se salta un paso.
La alternativa es una cadena automática: cada cambio en el repositorio se compila, se prueba y se despliega igual, siempre.
Integración continua y entrega continua
- Integración continua (CI): los desarrolladores juntan sus cambios a la rama principal seguido, varias veces al día. Cada cambio dispara una compilación y las pruebas automáticas. Los errores aparecen en minutos, no en la semana de lanzamiento.
- Entrega continua (CD): todo cambio que pasa las pruebas queda listo para producción. El paso final puede esperar una aprobación manual.
- Despliegue continuo: lo mismo, pero sin aprobación: si pasa todas las pruebas, llega a producción solo.
Las tres estaciones de AWS
AWS CodePipeline
La banda transportadora
Orquesta el flujo completo en etapas: origen, compilación, pruebas, aprobación, despliegue. Se dispara con cada cambio en el repositorio (GitHub, GitLab, Bitbucket o S3).AWS CodeBuild
La estación de armado e inspección
Compila el código y corre las pruebas en contenedores que AWS crea y destruye. No administras servidores de compilación y pagas por los minutos que usas.AWS CodeDeploy
La estación de entrega
Instala la nueva versión en instancias EC2, servidores propios, funciones Lambda o servicios de ECS, con la estrategia que elijas y reversión automática.
CodeBuild sigue las instrucciones de un archivo buildspec.yml en la raíz del repositorio. Un ejemplo mínimo para una aplicación de Node.js:
version: 0.2
phases:
install:
commands:
- npm ci
build:
commands:
- npm test
- npm run build
artifacts:
files:
- "**/*"
base-directory: dist- 1
Origen
Haces merge a main. CodePipeline detecta el cambio y toma el código. - 2
Compilación y pruebas
CodeBuild instala dependencias, corre las pruebas y genera el artefacto. Si una prueba falla, la línea se detiene. - 3
Aprobación (opcional)
Una persona revisa el ambiente de pruebas y aprueba el paso a producción. - 4
Despliegue
CodeDeploy (o CloudFormation, ECS o Elastic Beanstalk) instala la nueva versión. - 5
Vigilancia
Alarmas de CloudWatch observan errores y latencia. Si se disparan, CodeDeploy revierte a la versión anterior.
La infraestructura también puede pasar por el pipeline: una etapa que despliega la plantilla de CloudFormation o CDK antes que la aplicación.
Estrategias de despliegue
La pregunta clave es cuántos usuarios ven la versión nueva y qué tan rápido puedes volver atrás si sale mal.
| Criterio | En el lugar (in-place) | Azul/verde | Canario |
|---|---|---|---|
| Cómo funciona | Actualiza los mismos servidores, uno o varios a la vez | Levanta un entorno nuevo completo (verde) y mueve el tráfico desde el actual (azul) | Manda un porcentaje pequeño del tráfico a la versión nueva, espera y luego manda el resto |
| Si sale mal | Hay que volver a desplegar la versión anterior | Devuelves el tráfico al azul, que sigue intacto | Solo una parte de los usuarios lo notó; se revierte |
| Costo extra | Ninguno | Dos entornos durante el cambio | Poco |
| En CodeDeploy | Solo EC2 y servidores propios | EC2, Lambda y ECS | Lambda y ECS (también hay lineal y todo a la vez) |
Quiz
Pon a prueba lo que aprendiste
0 de 5 correctas · 5 sin responder
1.¿Qué servicio compila el código fuente, corre las pruebas y produce artefactos, sin servidores que administrar?
2.Una empresa quiere que cada merge a main pase automáticamente por compilación, pruebas, aprobación y despliegue. ¿Qué servicio orquesta las etapas?
3.Quieres poder volver a la versión anterior en segundos, moviendo el tráfico a un entorno que sigue intacto. ¿Qué estrategia usas?
4.En un despliegue canario de una función Lambda, ¿qué pasa primero?
5.¿Qué diferencia la entrega continua del despliegue continuo?