Direkt zum Inhalt

Wie aktualisiere ich „boto3“ und „botocore“ in Lambda, um auf neuere KI-Modelle zuzugreifen?

Lesedauer: 3 Minute
0

Ich möchte die neueste Version von „boto3“ und „botocore“ in AWS Lambda installieren, um auf die neuesten KI-Modelle in Amazon Bedrock zuzugreifen.

Kurzbeschreibung

Wenn du eine Lambda-Funktion mit Python verwendest, um ein Amazon-Bedrock-Modell aufzurufen, erhältst du möglicherweise folgende Fehlermeldung „Error: "errorMessage": "Unknown service: 'bedrock'“. Um dieses Problem zu beheben, aktualisiere die Bibliotheken „boto3“ und „botocore“ in Lambda auf die neuesten Versionen.

Hinweis: Wenn du Modelle von Amazon Bedrock Foundation verwendest, musst du die Preisbedingungen des Verkäufers einhalten.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Troubleshooting errors for the AWS CLI (Problembehandlung bei der AWS CLI). Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest. Die folgenden AWS-CLI-Befehle funktionieren für Linux-, Unix- und macOS-Betriebssysteme.

Voraussetzung: Stelle sicher, dass du auf die Modelle von Amazon Bedrock Foundation zugreifen kannst.

Führe die folgenden Schritte aus, um boto3 und botocore zu aktualisieren:

  1. Führe den folgenden Befehl aus, um einen temporären Ordner zu erstellen:

    LIB_DIR=boto3-mylayer/python
    mkdir -p $LIB_DIR

    Hinweis: Ersetze boto3-mylayer durch den Namen des temporären Ordners.

  2. Führe den folgenden Befehl aus, um die boto3-Bibliothek in LIB_DIR zu installieren:

    pip3 install boto3==1.42.44 -t $LIB_DIR
    pip3 install botocore==1.42.44 -t $LIB_DIR
  3. Führe den folgenden Befehl aus, um alle Abhängigkeiten in /tmp/boto3-mylayer.zip zu komprimieren:

    cd boto3-mylayer
    zip -r /tmp/boto3-mylayer.zip .

    Hinweis: Ersetze boto3-mylayer durch den Namen des temporären Ordners.

  4. Um den Layer zu veröffentlichen, führe den AWS-CLI-Befehl publish-layer-version aus:

    aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

    Hinweis: Ersetze layer-name durch den Namen des Lambda-Layers und boto3-mylayer durch den Namen des temporären Ordners. Notiere dir in der Ausgabe den Amazon Resource Name (ARN) des Layers.

  5. Erstelle eine Lambda-Funktion.

  6. Um den von dir erstellten Layer an die Lambda-Funktion anzuhängen, führe den Befehl update-function-configuration aus:

    aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN

    Hinweis: Ersetze layer_ARN durch den Layer-ARN. Weitere Informationen findest du unter Adding layers to functions (Hinzufügen von Layern zu Funktionen).

  7. Führe den folgenden Code aus, um das Update zu testen und Anthropic Claude Opus 4.6 aufzurufen:

    import boto3
    import botocore
    import json
    
    def lambda_handler(event, context):
      print("Boto3 version:", boto3.__version__)
      print("Botocore version:", botocore.__version__)
      bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1', endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')
    
      # event = {
      #       "anthropic_version": "bedrock-2023-05-31",
      #       "max_tokens": 4000,
      #       "top_k": 250,
      #       "top_p": 1,
      #       "messages": [
      #           {
      #               "role": "user",
      #               "content": "Why is the sky blue?"
      #           }
      #       ],
      #       "stop_sequences": ["Command:"]
      #   }
      print(f"EVENT: {event}")
      bedrock_str = json.dumps(event)
      print(f"BEDROCK_STR: {bedrock_str}")
      modelId = 'global.anthropic.claude-opus-4-5-20251101-v1:0'
    
      bodyprompt = {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 4000,
            "top_k": 250,
            "top_p": 1,
            "messages": [
                {
                    "role": "user",
                    "content": "Why is the sky blue?"
                }
            ],
            "stop_sequences": ["Command:"]
        }
      response = bedrock_runtime.invoke_model(body=bedrock_str, modelId=modelId, accept='application/json', contentType='application/json')
    #   response = bedrock_runtime.invoke_model(body= json.dumps(bodyprompt), modelId=modelId, accept='application/json', contentType='application/json')
      response_body = json.loads(response.get('body').read())
      print(response_body)
    
      return {'statusCode': 200, 'body': json.dumps(response_body)}

    Hinweis: Ersetze region_name durch deine AWS-Region und endpoint_url durch den Endpunkt für Amazon Bedrock.