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-1
S3_BUCKET_NAME
:otel-files-service
make setup
El 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 status
para 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 deploy
El 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:
Frontend: http://34.0.10.10/
Files Service: http://34.0.10.10/docs
Auth Service: http://34.0.10.10/docs
- 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