DEV Community

Cover image for Desplegando una Aplicación de Embeddings Serverless con AWS CDK, Lambda y Amazon Aurora PostgreSQL
Elizabeth Fuentes L for AWS Español

Posted on

Desplegando una Aplicación de Embeddings Serverless con AWS CDK, Lambda y Amazon Aurora PostgreSQL

🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram Youtube
Linktr

¡Bienvenido a la Parte 2 de nuestra serie de blog!

En esta publicación, hablaré de los conceptos explorados en la Parte 1 para crear una solución escalable y lista para producción. Usando AWS Lambda y AWS CDK, transformarás tu prototipo basado en notebooks en una arquitectura serverless robusta.

Juntos, desarrollaremos funciones AWS Lambda para la generación y recuperación de embeddings, aprovecharemos AWS CDK para el despliegue de infraestructura como código, e integraremos con Amazon S3 y Amazon Aurora PostgreSQL para un almacenamiento y recuperación eficiente de datos. Al final de este tutorial, tendrás un motor de búsqueda multimodal serverless completamente funcional, capaz de entender y recuperar tanto contenido textual como visual.

✅ Nivel de AWS: Avanzado - 300

Pre-requisitos:

  • Conocimiento fundamental de Python
  • Cuenta de AWS
  • Habilitar el acceso a los siguientes modelos:
  • Amazon Titan Embeddings V2
  • Modelos Anthropic Claude 3 (Haiku o Sonnet)
  • Configurar la Interfaz de Línea de Comandos de AWS (CLI)
  • Opcional: Inicializar tu cuenta/región si este es tu primer proyecto CDK
  • Leer sobre "Comenzar con Python" de AWS CDK

💰 Costo de la app:

En la segunda parte, construirás una Aplicación de Embeddings Serverless utilizando el AWS Cloud Development Kit (CDK) para crear cuatro Funciones Lambda.

Aprende cómo probar las Funciones Lambda en la consola con eventos de prueba.

Funciones AWS Lambda para Generar Embeddings de Archivos de Texto e Imagen:

Funciones AWS Lambda para Generar Embeddings de Archivos de Texto e Imagen

To generate embeddings for the text content of PDF files with FAISS.

Evento para el trigger:

{
    "location": "REPLACE-YOU-KEY",
    "vectorStoreLocation": "REPALCE-NAME.vdb",
    "bucketName": "REPLACE-YOU-BUCKET",
    "vectorStoreType": "faiss",
    "splitStrategy": "semantic",
    "fileType": "application/pdf", 
    "embeddingModel": "amazon.titan-embed-text-v1"
  }
Enter fullscreen mode Exit fullscreen mode

Event to trigger

To generate embeddings for images with FAISS.

Evento para el trigger:

{
    "location": "REPLACE-YOU-KEY-FOLDER",
    "vectorStoreLocation": "REPLACE-NAME.vdb",
    "bucketName": "REPLACE-YOU-BUCKET",
    "vectorStoreType": "faiss",
    "splitStrategy": "semantic",
    "embeddingModel": "amazon.titan-embed-image-v1"
}
Enter fullscreen mode Exit fullscreen mode

To generate embeddings for image/pdf with pgvector and Amazon Aurora.

To generate embeddings for image/pdf with pgvector and Amazon Aurora.

💡 Antes de probar esta Función Lambda, ten en cuenta que debe estar en la misma VPC y ser capaz de acceder a la base de datos Amazon Aurora PostgreSQL. Para eso, consulta Conectando automáticamente una función Lambda y un clúster de Aurora DB, Using Amazon RDS Proxy for Aurora and Use interface VPC endpoints (AWS PrivateLink) for Amazon Bedrock VPC endpoint.

Evento para el trigger:

Envento para el trigger:

{
  "location": "YOU-KEY",
  "bucketName": "YOU-BUCKET-NAME",
  "fileType": "pdf or image",
  "embeddingModel": "amazon.titan-embed-text-v1", 
  "PGVECTOR_USER":"YOU-RDS-USER",
  "PGVECTOR_PASSWORD":"YOU-RDS-PASSWORD",
  "PGVECTOR_HOST":"YOU-RDS-ENDPOINT-PROXY",
  "PGVECTOR_DATABASE":"YOU-RDS-DATABASE",
  "PGVECTOR_PORT":"5432",
  "collectioName": "YOU-collectioName",
  "bedrock_endpoint": "https://vpce-...-.....bedrock-runtime.YOU-REGION.vpce.amazonaws.com"
}
Enter fullscreen mode Exit fullscreen mode

Event to trigger

Funciones AWS Lambda para Consultar Archivos de Texto e Imagen en una Base de Datos Vectorial:

Funciones AWS Lambda para Consultar Archivos de Texto e Imagen en una Base de Datos Vectorial

Para manejar el proceso de embedding, hay una Función Lambda dedicada para cada tipo de archivo:

Para recuperar contenido de texto de una base de datos vectorial

