Lambda CI/CD - Quick Start
Resumen
Ahora Lambda se actualiza automáticamente cuando haces cambios en main o develop en el repositorio hashpass.tech.
¿Cómo Funciona?
Flujo Automático
┌─────────────────────┐
│ Push a main/develop│
│ (cambios en API) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ GitHub Actions │
│ Detecta cambios │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Build & Package │
│ Lambda function │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Deploy a Lambda │
│ Automáticamente │
└─────────────────────┘
¿Cuándo se Despliega?
El workflow se activa cuando hay cambios en:
- ✅
apps/mobile-app/app/api/**- Cualquier archivo de API - ✅
packages/infra/lambda/**- Archivos de Lambda - ✅
packages/tools/scripts/package-lambda.sh- Script de empaquetado - ✅
package.jsonopackage-lock.json- Dependencias
No se despliega si solo cambias:
- ❌ Frontend (componentes React)
- ❌ Estilos CSS
- ❌ Documentación
- ❌ Otros archivos no relacionados con API
Setup Inicial (Una Vez)
Paso 1: Crear IAM Role
./packages/tools/scripts/setup-github-actions-role.sh
Este script:
- ✅ Crea OIDC provider para GitHub (si no existe)
- ✅ Crea IAM role con permisos Lambda
- ✅ Te da el ARN del role
Paso 2: Configurar GitHub Secret
- Ve a GitHub → Settings → Secrets and variables → Actions
- Click New repository secret
- Agregar:
- Name:
AWS_ROLE_ARN - Value: El ARN que te dio el script (ej:
arn:aws:iam::<AWS_ACCOUNT_ID>:role/GitHubActions-LambdaDeploy)
- Name:
- Click Add secret
Paso 3: Probar
- Haz un cambio pequeño en
apps/mobile-app/app/api/(ej: agregar un comentario) - Commit y push:
git add apps/mobile-app/app/api/git commit -m "test: trigger Lambda deployment"git push origin main
- Ve a GitHub → Actions → Verifica que el workflow se ejecutó
- Verifica que Lambda se actualizó:
aws lambda get-function \--function-name hashpass-api-handler \--region us-east-1 \--query 'Configuration.LastModified'
Verificación
Ver Workflow en GitHub
- Ve a:
https://github.com/hashpass-tech/hashpass.tech/actions - Deberías ver "Deploy Lambda Function" en la lista
- Click para ver detalles del despliegue
Verificar Lambda Actualizado
# Ver última modificación
aws lambda get-function \
--function-name hashpass-api-handler \
--region us-east-1 \
--query 'Configuration.{LastModified:LastModified,Version:Version}' \
--output table
# Probar API
curl https://api.hashpass.tech/api/config/versions
Ver Logs
# Logs de Lambda
aws logs tail /aws/lambda/hashpass-api-handler --follow --region us-east-1
# Logs del workflow en GitHub Actions
# (ve a Actions → Click en el workflow → Ver logs)
Preguntas Frecuentes
¿Se despliega en cada push?
No, solo cuando hay cambios en archivos relacionados con API. Si solo cambias el frontend, Lambda no se despliega.
¿Puedo desplegar manualmente?
Sí, puedes:
- Ir a GitHub → Actions → "Deploy Lambda Function" → "Run workflow"
- O ejecutar localmente:
./packages/tools/scripts/package-lambda.shaws lambda update-function-code \--function-name hashpass-api-handler \--region us-east-1 \--zip-file fileb://lambda-deployment.zip
¿Qué pasa si el workflow falla?
- GitHub te enviará una notificación (si está configurada)
- Puedes ver los logs en GitHub Actions
- El despliegue anterior sigue funcionando
- Puedes reintentar desde GitHub Actions
¿Afecta el build de Amplify?
No, son completamente independientes:
- Amplify despliega el frontend
- GitHub Actions despliega Lambda
- No se bloquean entre sí
Troubleshooting
Workflow no se ejecuta
- Verifica que el archivo
.github/workflows/deploy-lambda.ymlexiste - Verifica que hiciste push a
mainodevelop - Verifica que cambiaste archivos en
apps/mobile-app/app/api/opackages/infra/lambda/
Error: "Access Denied"
- Verifica que
AWS_ROLE_ARNestá en GitHub Secrets - Verifica que el IAM role existe y tiene permisos
- Ejecuta
./packages/tools/scripts/setup-github-actions-role.shde nuevo
Lambda no se actualiza
- Verifica logs del workflow en GitHub Actions
- Verifica que
lambda-deployment.zipse creó - Verifica permisos del IAM role
Documentación Completa
Para más detalles, ver: LAMBDA-CI-CD-SETUP.md