July 31, 2025

CodeDeploy

📘 ¿Qué es AWS CodeDeploy?

AWS CodeDeploy es un servicio de despliegue automatizado que permite actualizar aplicaciones en:

  • EC2

  • Fargate

  • Lambda

  • Servidores On-Premise

✅ Automatiza la entrega y reduce el tiempo de inactividad con estrategias de despliegue seguras y controladas.


🎯 Casos de uso

  • Despliegue automatizado de microservicios o aplicaciones monolíticas

  • Reemplazo controlado de versiones sin downtime

  • Despliegue continuo (CD) con pipelines CI/CD

  • Actualización en lote de cientos de instancias EC2

  • Despliegue en ambientes híbridos o multi-región


🔁 Tipos de despliegue

🔹 EC2 / On-Premises

Tipo de despliegueDescripción
In-PlaceReemplaza la app en las mismas instancias
Blue/GreenLanza nuevas instancias con la nueva versión

🔹 Lambda

Tipo de despliegueDescripción
CanaryDespliega a un % pequeño, luego al resto
LinearDespliega en incrementos fijos
All-at-onceDespliega todo de golpe

📦 AppSpec File

El archivo appspec.yml es el núcleo del despliegue.

💡 Ejemplo para EC2 (In-Place):

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/app
hooks:
  BeforeInstall:
    - location: scripts/before_install.sh
  AfterInstall:
    - location: scripts/after_install.sh
  ApplicationStart:
    - location: scripts/start.sh
  ValidateService:
    - location: scripts/validate.sh

🧠 Este archivo debe ir en la raíz del artefacto (ej., ZIP).


🧩 Componentes clave

ComponenteDescripción
ApplicationContenedor lógico para despliegues
Deployment GroupGrupo de instancias destino + configuración del despliegue
AppSpec FileScript que define cómo se instala, inicia y valida la app
RevisionArtefacto que contiene el código y appspec.yml
HooksScripts opcionales que se ejecutan antes, durante o después

🛠️ Flujo de trabajo típico

CodeCommit / S3 / GitHub / ECR

CodeBuild (opcional)

CodeDeploy (deployment group + strategy)

EC2 / Lambda / Fargate

🧪 Despliegue en Lambda: appspec.yml

version: 0.0
Resources:
  - myLambdaFunction:
      Type: AWS::Lambda::Function
      Properties:
        Name: MiFuncionLambda
        Alias: live
        CurrentVersion: 5
        TargetVersion: 6

🎯 Usado para actualizar versiones de Lambda y controlar cómo se enrutan las invocaciones.


🧰 Integraciones comunes

ServicioFunción
S3Fuente de artefactos para el despliegue
CodeBuildGenera artefactos con código + scripts
CodePipelineOrquestación completa CI/CD
CloudWatchLogs y alarmas para monitoreo de errores o rollback
SNS / LambdaNotificaciones o lógica personalizada ante eventos
Auto ScalingDespliegue en instancias escaladas dinámicamente

🔐 Seguridad

  • IAM Role para CodeDeploy que le permite operar recursos

  • Instance Role para que EC2 pueda recibir y ejecutar el despliegue

  • Cifrado en tránsito y reposo

  • Control de acceso IAM a nivel de aplicación o grupo de despliegue


📈 Métricas de CloudWatch

MétricaSignificado
DeploymentSuccessDespliegues exitosos
DeploymentFailureDespliegues fallidos
InstanceSuccessInstancias desplegadas correctamente
InstanceFailureErrores a nivel de instancia

🧠 Preguntas tipo certificación

  1. ¿Qué archivo necesita CodeDeploy para saber cómo desplegar?

    • appspec.yml
  2. ¿Qué tipo de despliegue permite minimizar downtime?

    • ✅ Blue/Green
  3. ¿Se puede usar CodeDeploy con instancias físicas?

    • ✅ Sí, mediante agentes instalados on-premise
  4. ¿Qué sucede si falla un hook en el despliegue?

    • ✅ El despliegue se detiene y puede hacer rollback
  5. ¿Qué recurso se usa para apuntar a una versión de Lambda?

    • ✅ Alias

💲 Precios

  • CodeDeploy en EC2/Fargate: Sin costo adicional

  • Despliegue en Lambda: Gratis hasta cierto nivel (parte del servicio Lambda)

🧮 Pagarás por los recursos subyacentes (EC2, Lambda, etc.), no por CodeDeploy en sí.


✅ Buenas prácticas

  • Siempre usar ValidateService para confirmar que la app se inició correctamente

  • Hacer pruebas en entornos staging antes de producción

  • Usar Blue/Green en ambientes críticos para minimizar impacto

  • Usar CloudWatch + Alarmas + Rollbacks automáticos

  • Evitar dejar artefactos sin versionar (usar CodeBuild + CodePipeline)


📚 Recursos útiles