Passer au contenu

Comment puis-je mettre à niveau boto3 et botocore dans Lambda pour accéder aux nouveaux modèles d'IA ?

Lecture de 3 minute(s)
0

Je souhaite installer la dernière version de boto3 et DE botocore dans AWS Lambda pour accéder aux derniers modèles d'IA dans Amazon Bedrock.

Brève description

Si vous utilisez une fonction Lambda avec Python pour invoquer un modèle Amazon Bedrock, le message d'erreur « Error: "errorMessage": "Unknown service: 'bedrock' » peut s’afficher. Pour résoudre ce problème, mettez à niveau les bibliothèques boto3 et botocore vers les dernières versions de Lambda.

Remarque : Lorsque vous utilisez les modèles de fondation Amazon Bedrock, vous devez respecter les ](https://aws.amazon.com/bedrock/pricing/)conditions tarifaires du vendeur[.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI. Les commandes de l'interface de ligne de commande AWS suivantes fonctionnent pour les systèmes d'exploitation Linux, Unix et macOS.

Prérequis : Assurez-vous de pouvoir accéder aux modèles de fondation Amazon Bedrock.

Pour mettre à niveau boto3 et botocore, procédez comme suit :

  1. Exécutez la commande suivante pour créer un dossier temporaire :

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

    Remarque : Remplacez boto3-mylayer par le nom de votre dossier temporaire.

  2. Exécutez la commande suivante pour installer la bibliothèque boto3 dans LIB_DIR :

    pip3 install boto3==1.42.44 -t $LIB_DIR
    pip3 install botocore==1.42.44 -t $LIB_DIR
  3. Exécutez la commande suivante pour compresser toutes les dépendances dans /tmp/boto3-mylayer.zip :

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

    Remarque : Remplacez boto3-mylayer par le nom de votre dossier temporaire.

  4. Pour publier la couche, exécutez la commande publish-layer-version de l’AWS CLI suivante :

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

    Remarque : Remplacez layer-name par le nom de votre couche Lambda et boto3-mylayer par le nom de votre dossier temporaire. Dans la sortie, notez l’Amazon Resource Name (ARN) de la couche.

  5. Créez une fonction Lambda.

  6. Pour attacher la couche que vous avez créée à la fonction Lambda, exécutez la commande update-function-configuration suivante :

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

    Remarque : Remplacez layer_ARN par l’ARN de la couche. Pour plus d'informations, consultez la section Ajout de couches aux fonctions.

  7. Pour tester votre mise à jour, exécutez le code suivant pour invoquer Anthropic Claude Opus 4.6 :

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

    Remarque : Remplacez region_name par votre région AWS et endpoint_url par le point de terminaison pour Amazon Bedrock.