Proyecto a modo de ejercicio para utilizar Open Telemetry en un sistema distribuido.
El sistema tiene 4 aplicaciones
- Frontend: Interfaz de usuario que permite seleccionar archivos desde la máquina local y subirlos a S3
- Files Service: Servicio que se comunica con S3 para generar URLs prefirmadas y almacenar la metadata de los archivos subidos en la base de datos
- Auth Service: Sistema de autenticación simplificado que valida tokens pre-almacenados en una tabla de la base de datos
- Load Pipeline: Procesa mensajes de la cola que representan archivos subidos a S3 y carga sus datos en una tabla del warehouse Redshift
Y cuenta con los siguientes componentes en su arquitectura (orientada a aws)
- EC2 Instances: Instancias donde se ejecutan el Frontend y los servicios (API Rest) Files Service y Auth Service
- DynamoDB: Base de datos NoSQL para almacenar la metadata de los archivos subidos
- S3: Servicio de almacenamiento donde se guardan los archivos enviados desde el Frontend
- SQS: Servicio de colas para gestionar los archivos guardados en S3
- Lambda: Servicio serverless donde se despliega el Load Pipeline
- CodeBuild: Servicio para construir el lambda function para la app Load Pipeline
- RedShift: Data warehouse serverless para el análisis de los datos de los archivos
Instalar aws cli en la maquina cliente y configurar las credenciales de acceso a aws con los permisos necesarios para crear los recursos de la infraestructura.
Si deseas cambiar los valores por defecto (descritos a continuacion) puedes hacerlo creando un archivo .env en la raiz del proyecto, basado en el archivo .env.example:
AWS_REGION:us-east-1S3_BUCKET_NAME:otel-files-service
make setupEl anterior comando creará todos los recursos necesarios en aws para el proyecto, en CloudFormation el nombre del stack es otel-observability.
Importante: Espera hasta que el stack se cree completamente antes de continuar. Usa
make statuspara monitorear el progreso. Cuando el estado seaCREATE_COMPLETE, puedes proceder.
Nota: Por simplicidad se utiliza la VPC por defecto para crear el Redshift Serverless Workgroup, asegurate de tener una en la region especificada.
make deployEl anterior comando se conectará a las instancias EC2 creadas en el paso anterior y desplegará las aplicaciones de frontend, files service y auth service construyendo imagenes docker pada cada una en sus respectivas instancias. Ademas, lanzara un projecto de CodeBuild para empaquetar y desplegar el lambda load-pipeline.
Una vez terminado el deploy verás en la console las urls de acceso a cada una de las aplicaciones.
Ejemplo:
INFRAESTRUCTURE:
Region: us-east-1
Bucket: otel-files-service-4
APPLICATIONS:
Frontend: http://3.83.235.90
Files service: http://100.26.106.3/docs
Auth service: http://3.92.212.128/docs
OBSERVABILITY:
Jaeger UI: http://34.205.76.200:16686- Redshift: usuario
otel, contraseñaOtelObservability123
make destroy: Destruye el stack de infraestructuramake get-ip app=<app>: Obtiene la ip publica de una instancia EC2make output: Obtiene los outputs del stack de infraestructura (guardados en outputs.json)make connect app=<app>: Conecta a una instancia EC2 y le permite ejecutar comandosmake logs app=<app>: Obtiene los logs de una aplicaciónmake status: Obtiene el estado del stack de infraestructuramake info: Obtiene información de las aplicaciones desplegadas (region, bucket name, ips, etc)
Valores validos para
<app>:frontend,files-service,auth-service


