El 22 de noviembre de 2024, incorporación de Amazon OpenSearch arrojado soporte para procesadores AWS Lambda. Con este tirada, ahora tiene más flexibilidad para enriquecer y alterar sus registros, métricas y datos de seguimiento en una canalización de OpenSearch Ingestion. Algunos ejemplos incluyen el uso de modelos básicos (FM) para ocasionar incrustaciones de vectores para sus datos y inquirir fuentes de datos externas como AmazonDynamoDB para enriquecer sus datos.
Ingestión de Amazon OpenSearch es una canalización de datos sin servidor y totalmente administrada que ofrece datos de registro, métricas y seguimiento en tiempo verdadero a Servicio de búsqueda abierta de Amazon dominios y Amazon OpenSearch sin servidor colecciones.
Procesadores son componentes interiormente de una canalización de OpenSearch Ingestion que le permiten filtrar, alterar y enriquecer eventos utilizando el formato deseado ayer de imprimir registros en el destino que elija. Si no se define ningún procesador en la configuración de la canalización, los eventos se publican en el formato especificado por el componente de origen. Puede incorporar varios procesadores interiormente de una única canalización y se ejecutan secuencialmente como se define en la configuración de la canalización.
OpenSearch Ingestion le brinda la opción de utilizar funciones Lambda como procesadores adjunto con procesadores nativos integrados al alterar datos. Puede agrupar eventos en una única carga útil según el número o el tamaño de eventos ayer de invocar Lambda para optimizar el rendimiento y el costo de la canalización. Lambda le permite ejecutar código sin aprovisionar ni llevar la batuta servidores, lo que elimina la pobreza de crear una método de escalado de clústeres que tenga en cuenta la carga de trabajo, ayudar integraciones de eventos o llevar la batuta tiempos de ejecución.
En esta publicación, demostramos cómo utilizar el procesador Lambda de OpenSearch Ingestion para ocasionar incrustaciones de sus datos de origen e ingerirlos en un Colección de vectores sin servidor OpenSearch. Esta posibilidad utiliza la flexibilidad de las canalizaciones de OpenSearch Ingestion con un procesador Lambda para ocasionar incrustaciones dinámicamente. La función Lambda invocará el Maniquí de incrustaciones de texto de Amazon Titan alojado en Roca Amazónicalo que permite la creación de incrustaciones apto y escalable. Esta cimentación simplifica varios casos de uso, incluidos motores de recomendación, chatbots personalizados y sistemas de detección de fraude.
La integración de OpenSearch Ingestion, Lambda y OpenSearch Serverless crea una canalización totalmente sin servidor para integrar la gestación y la búsqueda. Esta combinación ofrece escalamiento instintivo para adaptarse a las demandas de la carga de trabajo y un maniquí basado en el uso. Las operaciones se simplifican porque AWS administra la infraestructura, las actualizaciones y el mantenimiento. Este enfoque sin servidor le permite centrarse en desarrollar soluciones de búsqueda y examen en ocupación de administrar la infraestructura.
Tenga en cuenta que Amazon OpenSearch Service además proporciona Búsqueda neuronal que transforma el texto en vectores y facilita la búsqueda de vectores tanto en el momento de la ingesta como en el momento de la búsqueda. Durante la ingestión, la búsqueda neuronal transforma el texto del documento en incrustaciones de vectores e indexa tanto el texto como sus incrustaciones de vectores en un índice de vectores. La búsqueda neuronal es acondicionado para clústeres administrados que ejecutan la traducción 2.9 y superior.
Descripción genérico de la posibilidad
Esta posibilidad crea incrustaciones en un conjunto de datos almacenado en Servicio de almacenamiento simple de Amazon (Amazon S3). Usamos la función Lambda para invocar el maniquí Amazon Titan en la carga útil entregada por OpenSearch Ingestion.
Requisitos previos
Debe tener un rol adecuado con permisos para invocar su función Lambda y el maniquí de Amazon Bedrock y además escribir en la colección OpenSearch Serverless.
Para proporcionar camino a la colección, debe configurar un Administración de camino e identidad de AWS (IAM) rol de canalización con una política de permisos que otorga camino a la colección. Para más detalles, ver Conceder camino a las colecciones a las canalizaciones de ingesta de Amazon OpenSearch. El futuro es un código de ejemplo:
{
"Version": "2012-10-17",
"Statement": (
{
"Sid": "allowinvokeFunction",
"Effect": "Allow",
"Action": (
"lambda:InvokeFunction"
),
"Resource": "arn:aws:lambda:{{region}}:{{account-id}}:function:{{function-name}}"
}
)
}
El rol debe tener la futuro relación de confianza, que permite a OpenSearch Ingestion asumirlo:
{
"Version": "2012-10-17",
"Statement": (
{
"Effect": "Allow",
"Principal": {
"Service": "osis-pipelines.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
)
}
Crear una canalización de ingesta
Puede crear una tubería utilizando un plano. Para esta publicación, seleccionamos el Beneficio personalizado de AWS Lambda cianotipo.
Usamos el Conjunto de datos básicos del título de IMDBque contiene información de la película, incluyendo originalTitle
, runtimeMinutes
y géneros.
La canalización de OpenSearch Ingestion utiliza un procesador Lambda para crear incrustaciones para el campo. original_title
y acumular las incrustaciones como original_title_embeddings
adjunto con otros datos.
Consulte el futuro código de canalización:
Echemos un vistazo más de cerca al procesador Lambda en el proceso de ingestión. Preste atención a key_name
parámetro. Puede designar cualquier valía para key_name y su función Lambda deberá hacer narración a esta secreto en su función Lambda al procesar la carga útil de OpenSearch Ingestion. El tamaño de la carga útil está determinado por la configuración del división. Cuando el procesamiento por lotes está preparado en el procesador Lambda, OpenSearch Ingestion agrupa varios eventos en una única carga útil ayer de invocar la función Lambda. Se envía un división a Lambda cuando se alcanza cualquiera de los siguientes umbrales:
-
- recuento_eventos – El número de eventos alcanza el techo especificado.
-
- tamaño_máximo – El tamaño total del división alcanza el tamaño especificado (por ejemplo, 5 MB) y es configurable hasta 6 MB (techo de carga útil de invocación para AWS Lambda)
función lambda
La función Lambda recibe los datos de OpenSearch Ingestion, invoca a Amazon Bedrock para ocasionar la incrustación y los agrega al registro de origen. “documents
”se utiliza para hacer narración a los eventos provenientes de OpenSearch Ingestion y coincide con el key_name
claro en tramitación. Agregamos la incrustación de Amazon Bedrock nuevamente al registro innovador. Este nuevo registro con el valía de incrustación adjunto se envía luego al receptor de OpenSearch Serverless mediante OpenSearch Ingestion. Vea el futuro código:
import json
import boto3
import os
# Initialize Bedrock client
bedrock = boto3.client('bedrock-runtime')
def generate_embedding(text):
"""Generate embedding for the given text using Bedrock."""
response = bedrock.invoke_model(
modelId="amazon.titan-embed-text-v1",
contentType="application/json",
accept="application/json",
body=json.dumps({"inputText": text})
)
embedding = json.loads(response('body').read())('embedding')
return embedding
def lambda_handler(event, context):
# Assuming the input is a list of JSON documents
documents = event('documents')
processed_documents = ()
for doc in documents:
if originalTitle' in doc:
# Generate embedding for the 'originalTitle' field
embedding = generate_embedding(doc(originalTitle'))
# Add the embedding to the document
doc('originalTitle_embeddings') = embedding
processed_documents.append(doc)
# Return the processed documents
return processed_documents
En caso de alguna excepción al usar el procesador lambda, todos los documentos del división se consideran eventos fallidos y se reenvían a la futuro prisión de procesadores, si corresponde, o al receptor con una marbete fallida. La marbete se puede configurar en la tubería con el tags_on_failure
parámetro y los errores además se envían a los registros de CloudWatch para tomar medidas adicionales.
Posteriormente de ejecutar la canalización, puede ver que las incrustaciones se crearon y almacenaron como originalTitle_embeddings
interiormente del documento en un índice k-NN, imdb-data-embeddings
. La futuro captura de pantalla muestra un ejemplo.
Recopilación
En esta publicación, mostramos cómo puede utilizar Lambda como parte de su proceso de ingesta de OpenSearch para permitir una transformación compleja y el ganancia de sus datos. Para obtener más detalles sobre la función, consulte Uso de una canalización de ingesta de OpenSearch con AWS Lambda.
Acerca de los autores
Jagadish Kumar (Jag) es un arquitecto senior de soluciones especializado en AWS centrado en Amazon OpenSearch Service. Es un apasionado de la cimentación de datos y ayuda a los clientes a crear soluciones de examen a escalera en AWS.
Sam Selván es arquitecto de soluciones principal especializado en Amazon OpenSearch Service.
Srikanth Govindarajan es ingeniero de incremento de software en Amazon Opensearch Service. A Srikanth le apasiona diseñar infraestructura y crear soluciones escalables para casos de uso basados en búsqueda, examen, seguridad, inteligencia sintético y estudios instintivo.