スキップしてコンテンツを表示

新しい AI モデルにアクセスするために、Lambda で boto3 と botocore をアップグレードする方法を教えてください。

所要時間2分
0

AWS Lambda で boto3 と botocore の最新バージョンをインストールし、Amazon Bedrock の最新の AI モデルにアクセスしたいです。

簡単な説明

Python で Lambda 関数を使用して Amazon Bedrock モデルを呼び出すと、"Error: "errorMessage": "Unknown service: 'bedrock'" というエラーメッセージが表示されることがあります。この問題を解決するには、boto3 ライブラリと botocore ライブラリを Lambda の最新バージョンにアップグレードする必要があります。

注: Amazon Bedrock 基盤モデルを使用する場合、販売者の価格条件に従う必要があります。

解決策

注: AWS コマンドラインインターフェイス (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. レイヤーを発行するには、次の AWS CLI コマンド publish-layer-version を実行します。

    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 に置き換えてください。詳細については、「関数へのレイヤーの追加」を参照してください。

  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 のエンドポイントに置き換えてください。

AWS公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