跳至內容

如何升級 Lambda 中的 boto3 和 botocore,以存取較新版的 AI 模型?

2 分的閱讀內容
0

我想在 AWS Lambda 中安裝最新版 boto3 和 botocore,以存取 Amazon Bedrock 中最新的 AI 模型。

簡短說明

如果您搭配使用 Python 與 Lambda 函式,來調用 Amazon Bedrock 模型,則可能會收到 "Error: "errorMessage": "Unknown service: 'bedrock'" 錯誤訊息。若要解決此問題,請將 Lambda 中的 boto3 和 botocore 程式庫升級為最新版本。

**注意:**使用 Amazon Bedrock 基礎模型時,必須遵守賣方的定價條款

解決方法

**注意:**如果您在執行 AWS Command Line Interface (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 Resource Name (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 的端點。