Ejercicio práctico: Despliega una app simple a un entorno cloud

Lectura
30 min~5 min lectura

Concepto clave

El despliegue automatizado a entornos cloud es como tener un piloto automático para tu aplicación. Imagina que cada vez que terminas de construir un coche (tu código), un sistema inteligente lo prueba, lo llena de gasolina y lo conduce directamente al concesionario (el entorno de producción) sin que tú tengas que tocar el volante. GitHub Actions actú como ese sistema, ejecutando workflows que empaquetan tu aplicación, la despliegan en servicios cloud como AWS, Azure o Google Cloud, y verifican que todo funcione correctamente.

En el contexto de CI/CD, esto significa que cada cambio en tu repositorio puede desencadenar un pipeline que va desde la compilación y pruebas hasta el despliegue en un entorno real. La clave está en la integración continua (CI), que asegura que el código nuevo no rompa lo existente, y la entrega continua (CD), que automatiza la liberación a entornos específicos. Para un DevOps Engineer, dominar esto reduce errores humanos, acelera el time-to-market y permite enfoques como blue-green deployments o canary releases.

Cómo funciona en la práctica

Vamos a desglosar el proceso paso a paso para desplegar una app simple, como una página web estática, a AWS S3 usando GitHub Actions. Primero, necesitas una aplicación básica—por ejemplo, un sitio HTML con un archivo index.html. Luego, configuras un bucket en S3 para alojarlo. En GitHub, creas un workflow en .github/workflows/deploy.yml que se active en eventos como un push a la rama main.

El workflow típico incluye: 1) Checkout del código, 2) Configuración del entorno (ej. Node.js si necesitas build tools), 3) Construcción de la app (si aplica), 4) Despliegue a S3 usando acciones oficiales de AWS o comandos CLI. Asegúrate de almacenar credenciales de AWS como secrets en GitHub para seguridad. Finalmente, el workflow puede notificar el éxito o fallo, y tu app estará accesible vía URL pública.

Código en acción

Aquí tienes un ejemplo funcional de un workflow de GitHub Actions para desplegar una app estática a AWS S3. Este código es copiable y ejecutable si tienes un repositorio con los archivos necesarios.

name: Deploy to AWS S3

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      
      - name: Deploy to S3
        run: |
          aws s3 sync ./ s3://my-app-bucket --delete

Antes de refactorizar, podrías tener un script manual; después, con este workflow, el despliegue se automatiza. Para mejorarlo, añade un paso de build si tu app requiere compilación, como este ejemplo con una app React:

      - name: Build React app
        run: |
          npm ci
          npm run build
      
      - name: Deploy to S3
        run: |
          aws s3 sync ./build s3://my-app-bucket --delete

Errores comunes

  • Credenciales expuestas en el código: Nunca hardcodees access keys en el YAML. Usa GitHub Secrets y refiérelas con ${{ secrets.NOMBRE }}.
  • Falta de validación pre-despliegue: Desplegar sin pruebas puede llevar a bugs en producción. Asegúrate de incluir steps de test en el workflow antes del deploy.
  • Configuración incorrecta de permisos S3: Si el bucket no tiene políticas públicas de lectura, la app no será accesible. Verifica los permisos en la consola de AWS.
  • Ignorar el manejo de errores: Si el workflow falla, podrías no enterarte. Agrega notificaciones (ej. con Slack o email) para monitoreo.
  • No usar entornos separados: Desplegar directamente a producción es riesgoso. Configura entornos de staging y producción con ramas diferentes o variables.

Checklist de dominio

  1. Configurar un bucket S3 con políticas públicas adecuadas para hosting estático.
  2. Crear secrets en GitHub para almacenar credenciales de AWS de forma segura.
  3. Escribir un workflow YAML que incluya checkout, configuración de AWS, y comando de despliegue.
  4. Probar el workflow con un push a una rama y verificar que la app se despliegue correctamente.
  5. Agregar steps de build y test antes del despliegue para asegurar calidad.
  6. Configurar notificaciones para éxitos o fallos del despliegue.
  7. Refactorizar el workflow para usar entornos múltiples (ej. staging vs producción).

Despliega una app web estática a AWS S3 usando GitHub Actions

Sigue estos pasos para automatizar el despliegue de una aplicación simple a la nube:

  1. Prepara tu aplicación: Crea un repositorio en GitHub con una app web estática. Por ejemplo, añade un archivo index.html con contenido básico como <h1>Hola Mundo</h1>.
  2. Configura AWS S3: En la consola de AWS, crea un bucket S3 llamado mi-app-despliegue (usa un nombre único). Habilita hosting estático y configura las políticas de bucket para permitir acceso público de lectura.
  3. Configura secrets en GitHub: En tu repositorio, ve a Settings > Secrets and variables > Actions. Crea dos secrets: AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY con tus credenciales de IAM (asegúrate de que el usuario IAM tenga permisos para S3).
  4. Crea el workflow: En tu repositorio, crea un archivo en .github/workflows/deploy.yml. Copia el código YAML del ejemplo en "Código en acción", ajustando el nombre del bucket a mi-app-despliegue y la región si es necesario.
  5. Ejecuta el despliegue: Haz un push a la rama main. Ve a la pestaña Actions en GitHub para ver el workflow en ejecución. Si es exitoso, visita la URL de tu bucket (ej. http://mi-app-despliegue.s3-website-us-east-1.amazonaws.com) para ver tu app desplegada.
  6. Verifica y mejora: Asegúrate de que la app se muestre correctamente. Luego, modifica el index.html y haz otro push para ver cómo se actualiza automáticamente.
Pistas
  • Si el workflow falla, revisa los logs en GitHub Actions para ver errores específicos, como problemas de credenciales o permisos S3.
  • Asegúrate de que el bucket S3 tenga la política de bucket correcta; puedes usar la herramienta de política de S3 en la consola de AWS para generarla automáticamente.
  • Para debugging, añade un step en el workflow con run: aws s3 ls para listar buckets y verificar que las credenciales funcionan.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.