Zephyrnet-logo

Schaal automatisch Amazon Kendra-querycapaciteitseenheden met Amazon EventBridge en AWS Lambda

Datum:

Gegevens verspreiden zich binnen de onderneming en werknemers gebruiken meer applicaties dan ooit tevoren om hun werk te doen. Volgens Okta Inc. is het aantal software-apps dat door grote bedrijven in alle bedrijfstakken over de hele wereld wordt ingezet zelfs verhoogde 68%, waarmee een gemiddelde van 129 apps per bedrijf wordt bereikt.

Naarmate werknemers zichzelf blijven bedienen en het aantal applicaties dat zij gebruiken groeit, zal ook de kans toenemen dat kritische bedrijfsinformatie moeilijk te vinden blijft of verloren gaat tussen systemen, wat een negatieve invloed heeft op de productiviteit van het personeel en de bedrijfskosten.

Amazon Kendra is een intelligente zoekservice, mogelijk gemaakt door machine learning (ML). In tegenstelling tot conventionele zoektechnologieën herinterpreteert Amazon Kendra het zoeken door ongestructureerde gegevens uit meerdere gegevensbronnen te verenigen als onderdeel van één doorzoekbare index. Dankzij de mogelijkheden voor diepgaand leren en natuurlijke taalverwerking kunt u gemakkelijk relevante antwoorden krijgen wanneer u ze nodig heeft.

Amazon Kendra Enterprise Edition bevat opslagcapaciteit voor 500,000 documenten (150 GB opslag) en een querycapaciteit van 40,000 queries per dag (0.5 queries per seconde), en stelt je in staat om indexcapaciteit aanpassen door uw query- en opslagcapaciteitseenheden indien nodig te vergroten of verkleinen.

Gebruikspatronen en zakelijke behoeften zijn echter niet altijd voorspelbaar. In dit bericht laten we zien hoe u uw Amazon Kendra-index automatisch kunt schalen op basis van een tijdschema met behulp van Amazon EventBridge en AWS Lambda. Door dit te doen kunt u de capaciteit voor piekgebruik vergroten, servicebeperkingen voorkomen, de flexibiliteit behouden en de kosten onder controle houden.

Overzicht oplossingen

Amazon Kendra biedt een dashboard waarmee u het gemiddelde aantal zoekopdrachten per seconde voor uw index kunt evalueren. Met deze informatie kunt u een schatting maken van het aantal extra capaciteitseenheden dat uw werklast op een bepaald tijdstip nodig heeft.

Uit de volgende grafiek blijkt bijvoorbeeld dat er tijdens kantooruren een stijging optreedt in het gemiddelde aantal zoekopdrachten per seconde, maar dat na kantooruren het aantal zoekopdrachten afneemt. We baseren onze oplossing op dit patroon om een ​​geplande EventBridge-gebeurtenis op te zetten die de automatische schalings-Lambda-functie activeert.

Het volgende diagram illustreert onze architectuur.

U kunt de oplossing op twee verschillende manieren in uw account implementeren:

  • Implementeer een AWS serverloos toepassingsmodel (AWS SAM)-sjabloon:
    • Kloon het project vanuit de aws-monsters repository op GitHub en volg de instructies.
  • Maak de bronnen met behulp van de AWS-beheerconsole. In dit bericht leiden we je door de volgende stappen:
    • Stel de Lambda-functie in voor schaling
    • Configureer machtigingen voor de functie
    • Test de functie
    • Stel een geplande EventBridge-gebeurtenis in

Stel de Lambda-functie in

Om de Lambda-functie te maken die we gebruiken voor het schalen, maken we een functie met behulp van de Python-runtime (voor dit bericht gebruiken we de Python 3.8-runtime).

Gebruik de volgende code als de inhoud van uw lambda_function.py code:

#
# 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)

U moet de volgende variabelen aanpassen aan uw omgeving:

# 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

  • INDEX_ID – Het ID van uw index; je kunt het controleren op de Amazon Kendra-console.
  • DEFAULT_UNITS – Het aantal queryverwerkingseenheden dat uw Amazon Kendra Enterprise Edition nodig heeft om op minimale capaciteit te werken. Dit aantal kan variëren van 0 tot 20 (u kunt meer capaciteit aanvragen). 0 betekent dat er geen extra capaciteitseenheden zijn ingericht voor uw Amazon Kendra Enterprise Edition-index, waardoor deze een standaardcapaciteit van 0.5 zoekopdrachten per seconde heeft.
  • AANVULLENDE EENHEDEN – Het aantal querycapaciteitseenheden dat u nodig heeft op de momenten dat er extra capaciteit nodig is. Deze waarde kan variëren van 1–20 (u kunt extra capaciteit aanvragen).

Configureer functierechten

Om de status van uw index op te vragen en het aantal querycapaciteitseenheden te wijzigen, moet u een beleid aan uw Lambda-functie koppelen AWS Identiteits- en toegangsbeheer (IAM) uitvoeringsrol met deze machtigingen.

  1. Navigeer op de Lambda-console naar uw functie.
  2. Op de machtigingen tabblad, kies de uitvoeringsrol.

De IAM-console wordt automatisch geopend.

  1. Op de machtigingen tabblad, kies Voeg beleid toe.

  1. Kies Maak beleid.

