🏁 Completando el Pipeline de CI/CD End-to-End
¡Felicidades! Has configurado con éxito la infraestructura de AWS CodePipeline con CloudFormation. Ahora vamos a darle vida activando el pipeline y observando todo el flujo de trabajo en acción.
🚀 El poder de GitOps y DevOps con AWS y Docker
Antes de realizar cambios, entendamos por qué los pipelines de CI/CD son tan valiosos:
GitOps: Infraestructura como Código
GitOps usa Git como la única fuente de verdad para el código de la infraestructura y la aplicación.
- Todos los cambios se realizan mediante pull requests.
- Git proporciona historial de auditoría y capacidades de reversión (rollback).
- Los cambios son declarativos y están versionados.
DevOps: Rompiendo Silos
DevOps une a los equipos de desarrollo y operaciones para entregar software más rápido y confiable.
Mejor Juntos: AWS y Docker
Al combinar AWS y Docker, obtenemos lo mejor de ambos mundos:
- La contenedorización de Docker simplifica el empaquetado y despliegue.
- Los servicios gestionados de AWS proporcionan infraestructura escalable y confiable.
- Docker Build Cloud permite construcciones multi-arquitectura eficientes.
- Docker Scout asegura que la seguridad esté integrada en el pipeline.
Flujo de Trabajo GitOps
💻 Activando el Pipeline con un Enfoque de Desarrollo Modular
Demostraremos el poder del pipeline a través de tres iteraciones clave:
- Actualizaremos la Página de Inicio (Home Page).
- Probaremos nuestra Compuerta de Seguridad (Security Gate) con un Dockerfile vulnerable.
- Corregiremos la seguridad y mejoraremos la página de Listado de Habitaciones (Room Listings).
1️⃣ Iteración 1: Actualización del Equipo de Home Page
Imagina que eres parte del equipo de Home Page. Han decidido implementar una página moderna y visualmente atractiva:
cd Rent-A-Room && \
echo 'import React from "react";
import { Link } from "react-router-dom";
import BannerImage from "../../images/choosinghouse.svg";
import "./home.css";
const Home = () => {
return (
<div className="home-container">
<div className="hero-section">
<div className="hero-content">
<h1 className="hero-title">Encuentra Tu Estancia Perfecta</h1>
<p className="hero-subtitle">
Descubre espacios únicos que se sienten como en casa
</p>
<Link to="/rooms">
<button className="cta-button">
Explorar Habitaciones
<span className="arrow">→</span>
</button>
</Link>
</div>
<div className="hero-image">
<img src={BannerImage} alt="Ilustración de habitación" />
</div>
</div>
<div className="features-section">
<div className="feature-card">
<div className="feature-icon">🏠</div>
<h3>Casas Verificadas</h3>
<p>Todas nuestras propiedades son cuidadosamente revisadas</p>
</div>
<div className="feature-card">
<div className="feature-icon">💫</div>
<h3>Mejores Precios</h3>
<p>Encuentra tarifas competitivas para estancias cortas y largas</p>
</div>
<div className="feature-card">
<div className="feature-icon">🔒</div>
<h3>Reserva Segura</h3>
<p>Tu seguridad es nuestra máxima prioridad</p>
</div>
</div>
</div>
);
};
export default Home;' > src/components/home/Home.js(Nota: Los comandos de bash para actualizar CSS y hacer push se omiten para brevedad, pero siguen el mismo proceso).
git add src/components/home/Home.js src/components/home/home.css
git commit -m "Home Team: Mejorar landing page con UI moderna y sección de características"
git push origin mainMonitorear la Ejecución del Pipeline
Navega a la consola de AWS CodePipeline para ver el progreso a través de las etapas de Source, Build, Security Scan y Deploy.

Una vez completado, verifica los cambios usando la URL del Load Balancer:
# Obtener el nombre DNS del balanceador de carga
ALB_DNS=$(aws elbv2 describe-load-balancers \
--names rent-a-room-alb \
--query 'LoadBalancers[0].DNSName' \
--output text)
echo "✅ URL de la Aplicación: http://$ALB_DNS"2️⃣ Iteración 2: Probando la Compuerta de Seguridad con un Dockerfile Vulnerable
Vamos a probar cómo Docker Scout evita que imágenes vulnerables lleguen a producción.
1. Respaldar el Dockerfile actual
cp Dockerfile Dockerfile.secure2. Reemplazar con el Dockerfile vulnerable
cp Dockerfile.vulnerable Dockerfile
echo "# Forzando build con imagen vulnerable" >> Dockerfile
git add Dockerfile
git commit -m "Probando compuerta de seguridad con Dockerfile vulnerable"
git push origin main3. Monitorear la falla
El pipeline debería fallar en la etapa de Security Scan porque Docker Scout detectará vulnerabilidades críticas.

4. Protección contra fallas
A pesar de la falla, los usuarios finales no se ven afectados. El balanceador de carga sigue dirigiendo el tráfico a los contenedores sanos de la versión anterior.
Estrategias de Despliegue Avanzadas
En producción, podrías considerar:
- Blue/Green Deployments: Crea un entorno nuevo (green) paralelo al actual (blue) y cambia el tráfico tras verificar.
- Canary Deployments: Envía un pequeño porcentaje de tráfico a la nueva versión y monitoriza antes del despliegue total.
3️⃣ Iteración 3: Corrigiendo Seguridad y Mejorando Listados
1. Restaurar Dockerfile Seguro
cp Dockerfile.secure Dockerfile2. Mejorar la página de Listado de Habitaciones
Actualizaremos src/components/roomslist/RoomsList.js con un diseño de tarjetas moderno.
(Comandos de actualización omitidos para brevedad)
git add src/components/roomslist/RoomsList.js src/components/roomslist/roomslist.css Dockerfile
git commit -m "Rooms Team: Mejorar diseño de tarjetas y corregir Dockerfile"
git push origin main🔍 Entendiendo la Compuerta de Seguridad (Security Gate)
La configuración clave en el proyecto de CodeBuild de Scout:
docker run --rm \
-e DOCKER_SCOUT_HUB_USER=$DOCKER_USERNAME \
-e DOCKER_SCOUT_HUB_PASSWORD=$DOCKER_TOKEN \
docker/scout-cli cves $DOCKER_USERNAME/rent-a-room:$IMAGE_TAG \
--exit-code --only-severity critical,high--exit-code: Retorna un código de error si se hallan vulnerabilidades.--only-severity critical,high: Filtra por nivel de severidad.
🏢 Beneficios en el Mundo Real
- Autonomía de Equipos: Diferentes equipos pueden trabajar en partes distintas de la aplicación.
- Integración Continua: Cada cambio se construye, prueba y despliega automáticamente.
- Consistencia en el Despliegue: El mismo proceso para cada cambio.
- Seguridad por Defecto: Docker Scout integrado en el proceso.
💡 Puntos Clave Finales
- Desarrollo Acelerado: De código a producción en minutos.
- Seguridad Shift-left: Seguridad integrada desde el inicio con Docker Scout.
- Soporte Multi-Arquitectura: Construye una vez, despliega en cualquier lugar con Docker Build Cloud.
🎉 ¡Felicidades!
Has construido con éxito un pipeline de CI/CD end-to-end aprovechando lo mejor de AWS y Docker. ¡Bien hecho! 🚀
