Este proyecto implementa un chat basado en IA generativa utilizando AWS Bedrock. La aplicación está desarrollada en Node.js y se despliega usando AWS Lambda y API Gateway para gestionar las solicitudes de los usuarios. La recuperación y almacenado de chats se implementa con AWS DynamoDB y la interfaz de usuario se almacena en un bucket de Amazon S3 como una aplicación React.
El chat utiliza AWS Bedrock para procesar las entradas de los usuarios y generar respuestas en tiempo real. El backend se desarrolla como una función AWS Lambda que se integra con API Gateway para manejar las solicitudes HTTP. El frontend es una aplicación React alojada en Amazon S3 que se conecta con las APIs mediante peticiones HTTP. Además, se implementa AWS Cognito para gestionar el inicio de sesión y la autenticación de usuarios, asegurando un acceso seguro y sencillo a la aplicación y utilizaremos AWS DynamoDB para almacenar y recuperar el historial de chat.
La arquitectura del proyecto consta de los siguientes componentes:
- Frontend: Una aplicación React alojada en un bucket de S3 que actúa como la interfaz de usuario.
- API Gateway: Maneja las solicitudes de los usuarios y las redirige a la función Lambda.
- AWS Lambda: Función que procesa las solicitudes del API Gateway y llama a AWS Bedrock para generar las respuestas.
- AWS Bedrock: Servicio de IA generativa de AWS que responde a las consultas de los usuarios.
- AWS Cognito: Servicio que facilita la gestión de la autenticación y autorización de usuarios en aplicaciones web y móviles.
- AWS DynamoDB: Servicio que almacenará el historial de chat.
- Node.js (v16 o superior)
- AWS CLI configurado con permisos adecuados
- AWS Account con acceso a S3, API Gateway, Lambda y Bedrock
El despliegue de la aplicación se gestiona mediante un workflow de GitHub Actions, que se activa al realizar un push a la rama main o manualmente usando workflow_dispatch. A continuación, se detallan los pasos para garantizar que el despliegue funcione correctamente:
-
Configuración de Secrets en GitHub:
- Ve a Settings > Secrets and variables > Actions en tu repositorio de GitHub.
- Agrega los siguientes secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGION(e.g.,us-east-1)STAGE(e.g.,dev,stagingoprod)COGNITO_USER_USERNAME(Nombre de usuario del Administrador)COGNITO_USER_PASSWORD(Contraseña del Administrador)
-
Push de Código:
- Realiza un push a la rama
mainpara activar el workflow y desplegar automáticamente. - Alternativamente, puedes iniciar el despliegue manualmente desde la pestaña Actions en GitHub.
- Realiza un push a la rama
-
Acciones Automáticas del Workflow:
- Instalación de dependencias: Clona el repositorio y configura herramientas como AWS CLI y el Serverless Framework.
- Configuración de AWS CLI: Autenticación con AWS usando las credenciales proporcionadas en los secrets.
- Despliegue de la aplicación: Usa el comando
serverless deploypara desplegar la Lambda y configurar los recursos en AWS. - Subida de archivos a S3: Sube el frontend al bucket configurado para que esté disponible públicamente.
Este proceso facilita la Integración y Despliegue Continuo (CI/CD) para la aplicación.
Asegúrate de que tanto tu bucket S3 como tu API Gateway tengan configuraciones de CORS adecuadas para permitir que el frontend se comunique con la API.
- Accede a la URL pública de tu bucket S3 en un navegador para ver la interfaz de usuario del chat.
- Logeate con las credenciales de usuarios que creamos en Github Secrets, las cuales son COGNITO_USER_USERNAME y COGNITO_USER_PASSWORD
- Escribe mensajes, y la IA generativa responderá en tiempo real a través de AWS Bedrock.
- 💰 Optimización de Costos: Implementar estrategias de optimización para reducir costos en las interacciones con Bedrock.
