Logotipo de Zephyrnet

Escale automáticamente las unidades de capacidad de consulta de Amazon Kendra con Amazon EventBridge y AWS Lambda

Fecha:

Los datos están proliferando dentro de la empresa y los empleados están utilizando más aplicaciones que nunca para realizar su trabajo; de hecho, según Okta Inc., la cantidad de aplicaciones de software implementadas por grandes empresas en todas las industrias en todo el mundo ha aumentado. aumento 68%, alcanzando una media de 129 aplicaciones por empresa.

A medida que los empleados continúen haciendo autoservicio y aumente la cantidad de aplicaciones que utilizan, también aumentará la probabilidad de que la información empresarial crítica siga siendo difícil de encontrar o se pierda entre los sistemas, lo que afectará negativamente la productividad de la fuerza laboral y los costos operativos.

amazona kendra es un servicio de búsqueda inteligente impulsado por aprendizaje automático (ML). A diferencia de las tecnologías de búsqueda convencionales, Amazon Kendra reinventa la búsqueda al unificar datos no estructurados en múltiples fuentes de datos como parte de un único índice de búsqueda. Sus capacidades de procesamiento de lenguaje natural y aprendizaje profundo le facilitan la obtención de respuestas relevantes cuando las necesite.

Amazon Kendra Enterprise Edition incluye capacidad de almacenamiento para 500,000 documentos (150 GB de almacenamiento) y una capacidad de consulta de 40,000 consultas por día (0.5 consultas por segundo), y le permite ajustar la capacidad del índice aumentando o disminuyendo su consulta y las unidades de capacidad de almacenamiento según sea necesario.

Sin embargo, los patrones de uso y las necesidades comerciales no siempre son predecibles. En esta publicación, demostraremos cómo puede escalar automáticamente su índice de Amazon Kendra en función de un cronograma utilizando Puente de eventos de Amazon y AWS Lambda. Al hacer esto, puede aumentar la capacidad para el uso máximo, evitar la limitación del servicio, mantener la flexibilidad y controlar los costos.

Resumen de la solución

Amazon Kendra proporciona un panel que le permite evaluar la cantidad promedio de consultas por segundo para su índice. Con esta información, puede estimar la cantidad de unidades de capacidad adicionales que requiere su carga de trabajo en un momento específico.

Por ejemplo, el siguiente gráfico muestra que durante el horario comercial, se produce un aumento en el promedio de consultas por segundo, pero después del horario laboral, la cantidad de consultas se reduce. Basamos nuestra solución en este patrón para configurar un evento programado de EventBridge que activa la función Lambda de escalado automático.

El siguiente diagrama ilustra nuestra arquitectura.

Puede implementar la solución en su cuenta de dos formas diferentes:

  • Implementar un Modelo de aplicación sin servidor de AWS (AWS SAM) plantilla:
    • Clone el proyecto desde el aws-muestras repositorio en GitHub y siga las instrucciones.
  • Cree los recursos utilizando el Consola de administración de AWS. En esta publicación, lo guiamos a través de los siguientes pasos:
    • Configurar la función Lambda para escalar
    • Configurar permisos para la función
    • Prueba la función
    • Configurar un evento programado de EventBridge

Configurar la función Lambda

Para crear la función Lambda que usamos para escalar, creamos una función usando el tiempo de ejecución de Python (para esta publicación, usamos el tiempo de ejecución de Python 3.8).

Utilice el siguiente código como contenido de su lambda_function.py código:

