July 31, 2025

CodeBuild

📘 ¿Qué es AWS CodeBuild?

AWS CodeBuild es un servicio gestionado de integración continua (CI) que compila el código fuente, realiza pruebas y produce artefactos listos para el despliegue.

✅ No necesitas gestionar servidores ni escalar infraestructura. CodeBuild lo hace automáticamente.


🎯 Casos de uso

  • Compilar y testear aplicaciones automáticamente tras cada push

  • Construir imágenes Docker y subirlas a ECR

  • Ejecutar pruebas unitarias, de integración o seguridad

  • Generar artefactos para CodeDeploy, S3 o Elastic Beanstalk

  • Ejecutar scripts como parte de pipelines CodePipeline o Jenkins


⚙️ ¿Cómo funciona?

  1. Fuente de código: GitHub, CodeCommit, Bitbucket, S3, etc.

  2. buildspec.yml: archivo YAML que define las fases del proceso de compilación.

  3. Entorno de compilación: imagen de Docker administrada o personalizada.

  4. Salida: artefactos como archivos .zip, imágenes Docker, binarios, etc.


📦 Estructura del archivo buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 18
    commands:
      - echo "Instalando dependencias..."
  pre_build:
    commands:
      - echo "Fase pre-build"
  build:
    commands:
      - npm install
      - npm run build
  post_build:
    commands:
      - echo "Compilación finalizada"

artifacts:
  files:
    - dist/**/*
  discard-paths: yes

🔧 También se puede definir desde la consola si no lo tienes en el repositorio.


🧩 Componentes clave de CodeBuild

ComponenteDescripción
ProjectLa unidad principal de CodeBuild: fuente + entorno + configuración
buildspec.ymlScript que define lo que hace el proyecto
Entorno de compilaciónImagen Docker gestionada o personalizada (Linux, Windows, ARM)
Compute TypeTamaño de instancia: BUILD_GENERAL1_SMALL, MEDIUM, LARGE, etc.
TimeoutMáximo tiempo de ejecución de una build
LogsCloudWatch Logs o S3

🔐 Seguridad en CodeBuild

ÁreaImplementación AWS
Acceso a serviciosUsar un IAM Role de ejecución para el proyecto
Código fuentePuede estar en repos privados (requiere autenticación)
SecretsIntegración con Secrets Manager y SSM Parameter Store
LoggingLogs cifrados en S3 o CloudWatch

🧰 Integraciones comunes

ServicioIntegración
CodeCommit/GitHub/GitLabRepositorio fuente
S3Almacenamiento de artefactos o código
ECRSubida de imágenes Docker compiladas
CloudWatchLogs de compilación y métricas
CodePipelineParte de un pipeline completo CI/CD
Secrets ManagerGestión de secretos durante la build
CodeDeployDespliegue de artefactos construidos

🧪 Ejemplo: Build de una imagen Docker

version: 0.2

phases:
  pre_build:
    commands:
      - echo "Iniciando sesión en ECR..."
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
  build:
    commands:
      - echo "Construyendo imagen..."
      - docker build -t miapp .
      - docker tag miapp:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/miapp:latest
  post_build:
    commands:
      - echo "Subiendo imagen a ECR..."
      - docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/miapp:latest

💲 Precios

  • Cobro por minuto de compilación, según tipo de instancia.

  • Nivel gratuito incluye 100 minutos al mes por 12 meses.

  • Ahorro posible con entornos reutilizables (build cache).


📈 Métricas en CloudWatch

MétricaDescripción
BuildDurationTiempo total de ejecución
BuildsFailedNúmero de compilaciones fallidas
BuildsSucceededNúmero de compilaciones exitosas

🧠 Preguntas tipo certificación

  1. ¿Dónde se define el flujo de compilación en CodeBuild?

    • ✅ En buildspec.yml
  2. ¿CodeBuild puede usar imágenes personalizadas?

    • ✅ Sí, desde ECR o DockerHub
  3. ¿Puede CodeBuild lanzar despliegues automáticamente?

    • ✅ Sí, al integrarlo con CodeDeploy o CodePipeline
  4. ¿Cómo se puede evitar recompilar dependencias comunes?

    • ✅ Usar build cache (caché de capas)
  5. ¿Cómo se accede a secretos dentro del entorno de compilación?

    • ✅ Mediante Secrets Manager o SSM Parameter Store

📚 Recursos útiles


✅ Buenas prácticas

  • Usa buildspec.yml versionado en tu repositorio

  • Habilita cacheado si tus builds toman mucho tiempo

  • Centraliza los logs en CloudWatch para auditoría

  • Integra con Secrets Manager para evitar credenciales hardcoded

  • Usa roles con permisos mínimos necesarios (principio de mínimo privilegio)

  • Reutiliza entornos con imágenes propias si necesitas dependencias preinstaladas