Er wordt een nieuw tabblad geopend.

  1. Op de JSON tabblad, voeg de volgende inhoud toe (zorg ervoor dat u uw account- en gebruikersgegevens opgeeft):
{ "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. Kies Volgende: Tags.
  2. Kies Volgende: Review.
  3. Voor Naam, voer een beleidsnaam in (voor dit bericht gebruiken we AmazonKendra_UpdateIndex).
  4. Kies Maak beleid.
  5. Op de Machtigingen bijvoegen pagina, kies het vernieuwingspictogram.
  6. Filter om het beleid te vinden dat u heeft gemaakt.
  7. Selecteer het beleid en kies Beleid bijvoegen.

Test de functie

U kunt uw Lambda-functie testen door een testgebeurtenis uit te voeren. Voor meer informatie, zie Roep de Lambda-functie op.

  1. Navigeer op de Lambda-console naar uw functie.
  2. Maak een nieuwe testgebeurtenis door te kiezen test.

  1. kies Maak een nieuw testevenement.
  2. Voor Evenement sjabloon, omdat uw functie geen invoer van de gebeurtenis vereist, kunt u de hello-world evenement sjabloon.

  1. Kies creëren.
  2. Kies test.

Op de Lambda-functielogboeken kunt u de volgende berichten zien:

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...

Stel een geplande EventBridge-gebeurtenis in

Een geplande EventBridge-gebeurtenis is een EventBridge-gebeurtenis die volgens een regelmatig schema wordt geactiveerd. In deze sectie wordt uitgelegd hoe u een geplande EventBridge-gebeurtenis kunt maken die elke dag om 7 uur UTC en om 8 uur UTC plaatsvindt om de kendra-index-scaler Lambda-functie. Hierdoor kan uw index om 7 uur omhoog schalen met de extra querycapaciteitseenheden en om 8 uur omlaag schalen.

Wanneer u geplande EventBridge-evenementen instelt, doet u dit voor de UTC-tijdzone, dus u moet de tijdsafwijking berekenen. Als u de gebeurtenis bijvoorbeeld om 7 uur Central Standard Time (CST) wilt laten plaatsvinden, moet u de tijd instellen op 1 uur UTC. Als u rekening wilt houden met zomertijd, moet u een andere regel maken om rekening te houden met het verschil.

  1. Op de EventBridge-console, in het navigatievenster, onder Evenementen, kiezen Reglement.
  2. Kies Creëer regel.

  1. Voor Naam, voer een naam in voor uw regel (voor dit bericht gebruiken we kendra-index-scaler).

  1. In het Definieer patroon sectie, selecteer Plan.
  2. kies Cron-expressie en ga naar binnen 0 7,20 * * ? *.

We gebruiken dit cron-expressie om het EventBridge-evenement elke dag om 7 uur en 8 uur te activeren.

  1. In het Selecteer evenementenbus sectie, selecteer AWS standaard gebeurtenisbus.

  1. In het Selecteer doelen sectie, voor doelwit, kiezen Lambda-functie.
  2. Voor Functie, voer de functie in die u eerder hebt gemaakt (lambda_function_kendra_index_handler).

  1. Kies creëren.

U kunt controleren Amazon CloudWatch-logboeken voor de lambda_function_kendra_index_handler functioneren en zien hoe deze zich gedraagt, afhankelijk van de eenheden van de querycapaciteit van uw index.

Conclusie

In dit bericht heb je een mechanisme geïmplementeerd om automatisch extra queryverwerkingseenheden te schalen voor je Amazon Kendra Enterprise Edition-index.

Als volgende stap kunt u periodiek uw gebruikspatronen bekijken om de planning zo te plannen dat deze aansluit bij uw vraagvolume. Ga voor meer informatie over de gebruiksscenario's en voordelen van Amazon Kendra en hoe u ermee aan de slag kunt gaan naar de webpagina!


Over de auteurs

Juan Bustos is een AI Services Specialist Solutions Architect bij Amazon Web Services, gevestigd in Dallas, TX. Buiten zijn werk brengt hij graag tijd door met schrijven en muziek spelen, maar ook in willekeurige restaurants met zijn gezin.

Tapodipta Ghosh is senior architect. Hij leidt het Content And Knowledge Engineering Machine Learning-team dat zich richt op het bouwen van modellen gerelateerd aan AWS Technical Content. Hij helpt onze klanten ook met AI/ML-strategie en -implementatie met behulp van onze AI Language-diensten zoals Amazon Kendra.

Tom McMahon is een Product Marketing Manager bij het AI Services-team bij AWS. Hij heeft een passie voor technologie en verhalen vertellen en heeft tijd doorgebracht in een breed scala van sectoren, waaronder de gezondheidszorg, detailhandel, logistiek en e-commerce. In zijn vrije tijd brengt hij graag tijd door met familie, muziek, golfen en het verkennen van het verbazingwekkende noordwesten van de Stille Oceaan en zijn omgeving.

Coinsmart. Beste Bitcoin-beurs in Europa
Bron: https://aws.amazon.com/blogs/machine-learning/automatically-scale-amazon-kendra-query-capacity-units-with-amazon-eventbridge-and-aws-lambda/

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?