Lección 10 de 19 · Lectura y práctica
Configura deploys a AWS, Azure o Google Cloud
Concepto claveLos despliegues automatizados a entornos cloud representan el último eslabón en tu pipeline de CI/CD. Imagina que tu aplicación es un paquete que debe viajar desde tu computadora (repositorio) hasta un almacén en la.
Del concepto a la práctica
Taller de esta lección
Un despliegue automatizado debe separar la preparación del artefacto, la autenticación y la entrega al proveedor. AWS, Azure y Google Cloud tienen interfaces distintas, por lo que conviene modelar primero entradas y salidas: archivo o imagen de entrada, entorno destino, identidad autorizada y comprobación posterior.
Ejemplo resuelto
Un flujo seguro puede construir app.tar, subirlo como artefacto y hacer que el job de despliegue lo descargue. Para una cuenta cloud compatible, prioriza OIDC con credenciales temporales y una política de confianza restringida al repositorio/entorno/rama autorizados; requiere id-token:write en el job que lo necesite. Un secret de larga duración es una alternativa que debe limitarse y rotarse. La identidad no se obtiene simplemente de una variable no sensible, mientras el nombre del entorno se mantiene como variable no sensible. El despliegue solo depende del job de calidad.
Pruébalo
Define el artefacto exacto que se entregará.
Enumera la identidad mínima y guárdala fuera del repositorio.
Conecta build, test y deploy mediante dependencias.
Añade una comprobación autorizada del resultado.
Comprueba tu resultado
Error frecuente: reconstruir en deploy y obtener un resultado distinto al probado. Corrección: transporta el artefacto producido por build.
Ejercicio: sustituye el proveedor real por una carpeta local de staging. Resultado esperado: el deploy consume exactamente el archivo generado y la ejecución se detiene si el job de calidad falla.

Mapa de prácticaEl código se empaqueta en una imagen y se prueba antes de publicarlo. Esa misma imagen se guarda en un registro y se usa en el despliegue. Comprobar la salud de las instancias permite detectar un fallo sin reconstruir el artefacto.
Ver la infografía en tamaño completo ↗Concepto clave
Los despliegues automatizados a entornos cloud representan el último eslabón en tu pipeline de CI/CD. Imagina que tu aplicación es un paquete que debe viajar desde tu computadora (repositorio) hasta un almacén en la nube (servidor cloud). GitHub Actions actúa como el sistema de logística automatizado que empaqueta, etiqueta y envía ese paquete sin intervención humana.
En la práctica, esto significa que cada vez que haces un push a tu rama principal o creas un release, un workflow se activa, ejecuta tus tests, construye la aplicación y la despliega automáticamente a AWS, Azure o Google Cloud. La clave está en la integración segura entre GitHub y tu proveedor cloud, utilizando secrets para credenciales y acciones específicas para cada plataforma.
Cómo funciona en la práctica
El proceso sigue estos pasos:
- Configuras secrets en tu repositorio GitHub con las credenciales de tu proveedor cloud (ej: AWS_ACCESS_KEY_ID, AZURE_CREDENTIALS)
- Creas un archivo YAML en .github/workflows/ que define el workflow de despliegue
- El workflow se activa automáticamente por eventos como push o pull_request
- Se ejecutan jobs que: construyen la aplicación, corren tests, y finalmente despliegan
- Para el deploy, usas acciones oficiales como aws-actions/configure-aws-credentials o azure/login
- El resultado es tu aplicación disponible en producción sin intervención manual
Código en acción
Ejemplo básico para desplegar una app Node.js a AWS Elastic Beanstalk:
name: Deploy to AWS
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build application
run: npm run build
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
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 Elastic Beanstalk
run: |
aws elasticbeanstalk create-application-version \
--application-name my-app \
--version-label ${{ github.sha }} \
--source-bundle S3Bucket=my-bucket,S3Key=app.zip
aws elasticbeanstalk update-environment \
--environment-name my-app-prod \
--version-label ${{ github.sha }}Refactorización mejorada con reutilización de steps:
name: Deploy to AWS - Refactored
on:
push:
branches: [ main ]
env:
NODE_VERSION: '18'
AWS_REGION: 'us-east-1'
jobs:
build-and-test:
runs-on: ubuntu-latest
outputs:
artifact-name: ${{ steps.build.outputs.artifact-name }}
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install and test
run: |
npm ci
npm test
- name: Build artifact
id: build
run: |
npm run build
echo "artifact-name=app-${{ github.sha }}.zip" >> $GITHUB_OUTPUT
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: app-build
path: ./dist
deploy:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: app-build
- name: Configure AWS
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Deploy
run: ./scripts/deploy.sh ${{ needs.build-and-test.outputs.artifact-name }}Errores comunes
- Exponer credenciales en logs: Nunca imprimas secrets en console.log. GitHub Actions los oculta automaticamente si usas ${{ secrets.NOMBRE }}, pero si las asignas a variables normales, quedan expuestas.
- Falta de manejo de errores: No configurar timeouts adecuados o no verificar que el deploy fue exitoso. Siempre incluye steps de verificacion post-deploy.
- Despliegues sin rollback: Si algo falla en produccion, debes poder revertir automaticamente. Implementa estrategias como blue-green deployments.
- Ignorar costos: Desplegar en cada push puede generar costos inesperados. Usa environments y approvals para despliegues a produccion.
- No probar en staging: Desplegar directamente a produccion sin un entorno intermedio es riesgoso. Configura al menos dos environments: staging y production.
Checklist de dominio
- Puedo configurar secrets en GitHub para AWS, Azure y Google Cloud
- Sé crear workflows que se activen solo en ciertas ramas o tags
- Implementé al menos una estrategia de deploy (blue-green, canary, rolling)
- Configuré manejo de errores y rollback automatico
- Utilicé environments de GitHub para requerir approvals en produccion
- Optimicé mis workflows para reutilizar jobs y steps comunes
- Monitoricé costos y performance de mis despliegues automatizados
Implementa un pipeline completo con deploy a Azure App Service
Objetivo
Crear un workflow de GitHub Actions que construya una aplicacion web simple y la despliegue automaticamente a Azure App Service cuando se haga push a la rama main.
Requisitos previos
- Una cuenta de Azure con suscripcion activa
- Una aplicacion web creada en Azure App Service
- Un repositorio GitHub con una aplicacion web basica (puede ser HTML/JS estatico)
Pasos a seguir
- Crea un Service Principal en Azure y obtén las credenciales (clientId, clientSecret, tenantId, subscriptionId)
- Configura estos valores como secrets en tu repositorio GitHub con nombres: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID
- Crea un archivo en .github/workflows/deploy-azure.yml
- Define el trigger para que se ejecute en push a main
- Configura un job que: checkout el codigo, configure Azure credentials, y despliegue a App Service
- Usa la accion oficial azure/login y azure/webapps-deploy
- Agrega un step adicional que verifique que el deploy fue exitoso haciendo una peticion HTTP a tu app
- Ejecuta el workflow manualmente y verifica que tu aplicacion este disponible en Azure
Entrega
Comparte el link a tu repositorio con el workflow funcionando y una captura de pantalla de tu aplicacion desplegada en Azure.
Pistas
- Usa la documentacion oficial de GitHub Actions para Azure: https://github.com/Azure/actions
- Recuerda que el nombre de tu App Service en Azure debe coincidir con el parametro 'app-name' en el workflow
- Puedes usar 'curl' o una accion como 'jakejarvis/wait-for-action' para verificar el deploy
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con GitHub Actions para CI/CD: Automatización de Builds, Tests y Deploys
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.