CodePipeline
📘 ¿Qué es AWS CodePipeline?
AWS CodePipeline es un servicio de integración y entrega continua (CI/CD) que automatiza los pasos necesarios para liberar software de forma rápida y confiable.
🛠️ Coordina automáticamente el flujo desde el control de versiones hasta el despliegue en producción.
🎯 Casos de uso
-
Automatización del ciclo de vida de entrega de software (build → test → deploy).
-
Integración con múltiples servicios AWS: CodeCommit, S3, Lambda, ECS, etc.
-
CI/CD sin servidores con Lambda, Fargate o S3.
-
Validación y despliegue de infraestructura como código con CloudFormation o CDK.
🧱 Componentes de una pipeline
| Componente | Descripción |
|---|---|
| Stage | Fase lógica del pipeline (ej: Source, Build, Deploy) |
| Action | Tarea dentro de un stage (ej: compilar, testear, desplegar) |
| Artifact | Resultado generado entre acciones (ej: ZIP del build) |
| Transition | Movimiento de un stage al siguiente (puede estar bloqueado manualmente) |
🔄 Ejemplo de estructura típica
[CodeCommit] → [CodeBuild] → [CodeDeploy] → [Approval Manual] → [Deploy Prod]
SOURCE BUILD TEST/DEPLOY QA PROD
🚦 Tipos de acciones (actions)
| Tipo | Servicios compatibles | Ejemplos |
|---|---|---|
| Source | CodeCommit, S3, GitHub, Bitbucket | Detectar cambios en código |
| Build | CodeBuild, Jenkins | Compilar, testear |
| Test | CodeBuild, Lambda, Custom | Ejecutar pruebas automatizadas |
| Approval | Manual, SNS | Revisión humana |
| Deploy | CodeDeploy, CloudFormation, ECS, Lambda, S3 | Desplegar a producción |
⚙️ Cómo funciona
-
Se detecta un cambio en el repositorio (trigger).
-
Se genera un artefacto (
buildspec.yml) con CodeBuild. -
Se entrega con CodeDeploy, CloudFormation o Lambda.
-
Opcionalmente, se solicita aprobación manual.
-
Se realiza el despliegue en el entorno final.
🗂️ Archivo buildspec.yml para CodeBuild
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
build:
commands:
- npm install
- npm run build
artifacts:
files:
- '**/*'
🧠 Este archivo define cómo compilar y qué artefactos generar en el pipeline.
🧩 Integraciones
| Servicio | Integración en pipeline |
|---|---|
| CodeCommit | Fuente del código |
| CodeBuild | Etapas de compilación y testing |
| CodeDeploy | Despliegue automático en EC2, Lambda, ECS |
| CloudFormation | Infraestructura como código |
| Lambda | Validación, testing o despliegue sin servidores |
| Manual Approval | Aprobaciones previas a producción |
| SNS/SQS | Notificaciones o flujos personalizados |
🔐 Seguridad
-
IAM roles para cada etapa (source, build, deploy)
-
Pipeline execution role (permite a CodePipeline ejecutar acciones)
-
Control de acceso granular a pipelines vía políticas IAM
-
Integración con CloudTrail para auditoría de ejecuciones
📈 Monitoreo y auditoría
| Herramienta | Función |
|---|---|
| CloudWatch | Logs, métricas y alarmas |
| CloudTrail | Historial de eventos |
| SNS | Notificaciones al fallar o aprobar |
| AWS Console | Visualización gráfica del pipeline |
🔄 Automatización vía CLI o CDK
# Crear pipeline desde JSON
aws codepipeline create-pipeline --cli-input-json file://pipeline.json
Con AWS CDK:
const pipeline = new codepipeline.Pipeline(this, 'Pipeline');
🔧 Puedes automatizarlo todo con CDK o Terraform si lo deseas como parte de IaC.
🧠 Preguntas tipo certificación
-
¿Qué servicio orquesta un flujo de CI/CD?
- ✅ CodePipeline
-
¿Qué sucede si falla una etapa?
- ✅ La ejecución del pipeline se detiene
-
¿Puede una pipeline incluir una aprobación manual?
- ✅ Sí
-
¿Puede usarse un repositorio externo como GitHub?
- ✅ Sí, con autenticación OAuth o tokens personales
-
¿Dónde se almacenan los artefactos?
- ✅ En un bucket S3 gestionado por la pipeline
💲 Precios
-
Gratis: 1 pipeline activa por cuenta.
-
Extra: $1.00 por cada pipeline adicional activa por mes.
⚠️ También se cobra por los servicios conectados: CodeBuild, S3, CodeDeploy, etc.
✅ Buenas prácticas
-
Separar entornos por pipeline o stage (dev, staging, prod)
-
Validar código antes de deploy con pruebas automáticas
-
Usar
ManualApprovalantes de producción -
Implementar notificaciones con SNS en caso de fallos
-
Versionar artefactos para facilitar rollbacks
-
Integrar CodePipeline en IaC (CloudFormation/CDK)