Esta aplicación será completamente serverless y cloud-native, aprovechando servicios AWS que son fundamentales para la certificación Developer Associate, como Lambda, API Gateway, DynamoDB, S3, y servicios de integración.
Frontend (React/Vue) → CloudFront → API Gateway → Lambda Functions → DynamoDB/S3
↓
SQS → Step Functions
↓
EventBridge → Lambda
Servicio AWS: Amazon Cognito (en lugar de Keycloak)
Justificación: Cognito es el servicio nativo de AWS para autenticación y autorización, completamente serverless y altamente escalable.
Componentes:
- Cognito User Pool: Gestión de usuarios y autenticación
- Cognito Identity Pool: Autorización y acceso a recursos AWS
- Lambda Triggers: Para lógica personalizada (pre-signup, post-confirmation, etc.)
Implementación:
// Ejemplo de configuración con AWS SDK
const cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();
Servicio AWS: API Gateway + Lambda + DynamoDB + EventBridge
Justificación: Implementación serverless que integra con servicios de pago como Stripe.
Componentes:
- API Gateway: Endpoints para gestión de subscripciones
- Lambda Functions: Lógica de negocio para pagos
- DynamoDB: Almacenamiento de datos de subscripción
- EventBridge: Eventos para renovaciones y notificaciones
- SES: Envío de emails de confirmación
Flujo:
Webhook Stripe → API Gateway → Lambda → DynamoDB → EventBridge → Lambda (Notifications)
Servicio AWS: S3 + Lambda + Textract
Justificación: Textract es el servicio AWS para extracción de texto de documentos.
Componentes:
- S3: Almacenamiento de CVs subidos
- Lambda: Procesamiento y orquestación
- Textract: Extracción de texto de PDFs/imágenes
- SQS: Cola para procesamiento asíncrono
Flujo:
Frontend → S3 Upload → Lambda Trigger → Textract → Lambda Process → DynamoDB
Servicio AWS: Lambda + SQS + DynamoDB
Justificación: Procesamiento serverless con cola para manejar latencia de APIs externas.
Componentes:
- Lambda: Integración con OpenAI API
- SQS: Cola para procesamiento asíncrono
- DynamoDB: Cache de respuestas de IA
- Parameter Store: Almacenamiento seguro de API keys
Implementación:
// Lambda function para formateo
exports.handler = async (event) => {
const openai = new OpenAI({
apiKey: await getParameter('/cv-app/openai-key')
});
const completion = await openai.chat.completions.create({
messages: [{ role: "user", content: event.cvText }],
model: "gpt-3.5-turbo",
});
return {
statusCode: 200,
body: JSON.stringify(completion.choices[0].message.content)
};
};
Servicio AWS: Lambda + S3
Justificación: Generación serverless de PDFs con almacenamiento en S3.
Componentes:
- Lambda: Generación de PDF con bibliotecas como Puppeteer
- S3: Almacenamiento de PDFs generados
- CloudFront: CDN para entrega rápida de PDFs
Layer personalizado:
# Crear layer para Puppeteer
npm install puppeteer-core
zip -r puppeteer-layer.zip node_modules/
Servicio AWS: API Gateway + Lambda + DynamoDB
Justificación: APIs REST serverless para CRUD operations.
Componentes:
- API Gateway: Endpoints REST para modificaciones
- Lambda: Lógica de negocio para CRUD
- DynamoDB: Almacenamiento de datos del CV
- DAX: Cache para DynamoDB (opcional)
Servicio AWS: DynamoDB + ElastiCache + S3
Justificación: Combinación de NoSQL, cache y almacenamiento de objetos.
Componentes:
- DynamoDB: Base de datos principal
- ElastiCache Redis: Cache de sesiones y datos frecuentes
- S3: Almacenamiento de archivos (CVs, PDFs)
- CloudWatch: Monitoreo y logs
React/Vue.js → AWS Amplify → CloudFront → S3 (Static Hosting)
API Gateway → Lambda Functions → DynamoDB/S3
SQS → Lambda → Step Functions → External APIs
DynamoDB (NoSQL) + S3 (Object Storage) + ElastiCache (Cache)
Frontend → S3 → Lambda (Trigger) → Textract → Lambda (Process) → DynamoDB
Frontend → API Gateway → Lambda → SQS → Lambda (OpenAI) → DynamoDB
Frontend → API Gateway → Lambda (PDF Gen) → S3 → CloudFront
Frontend → API Gateway → Lambda (CRUD) → DynamoDB
// Ejemplo de stack principal
export class CvAppStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// DynamoDB Table
const cvTable = new Table(this, 'CVTable', {
tableName: 'cv-data',
partitionKey: { name: 'userId', type: AttributeType.STRING },
sortKey: { name: 'cvId', type: AttributeType.STRING },
billingMode: BillingMode.PAY_PER_REQUEST,
});
// Lambda Functions
const formatCvFunction = new Function(this, 'FormatCvFunction', {
runtime: Runtime.NODEJS_18_X,
handler: 'index.handler',
code: Code.fromAsset('lambda/format-cv'),
environment: {
TABLE_NAME: cvTable.tableName,
},
});
// API Gateway
const api = new RestApi(this, 'CvApi', {
restApiName: 'CV Service',
description: 'API for CV processing',
});
const cvResource = api.root.addResource('cv');
cvResource.addMethod('POST', new LambdaIntegration(formatCvFunction));
}
}
- Logs de Lambda functions
- Métricas de API Gateway
- Dashboards personalizados
- Trazabilidad de requests
- Performance insights
- Error tracking
- Compliance y configuración
- Auditoría de cambios
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem"
],
"Resource": "arn:aws:dynamodb:*:*:table/cv-data"
}
]
}
- MFA habilitado
- Password policies
- JWT token validation
- Lambda: 1M requests/mes
- DynamoDB: 25GB storage
- S3: 5GB storage
- CloudFront: 50GB transfer
- Lambda: $0.20 por 1M requests
- DynamoDB: $0.25 por GB/mes
- S3: $0.023 por GB/mes
- API Gateway: $3.50 por 1M requests
- Configurar AWS CLI y CDK
- Crear Cognito User Pool
- Implementar autenticación básica
- Crear API Gateway con Lambda
- Implementar subida a S3
- Configurar Textract para extracción
- Integrar OpenAI API
- Crear generación de PDF
- Implementar sistema de subscripciones
- Añadir cache con ElastiCache
- Configurar monitoreo con CloudWatch
- Implementar CI/CD pipeline
- Configurar CloudFront
- Implementar X-Ray tracing
- Añadir tests automatizados
- Configurar alertas y monitoring
- ✅ Lambda (Serverless computing)
- ✅ API Gateway (API management)
- ✅ DynamoDB (NoSQL database)
- ✅ S3 (Object storage)
- ✅ Cognito (Authentication)
- ✅ CloudFormation/CDK (Infrastructure as Code)
- ✅ CloudWatch (Monitoring)
- ✅ SQS (Message queuing)
- ✅ Step Functions (Workflow orchestration)
- Serverless architecture
- Event-driven programming
- Infrastructure as Code
- Security best practices
- Monitoring and logging
- Cost optimization
- AWS Workshops
- AWS Samples en GitHub
- Hands-on labs