Ir para o conteúdo

Como faço para atualizar o boto3 e o botocore no Lambda para acessar modelos de IA mais novos?

3 minuto de leitura
0

Quero instalar a versão mais recente do boto3 e do botocore no AWS Lambda para acessar os modelos de IA mais recentes no Amazon Bedrock.

Breve descrição

Se você usar uma função do Lambda com Python para invocar um modelo do Amazon Bedrock, poderá receber a mensagem de erro “Error: “errorMessage”: "Unknown service: 'bedrock'". Para resolver esse problema, atualize as bibliotecas boto3 e botocore para as versões mais recentes no Lambda.

Observação: ao usar os modelos básicos do Amazon Bedrock, você deve cumprir os termos de preços do vendedor.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI. Os seguintes comandos da AWS CLI funcionam para sistemas operacionais Linux, Unix e macOS.

Pré-requisito: certifique-se de que você possa acessar os modelos básicos do Amazon Bedrock.

Para atualizar o boto3 e o botocore, conclua as seguintes etapas:

  1. Execute o comando a seguir para criar uma pasta temporária:

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

    Observação: substitua boto3-mylayer pelo nome da sua pasta temporária.

  2. Execute o comando a seguir para instalar a biblioteca boto3 em LIB_DIR:

    pip3 install boto3==1.42.44 -t $LIB_DIR
    pip3 install botocore==1.42.44 -t $LIB_DIR
  3. Execute o comando a seguir para compactar todas as dependências em /tmp/boto3-mylayer.zip:

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

    Observação: substitua boto3-mylayer pelo nome da sua pasta temporária.

  4. Para publicar a camada, execute o seguinte comando publish-layer-version da AWS CLI:

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

    Observação: substitua layer-name pelo nome da camada do Lambda e boto3-mylayer pelo nome da pasta temporária. Na saída, anote o nome do recurso da Amazon (ARN) da camada.

  5. Crie uma função do Lambda.

  6. Para anexar a camada que você criou à função do Lambda, execute o seguinte comando update-function-configuration:

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

    Observação: substitua layer_ARN pelo ARN da camada. Para obter mais informações, consulte Adicionar camadas às funções.

  7. Para testar sua atualização, execute o código a seguir para invocar o 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)}

    Observação: substitua region_name pela sua região da AWS e endpoint_url pelo endpoint do Amazon Bedrock.