🌟

lamdaでamazon Bedrockをつかってみる

2024/11/26に公開

Amazon Bedrock を AWS Lambda で使用するためには、AWS SDK for Python (boto3) を利用して Amazon Bedrock にリクエストを送信します。以下の手順とサンプルコードを参考にしてください。

前提条件

AWSアカウント:Amazon Bedrock を使用できる AWS アカウント。

IAM権限:Lambda 関数が Bedrock にアクセスできるように適切な IAM ロールを設定。

bedrock:InvokeModel の権限。

AWS SDK for Python (boto3):

Lambda 関数のランタイムに boto3 が含まれていますが、最新バージョンを使用したい場合はレイヤーを追加します。

サンプルコード: Amazon Bedrock を Lambda で利用

以下のコードは、Amazon Bedrock の Text Generation API を呼び出す例です。

  1. Lambda 関数のコード

import boto3
import json

def lambda_handler(event, context):
    # Bedrock クライアントを作成
    bedrock_client = boto3.client('bedrock')
    
    # 使用するモデルの ARN
    model_id = "your-model-id"  # 例: "anthropic.claude-v1"
    
    # 入力テキスト
    prompt = event.get("prompt", "Hello, how can I help you?")
    
    try:
        # Bedrock にリクエストを送信
        response = bedrock_client.invoke_model(
            modelId=model_id,
            body=json.dumps({
                "prompt": prompt,
                "max_tokens": 100,  # 最大トークン数
                "temperature": 0.7  # 出力のランダム性
            }),
            accept='application/json',
            contentType='application/json'
        )
        
        # レスポンスの解析
        result = json.loads(response['body'])
        generated_text = result['generated_text']
        
        return {
            'statusCode': 200,
            'body': json.dumps({
                'input_prompt': prompt,
                'generated_text': generated_text
            })
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': json.dumps({
                'error': str(e)
            })
        }

2. 必要な IAM ポリシー

Lambda の実行ロールに以下のようなポリシーを付与します。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": "*"
        }
    ]
}

3. Lambda 関数のトリガー例

Lambda 関数にトリガーを設定して、以下のようなリクエストを送信することで動作を確認できます。

リクエスト例 (API Gateway またはテストイベントから送信):


{
    "prompt": "Write a short story about a brave knight."
}

レスポンス例:


{
    "input_prompt": "Write a short story about a brave knight.",
    "generated_text": "Once upon a time, a brave knight set out on a quest..."
}

全開のおまけです
最近は日本語にもぞくぞく対応してくれて、awsで全部完結することもできるので素敵ですね

Discussion