#
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# # Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# ''' Changes the number of Amazon Kendra Enterprise Edition index capacity units Parameters ---------- event : dict Lambda event Returns ------- The additional capacity action or an error ''' import json
import boto3
from botocore.exceptions import ClientError # Variable declaration
KENDRA = boto3.client("kendra")
# Define your Amazon Kendra Enterprise Edition index ID
INDEX_ID = "<YOUR-INDEX-ID>"
# Define your baseline units
DEFAULT_UNITS = 0
# Define your the number of Query Capacity Units needed for increased capacity
ADDITIONAL_UNITS= 1 def add_capacity(INDEX_ID,capacity_units): try: response = KENDRA.update_index( Id=INDEX_ID, CapacityUnits={ 'QueryCapacityUnits': int(capacity_units), 'StorageCapacityUnits': 0 }) return(response) except Exception as e: raise e def reset_capacity(INDEX_ID,DEFAULT_UNITS): try: response = KENDRA.update_index( Id=INDEX_ID, CapacityUnits={ 'QueryCapacityUnits': DEFAULT_UNITS, 'StorageCapacityUnits': 0 }) except Exception as e: raise e def current_capacity(INDEX_ID): try: response = KENDRA.describe_index( Id=INDEX_ID) return(response) except Exception as e: raise e def lambda_handler(event,context): print("Checking for query capacity units......") response = current_capacity(INDEX_ID) currentunits = response['CapacityUnits']['QueryCapacityUnits'] print ("Current query capacity units are: "+str(currentunits)) status = response['Status'] print ("Current index status is: "+status) # If index is stuck in UPDATE state, don't attempt changing the capacity if status == "UPDATING": return ("Index is currently being updated. No changes have been applied") if status == "ACTIVE": if currentunits == 0: print ("Adding query capacity...") response = add_capacity(INDEX_ID,ADDITIONAL_UNITS) print(response) return response else: print ("Removing query capacity....") response = reset_capacity(INDEX_ID, DEFAULT_UNITS) print(response) return response else: response = "Index is not ready to modify capacity. No changes have been applied." return(response)

Debe modificar las siguientes variables para que coincidan con su entorno:

# Define your Amazon Kendra Enterprise Edition index ID
INDEX_ID = "<YOUR-INDEX-ID>"
# Define your baseline units
DEFAULT_UNITS = 1
# Define your the number of Query Capacity Units needed for increased capacity
ADDITIONAL_UNITS = 4

  • ÍNDICE_ID - El ID de su índice; puede comprobarlo en la consola de Amazon Kendra.
  • UNIDADES_DEFAULT - La cantidad de unidades de procesamiento de consultas que su Amazon Kendra Enterprise Edition requiere para operar a la capacidad mínima. Este número puede oscilar entre 0 y 20 (puede solicitar más capacidad). 0 representa que no se aprovisionan unidades de capacidad adicional a su índice de Amazon Kendra Enterprise Edition, lo que lo deja con una capacidad predeterminada de 0.5 consultas por segundo.
  • UNIDADES_ADICIONALES - La cantidad de unidades de capacidad de consulta que necesita en aquellos momentos en los que se requiere capacidad adicional. Este valor puede oscilar entre 1 y 20 (puede solicitar capacidad adicional).

Configurar permisos de función

Para consultar el estado de su índice y modificar el número de unidades de capacidad de consulta, debe adjuntar una política a su función Lambda Gestión de identidades y accesos de AWS (IAM) función de ejecución con esos permisos.

  1. En la consola de Lambda, navegue hasta su función.
  2. En Permisos pestaña, elija el rol de ejecución.

La consola de IAM se abre automáticamente.

  1. En Permisos pestaña, elegir Adjuntar políticas.

  1. Elige Crear política.

Se abre una nueva pestaña.

  1. En JSON pestaña, agregue el siguiente contenido (asegúrese de proporcionar su cuenta y la información de usuario):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MyPolicy", "Effect": "Allow", "Action": [ "kendra:UpdateIndex", "kendra:DescribeIndex" ], "Resource": "arn:aws:kendra:<YOUR-AWS-REGION>:<YOUR-ACCOUNT-ID>:index/<YOUR-INDEX-ID>" } ]
}

  1. Elige Siguiente: Etiquetas.
  2. Elige Siguiente: Revisión.
  3. Nombre, ingrese un nombre de política (para esta publicación, usamos AmazonKendra_UpdateIndex).
  4. Elige Crear política.
  5. En Adjuntar permisos página, elija el icono de actualización.
  6. Filtre para encontrar la política que creó.
  7. Seleccione la política y elija Adjuntar política.

Prueba la función

