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 despliegue | Descripción |
|---|---|
| In-Place | Reemplaza la app en las mismas instancias |
| Blue/Green | Lanza nuevas instancias con la nueva versión |
🔹 Lambda
| Tipo de despliegue | Descripción |
|---|---|
| Canary | Despliega a un % pequeño, luego al resto |
| Linear | Despliega en incrementos fijos |
| All-at-once | Despliega 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
| Componente | Descripción |
|---|---|
| Application | Contenedor lógico para despliegues |
| Deployment Group | Grupo de instancias destino + configuración del despliegue |
| AppSpec File | Script que define cómo se instala, inicia y valida la app |
| Revision | Artefacto que contiene el código y appspec.yml |
| Hooks | Scripts 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
| Servicio | Función |
|---|---|
| S3 | Fuente de artefactos para el despliegue |
| CodeBuild | Genera artefactos con código + scripts |
| CodePipeline | Orquestación completa CI/CD |
| CloudWatch | Logs y alarmas para monitoreo de errores o rollback |
| SNS / Lambda | Notificaciones o lógica personalizada ante eventos |
| Auto Scaling | Despliegue 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étrica | Significado |
|---|---|
DeploymentSuccess | Despliegues exitosos |
DeploymentFailure | Despliegues fallidos |
InstanceSuccess | Instancias desplegadas correctamente |
InstanceFailure | Errores a nivel de instancia |
🧠 Preguntas tipo certificación
-
¿Qué archivo necesita CodeDeploy para saber cómo desplegar?
- ✅
appspec.yml
- ✅
-
¿Qué tipo de despliegue permite minimizar downtime?
- ✅ Blue/Green
-
¿Se puede usar CodeDeploy con instancias físicas?
- ✅ Sí, mediante agentes instalados on-premise
-
¿Qué sucede si falla un hook en el despliegue?
- ✅ El despliegue se detiene y puede hacer rollback
-
¿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
ValidateServicepara confirmar que la app se inició correctamente -
Hacer pruebas en entornos staging antes de producción
-
Usar
Blue/Greenen ambientes críticos para minimizar impacto -
Usar CloudWatch + Alarmas + Rollbacks automáticos
-
Evitar dejar artefactos sin versionar (usar CodeBuild + CodePipeline)