Lambda CI/CD Setup Guide
Overview
Este documento explica cómo configurar el despliegue automático de Lambda cuando hay cambios en el repositorio.
Opciones de Integración
Opción 1: GitHub Actions (Recomendado) ✅
Ventajas:
- ✅ Despliegue automático en cada push a
mainodevelop - ✅ Solo despliega cuando hay cambios en archivos relacionados con API
- ✅ No afecta el tiempo de build de Amplify
- ✅ Separación clara entre frontend y backend
- ✅ Logs y notificaciones en GitHub
Configuración:
-
Crear IAM Role para GitHub Actions (OIDC)
# Crear role con trust policy para GitHub Actionsaws iam create-role \--role-name GitHubActions-LambdaDeploy \--assume-role-policy-document '{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/token.actions.githubusercontent.com"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"},"StringLike": {"token.actions.githubusercontent.com:sub": "repo:hashpass-tech/hashpass.tech:*"}}}]}'# Attach policy para Lambdaaws iam attach-role-policy \--role-name GitHubActions-LambdaDeploy \--policy-arn arn:aws:iam::aws:policy/AWSLambda_FullAccess -
Configurar GitHub Secrets
En GitHub → Settings → Secrets and variables → Actions:
- Agregar
AWS_ROLE_ARN:arn:aws:iam::<AWS_ACCOUNT_ID>:role/GitHubActions-LambdaDeploy
- Agregar
-
El workflow ya está configurado
El archivo
.github/workflows/deploy-lambda.ymlestá listo y se activará automáticamente cuando:- Haya cambios en
apps/mobile-app/app/api/** - Haya cambios en
packages/infra/lambda/** - Haya cambios en
packages/tools/scripts/package-lambda.sh - Haya cambios en
package.jsonopackage-lock.json - Push a
mainodevelop
- Haya cambios en
Opción 2: Integrar en Amplify Build
Ventajas:
- ✅ Todo en un solo lugar
- ✅ Frontend y API siempre sincronizados
Desventajas:
- ⚠️ Builds más lentos
- ⚠️ Requiere permisos Lambda en Amplify service role
- ⚠️ Despliega Lambda incluso si solo cambió el frontend
Configuración:
-
Agregar permisos Lambda al Amplify service role
aws iam attach-role-policy \--role-name amplify-hashpasstech-dev-96465-authRole \--policy-arn arn:aws:iam::aws:policy/AWSLambda_FullAccess -
Descomentar en
amplify.yml:post_build:commands:- echo "Packaging Lambda function..."- ./packages/tools/scripts/package-lambda.sh || echo "Lambda packaging skipped"- |if [ -f lambda-deployment.zip ]; thenecho "Deploying Lambda function..."aws lambda update-function-code \--function-name hashpass-api-handler \--region us-east-1 \--zip-file fileb://lambda-deployment.zip || echo "Lambda deployment skipped"fi
Opción 3: Despliegue Manual
Para despliegues manuales cuando sea necesario:
./packages/tools/scripts/package-lambda.sh
aws lambda update-function-code \
--function-name hashpass-api-handler \
--region us-east-1 \
--zip-file fileb://lambda-deployment.zip
Flujo Actual (Recomendado)
┌─────────────────┐
│ Push to main │
└────────┬────────┘
│
├─────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Amplify Build │ │ GitHub Actions │
│ (Frontend) │ │ (Lambda API) │
└─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ hashpass.tech │ │ Lambda Function │
│ (Static Files) │ │ (API Routes) │
└─────────────────┘ └─────────────────┘
Verificación
Verificar que el workflow funciona:
- Hacer un cambio en
apps/mobile-app/app/api/opackages/infra/lambda/ - Commit y push a
main - Verificar en GitHub Actions que el workflow se ejecutó
- Verificar Lambda que se actualizó:
aws lambda get-function \--function-name hashpass-api-handler \--region us-east-1 \--query 'Configuration.LastModified'
Verificar despliegue:
# Probar API
curl https://api.hashpass.tech/api/config/versions
# Ver logs de Lambda
aws logs tail /aws/lambda/hashpass-api-handler --follow --region us-east-1
Troubleshooting
GitHub Actions falla con "Access Denied"
- Verificar que el IAM role existe y tiene los permisos correctos
- Verificar que
AWS_ROLE_ARNestá configurado en GitHub Secrets - Verificar que el OIDC provider está configurado en AWS
Lambda no se actualiza
- Verificar que el workflow se ejecutó (GitHub Actions)
- Verificar logs del workflow
- Verificar que
lambda-deployment.zipse creó correctamente - Verificar permisos del IAM role
Build de Amplify falla al desplegar Lambda
- Verificar que el Amplify service role tiene permisos Lambda
- Verificar que AWS credentials están configuradas
- Considerar usar GitHub Actions en su lugar (recomendado)
Próximos Pasos
- ✅ Configurar IAM Role para GitHub Actions (si no existe)
- ✅ Agregar
AWS_ROLE_ARNa GitHub Secrets - ✅ Hacer un cambio de prueba y verificar despliegue
- ✅ Monitorear primeros despliegues