0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LambdaでAmazon Bedrockを呼び出す

Posted at

はじめに

LambdaでBedrockを呼び出すだけのシンプルな構成を作ってみました。
構築の順序としては以下になります。

  1. IAMロールの作成
  2. Lambda関数の作成
  3. 動作確認

1. IAMロール作成

LambdaからBedrockを呼び出すためのIAMロールを作成します。
ロールには「AmazonBedrockFullAccess」のポリシーを付与します。

スクリーンショット 2026-01-23 16.59.22.png
スクリーンショット 2026-01-23 17.00.43.png

2. Lambda関数作成

以下の設定でLambda関数を作成します。

  • ランタイム:python 3.14
  • アーキテクチャ:x86_64
  • 実行ロール:既存のロールを使用する
    • 1.で作成したロールを指定

スクリーンショット 2026-01-23 17.01.37.png

Lambdaで実行されるコードはpythonで記述しております。
ここでは入力されたリクエストをBedrockに渡し、回答をレスポンスとして返します。

lambda_function.py
import json
import boto3

def lambda_handler(event, context):
    bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1')

    model_id = 'anthropic.claude-3-haiku-20240307-v1:0'
    system_prompt = "質問を入力してください"
    max_tokens = 1000

    user_message = {"role": "user", "content": event.get("message")}
    messages = [user_message]
    
    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "system": system_prompt,
            "messages": messages
        }  
    )  

    response = bedrock_runtime.invoke_model(body=body, modelId=model_id)
    response_body = json.loads(response.get('body').read())

    return {
        'statusCode': 200,
        'body': response_body
    }

3. 動作確認

Lambda関数で想定したレスポンスが返ってくるかを確認します。
Lambda関数作成後はデフォルトのタイムアウト設定(3秒)の場合、レスポンスが返る前にタイムアウトとなるため、30秒に変更しています。
スクリーンショット 2026-01-23 17.43.44.png

bedrockへのリクエスト
{
  "message": "1日は何秒ですか"
}
bedrockからのレスポンス
{
  "statusCode": 200,
  "body": {
    "id": "msg_bdrk_01BAx3687ANBfwauLvGZvPq3",
    "type": "message",
    "role": "assistant",
    "model": "claude-3-haiku-20240307",
    "content": [
      {
        "type": "text",
        "text": "1日は86,400秒です。\n\nこれは以下のように計算されます:\n\n- 1日 = 24時間\n- 1時間 = 60分\n- 1分 = 60秒\n- 24時間 × 60分 × 60秒 = 86,400秒\n\nつまり、1日は24時間、1時間は60分、1分は60秒なので、1日は24 × 60 × 60 = 86,400秒となります。\n\nこのように、1日が86,400秒であることは、時間の単位換算から導き出される基本的な事実です。"
      }
    ],
    "stop_reason": "end_turn",
    "stop_sequence": null,
    "usage": {
      "input_tokens": 24,
      "output_tokens": 171
    }
  }
}

「"1日は何秒ですか"」というリクエストに対して「86,400秒」と回答が返ってきており、LambdaがBedrockへリクエストし、レスポンスを受け取っていることが確認できました。ちなみにBedrockからは単純な秒数の結果だけでなく、計算方法についても返ってきています。

おわりに

LambdaでBedrockを呼び出してみました。今後はAPI Gatewayを用いてAPI経由での実行やDB/ストレージ等、他のAWSサービスとの連携も実践していきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?