Saltar al contenido
aprendeaws.dev

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.

Al terminar podrás

  • →Explicar integración y entrega continuas
  • →Reconocer el papel de CodePipeline, CodeBuild y CodeDeploy

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. 1

    Origen

    Haces merge a main. CodePipeline detecta el cambio y toma el código.
  2. 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. 3

    Aprobación (opcional)

    Una persona revisa el ambiente de pruebas y aprueba el paso a producción.
  4. 4

    Despliegue

    CodeDeploy (o CloudFormation, ECS o Elastic Beanstalk) instala la nueva versión.
  5. 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.

CriterioEn el lugar (in-place)Azul/verdeCanario
Cómo funcionaActualiza los mismos servidores, uno o varios a la vezLevanta 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 malHay que volver a desplegar la versión anteriorDevuelves el tráfico al azul, que sigue intactoSolo una parte de los usuarios lo notó; se revierte
Costo extraNingunoDos entornos durante el cambioPoco
En CodeDeploySolo EC2 y servidores propiosEC2, Lambda y ECSLambda 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. 1.¿Qué servicio compila el código fuente, corre las pruebas y produce artefactos, sin servidores que administrar?

  2. 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. 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. 4.En un despliegue canario de una función Lambda, ¿qué pasa primero?

  5. 5.¿Qué diferencia la entrega continua del despliegue continuo?