跳至内容

如何升级 Lambda 中的 boto3 和 botocore 以访问更新的 AI 模型?

2 分钟阅读
0

我想在 AWS Lambda 中安装最新版本的 boto3 和 botocore,以便在 Amazon Bedrock 中访问最新的 AI 模型。

简短描述

如果您使用 Lambda 函数的 Python 版本来调用 Amazon Bedrock 模型,则可能会收到“Error: "errorMessage": "Unknown service: 'bedrock'”错误消息。要解决此问题,请将 boto3 和 botocore 库升级到 Lambda 中的最新版本。

**注意:**当您使用 Amazon Bedrock 基础模型时,您必须遵守卖方的定价条款

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 Troubleshooting errors for the AWS CLI(AWS CLI 错误故障排除)。此外,请确保您使用的是最新版本的 AWS CLI。以下 AWS CLI 命令适用于 Linux、Unix 和 macOS 操作系统。

**先决条件:**确保您可以访问 Amazon Bedrock 基础模型

要升级 boto3 和 botocore,请完成以下步骤:

  1. 运行以下命令,创建临时文件夹:

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

    **注意:**将 boto3-mylayer 替换为您的临时文件夹名称。

  2. 运行以下命令,将 boto3 库安装到 LIB\ _DIR

    pip3 install boto3==1.42.44 -t $LIB_DIR
    pip3 install botocore==1.42.44 -t $LIB_DIR
  3. 运行以下命令,将所有依赖项压缩到 /tmp/boto3-mylayer.zip

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

    **注意:**将 boto3-mylayer 替换为您的临时文件夹名称。

  4. 要发布该层,请运行以下 publish-layer-version AWS CLI 命令:

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

    **注意:**将 layer-name 替换为您的 Lambda 层名称,将 boto3-mylayer 替换为您的临时文件夹名称。在输出中,记下该层的 Amazon 资源名称 (ARN)。

  5. 创建 Lambda 函数

  6. 要将您创建的层附加到 Lambda 函数,请运行以下 update-function-configuration 命令:

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

    **注意:**将 layer_ARN 替换为层 ARN。有关详细信息,请参阅 Adding layers to functions(向函数添加层)。

  7. 要测试您的更新,请运行以下代码来调用 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)}

    **注意:**将 region_name 替换为您的 AWS 区域,将 endpoint_url 替换为 Amazon Bedrock 的端点。