Servicio AWS Lambda para la gestión y generación de URLs prefirmadas para archivos CLI.
Este servicio se encarga de generar URLs prefirmadas para la subida de archivos desde la interfaz de línea de comandos (CLI) a un bucket S3. El servicio valida las API keys y genera URLs seguras temporales para permitir la subida de archivos.
- Validación de API Keys para autenticación
- Generación de URLs prefirmadas para S3
- Manejo de lotes de archivos
- Control de errores robusto
- Registro de actividad
- NestJS como framework
- TypeScript para el desarrollo
- AWS Lambda para el despliegue
- AWS S3 para el almacenamiento
- AWS DynamoDB para la persistencia de datos
- Vitest para las pruebas unitarias
src/
├── app.module.ts # Módulo principal de la aplicación
├── entrypoint.ts # Punto de entrada para AWS Lambda
├── infrastructure/ # Implementaciones de infraestructura
│ ├── api-key/ # Módulo de gestión de API keys
│ ├── cli-files/ # Módulo de gestión de archivos CLI
│ └── storage/ # Servicios de almacenamiento (S3)
└── utils/ # Utilidades generales
# Instalar dependencias
npm install
# Compilar el proyecto
npm run build# Ejecutar pruebas unitarias
npm testEl servicio está diseñado para ser desplegado como una función AWS Lambda y ser invocado mediante un API Gateway. Acepta solicitudes POST con la siguiente estructura:
{
"source": "source-name",
"args": {
"batch_id": "batch-identifier",
"files": [
{
"name": "filename.ext",
"content_type": "application/type"
}
]
}
}Todas las solicitudes deben incluir un header x-api-key con una API key válida.
El servicio responde con un objeto JSON que contiene:
{
"message": "URLs generadas con éxito",
"presigned_urls": [
{
"name": "filename.ext",
"url": "https://presigned-url.com"
}
]
}Opcionalmente se puede crear un archivo common_tags.json con las etiquetas necesarias:
{
"Project": "Titvo Security Scan",
"Customer": "Titvo",
"Team": "Area Creacion"
}- Crear archivo .env con las variables necesarias descritas arriba
export AWS_ACCESS_KEY_ID="tu_access_key"
export AWS_SECRET_ACCESS_KEY="tu_secret_key"
export AWS_DEFAULT_REGION="us-east-1"
export AWS_STAGE="prod"
export PROJECT_NAME="titvo-task-cli-files" # Opcional si quiere mantener los valores por defecto. Esto se usará como prefijo para los recursos
export PARAMETER_PATH="/titvo/security-scan" # Opcional si quiere mantener los valores por defecto. Esto se usará como prefijo para los parámetros
export BUCKET_STATE_NAME="titvo-task-cli-files-terraform-state" # Opcional, si no se especifica se usará el nombre del proyecto. Por ejemplo: titvo-security-scan-terraform-stateImportant
PARAMETER_PATHdeben tener los mismos valores que se usarion en el proyecto titvo-security-scan-infra-aws
- Desplegar el proyecto
npm install
npm run build
cd aws
terragrunt run-all apply --terragrunt-non-interactive --auto-approveEste proyecto está licenciado bajo Apache License 2.0.