Evento para el trigger:

{
  "vectorStoreLocation": "REPLACE-NAME.vdb",
  "bucketName": "REPLACE-YOU-BUCKET",
  "vectorStoreType": "faiss",
  "query": "YOU-QUERY",
  "numDocs": 5,
  "embeddingModel": "amazon.titan-embed-text-v1"
}
Enter fullscreen mode Exit fullscreen mode

Event to trigger

Para recuperar la ubicación de imágenes de una base de datos vectorial

Puedes buscar por texto o por imagen

  • Evento de texto para el trigger:
{
  "vectorStoreLocation": "REPLACE-NAME.vdb",
  "bucketName": "REPLACE-YOU-BUCKET",
  "vectorStoreType": "faiss",
  "InputType": "text",
  "query":"TEXT-QUERY",
  "embeddingModel": "amazon.titan-embed-text-v1"
}
Enter fullscreen mode Exit fullscreen mode

Text event to trigger

  • Image event to trigger

💡 El siguiente paso es tomar el valor de image_path y descargar el archivo del bucket de Amazon S3 con el método download_file de boto3.

To generate embeddings for image/pdf with pgvector and Amazon Aurora.
To generate embeddings for image/pdf with pgvector and Amazon Aurora

{
  "location": "YOU-KEY",
  "bucketName": "YOU-BUCKET-NAME",
  "fileType": "pdf or image",
  "embeddingModel": "amazon.titan-embed-text-v1", 
  "PGVECTOR_USER":"YOU-RDS-USER",
  "PGVECTOR_PASSWORD":"YOU-RDS-PASSWORD",
  "PGVECTOR_HOST":"YOU-RDS-ENDPOINT-PROXY",
  "PGVECTOR_DATABASE":"YOU-RDS-DATABASE",
  "PGVECTOR_PORT":"5432",
  "collectioName": "YOU-collectioName",
  "bedrock_endpoint": "https://vpce-...-.....bedrock-runtime.YOU-REGION.vpce.amazonaws.com",
  "QUERY": "YOU-TEXT-QUESTION"
  }
Enter fullscreen mode Exit fullscreen mode

event

💡 Usa location y bucketName para entregar la ubicación de la imagen para realizar una consulta.

🚀 ¡Vamos a construir!

Las Amazon Lambdas que construirás en este despliegue se crean con imágenes de contenedor, debes tener Docker Desktop instalado y activo en tu computadora.

Paso 1: Configuración de la APP

✅ Clona el repositorio

git clone https://github.com/build-on-aws/langchain-embeddings
Enter fullscreen mode Exit fullscreen mode

✅ Ve a:

cd serveless-embeddings
Enter fullscreen mode Exit fullscreen mode

✅ Configura la AWS Command Line Interface

Sigue los pasos:

Paso 2: Despliega la arquitectura con CDK.

Sigue estos pasos

✅ Crea el ambiente virtual:

python3 -m venv .venv
source .venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

para windows:

.venv\Scripts\activate.bat
Enter fullscreen mode Exit fullscreen mode

✅ Instala los Requirements:

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

✅ Synthesize el Cloudformation Template con el siguiente comando:

cdk synth
Enter fullscreen mode Exit fullscreen mode

✅ 🚀 El despliegue:

cdk deploy
Enter fullscreen mode Exit fullscreen mode

🧹 ¡Limpia la casa!:

Si terminas de probar y quieres limpiar la aplicación, solo tienes que seguir estos dos pasos:

✅ Elimina los archivos del bucket de Amazon S3 creado en el despliegue.
✅ Ejecuta este comando en tu terminal:

cdk destroy
Enter fullscreen mode Exit fullscreen mode

Conclusión

En esta publicación, has demostrado cómo transformar una solución de búsqueda multimodal basada en notebooks en una arquitectura serverless escalable utilizando servicios de AWS. Has recorrido el proceso de desarrollo de funciones Lambda para tareas de embedding, utilizando AWS CDK para el despliegue de infraestructura, e integrando con S3 y Aurora PostgreSQL para una gestión eficiente de datos.

Al aprovechar estas tecnologías serverless, ahora puedes desplegar un motor de búsqueda multimodal robusto y listo para producción, capaz de manejar tanto contenido textual como visual. Este enfoque no solo mejora la escalabilidad, sino que también reduce la sobrecarga operativa, permitiéndote concentrarte en mejorar tus capacidades de búsqueda y la experiencia del usuario.

Te animo a que construyas sobre esta base, experimentes con diferentes modelos de embedding y explores servicios adicionales de AWS para mejorar aún más tu motor de búsqueda multimodal. No dudes en compartir tus experiencias o hacer preguntas en los comentarios a continuación. ¡Feliz construcción!

Gracias,
Eli

🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram Youtube
Linktr

Continue to Building a Multimodal Search Engine with Amazon Titan Embeddings, Aurora Serveless PostgreSQL and LangChain

Top comments (0)