Puede probar su función Lambda ejecutando un evento de prueba. Para más información, ver Invocar la función Lambda.

  1. En la consola de Lambda, navegue hasta su función.
  2. Cree un nuevo evento de prueba eligiendo Probar.

  1. Seleccione Crear nuevo evento de prueba.
  2. Plantilla de evento, debido a que su función no requiere ninguna entrada del evento, puede elegir el hello-world plantilla de evento.

  1. Elige Crear.
  2. Elige Probar.

En los registros de funciones de Lambda, puede ver los siguientes mensajes:

Function Logs
START RequestId: 9b2382b7-0229-4b2b-883e-ba0f6b149513 Version: $LATEST
Checking for capacity units......
Current capacity units are: 1
Current index status is: ACTIVE
Adding capacity...

Configurar un evento programado de EventBridge

Un evento programado de EventBridge es un evento de EventBridge que se activa con una programación regular. Esta sección muestra cómo crear un evento programado de EventBridge que se ejecute todos los días a las 7 a. M. UTC y a las 8 p. M. UTC para activar el kendra-index-scaler Función lambda. Esto permite que su índice se amplíe con las unidades de capacidad de consulta adicionales a las 7 a. M. Y se reduzca a las 8 p. M.

Cuando configura eventos programados de EventBridge, lo hace para la zona horaria UTC, por lo que debe calcular la diferencia horaria. Por ejemplo, para ejecutar el evento a las 7 a. M. Hora estándar central (CST), debe establecer la hora en 1 p. M. UTC. Si desea adaptarse al horario de verano, debe crear una regla diferente para tener en cuenta la diferencia.

  1. En la consola de EventBridge, en el panel de navegación, en Eventos, escoger Reglas.
  2. Elige Crear regla.

  1. Nombre, ingrese un nombre para su regla (para esta publicación, usamos kendra-index-scaler).

  1. En Definir patrón sección, seleccionar Horarios.
  2. Seleccione Expresión de cron e introduzca 0 7,20 * * ? *.

Usamos esto expresión cron para activar el evento EventBridge todos los días a las 7 a. m. y a las 8 p. m.

  1. En Seleccionar bus de eventos sección, seleccionar Bus de eventos predeterminado de AWS.

  1. En Seleccionar objetivos sección, para Target, escoger función lambda.
  2. Función, ingrese la función que creó anteriormente (lambda_function_kendra_index_handler).

  1. Elige Crear.

Puedes comprobar Registros de Amazon CloudWatch para lambda_function_kendra_index_handler función y ver cómo se comporta dependiendo de las unidades de capacidad de consulta de su índice.

Conclusión

En esta publicación, implementó un mecanismo para escalar automáticamente unidades de procesamiento de consultas adicionales para su índice de Amazon Kendra Enterprise Edition.

Como siguiente paso, puede revisar periódicamente sus patrones de uso para planificar la programación que se adapte a su volumen de consultas. Para obtener más información sobre los casos de uso, los beneficios y cómo empezar a utilizar Amazon Kendra, visite la pagina web!


Acerca de los autores

Juan Busto es un arquitecto de soluciones especializado en servicios de inteligencia artificial en Amazon Web Services, con sede en Dallas, TX. Fuera del trabajo, le encanta pasar tiempo escribiendo y tocando música, además de probar restaurantes al azar con su familia.

Tapodipta Ghosh es un arquitecto sénior. Dirige el equipo de aprendizaje automático de ingeniería del conocimiento y el contenido que se centra en la creación de modelos relacionados con el contenido técnico de AWS. También ayuda a nuestros clientes con la estrategia e implementación de AI / ML utilizando nuestros servicios de AI Language como Amazon Kendra.

tom mc mahon es gerente de marketing de productos en el equipo de servicios de inteligencia artificial de AWS. Es un apasionado de la tecnología y la narración de historias y ha pasado tiempo en una amplia gama de industrias, incluida la salud, el comercio minorista, la logística y el comercio electrónico. En su tiempo libre le gusta pasar tiempo con la familia, la música, jugar al golf y explorar el increíble noroeste del Pacífico y sus alrededores.

Coinsmart. Mejor Bitcoin-Börse en Europa
Fuente: https://aws.amazon.com/blogs/machine-learning/automatically-scale-amazon-kendra-query-capacity-units-with-amazon-eventbridge-and-aws-lambda/

punto_img

Información más reciente

punto_img