View a markdown version of this page

AWS Lambda 関数のターゲット - Amazon Bedrock AgentCore

AWS Lambda 関数のターゲット

Lambda ターゲットを使用すると、ゲートウェイをツールを実装する AWS Lambda 関数に接続できます。これは、ツールの呼び出しに応じてカスタムコードを実行する場合に便利です。

Lambda サービスを使用して Lambda AWS 関数を作成します。関数を作成するには、以下を実行する必要があります。

  • Lambda 関数が呼び出すことができるツールを定義するツールスキーマを作成します。

  • Lambda 入力形式を理解します。その後、選択した言語で構築するための AWS Lambda 開発者ガイドのステップに従います。

関数を作成したら、ゲートウェイがアクセスできるようにアクセス許可を設定します。

Lambda ターゲットがユースケースに適しているかどうかを判断するのに役立つ重要な考慮事項と制限事項を確認してください。その場合は、ツールスキーマと Lambda 関数を作成し、ゲートウェイがターゲットにアクセスできるようにアクセス許可を設定できます。詳細情報については、トピックを選択してください。

主な考慮事項と制限事項

Lambda ターゲットを使用する場合は、以下の制限と考慮事項に注意してください。

  • ツール名のプレフィックスは、 AWS Lambda 関数のツール名から手動で削除する必要があります。詳細については、AgentCore Gateway ツールの名前を理解する」を参照してください。

  • 既存の AWS Lambda 関数を使用してゲートウェイにツールとしてインポートする場合は、イベントオブジェクトとコンテキストオブジェクトのスキーマ変更を考慮して関数コードを変更する必要があります。

  • Lambda 関数は、ゲートウェイで解析できる有効な JSON レスポンスを返す必要があります

  • Lambda 関数のタイムアウトは、ツールの予想される処理時間を処理するように適切に設定する必要があります。

  • LLambda 関数にエラー処理を実装して、意味のあるエラーメッセージをクライアントに提供することを検討してください。

Lambda 関数ツールスキーマ

このセクションでは、Lambda 関数が返すことができるツールを定義するツールスキーマの構造について説明します。ツールスキーマを定義したら、次のいずれかを実行できます。

  • Amazon S3 バケットにアップロードし、ゲートウェイにターゲットを追加するときに S3 の場所を参照します。

  • ゲートウェイにターゲットを追加するときに、定義をインラインで貼り付けます。

トピックを選択すると、ツールスキーマの詳細を確認したり、例を確認したりできます。

ツール定義

Lambda 関数をゲートウェイターゲットとして追加する場合は、ターゲット設定を指定するときに ToolDefinition を指定します。ツール定義の構造は次のとおりです。

{ "name": "string", "description": "string", "inputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }, "outputSchema": { "type": "object", "description" "string", "properties": { "string": SchemaDefinition }, "required": ["string"] } }

ツール定義には、次のフィールドが含まれます。

  • name (必須) – ツールの名前。

  • description (必須) – ツールとその目的と使用方法の説明。

  • inputSchema (必須) – ツールが受け入れる入力の構造を定義する JSON オブジェクト。

  • outputSchema (オプション) – ツールが生成する出力の構造を定義する JSON オブジェクト。

フィールドinputSchemaoutputSchemaフィールドはどちらも、次のセクションで説明するオブジェクトタイプの SchemaDefinition にマッピングされます。

入出力スキーマのトップレベルスキーマ定義

ツール定義の最上位にある フィールドinputSchemaoutputSchemaフィールドはどちらも、次のフィールドを含むオブジェクトタイプの SchemaDefinition にマッピングされます。

{ "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }
  • type (必須) – である必要がありますobject

  • description (オプション) – スキーマとその目的と使用方法の説明。

  • properties (オプション) – ツールのプロパティまたは引数を定義する JSON オブジェクト。各キーはプロパティの名前であり、プロパティを定義する SchemaDefinition オブジェクトにマッピングされます。

  • required (オプション) – properties オブジェクトに必要なプロパティを列挙する配列。

ツールの引数を定義するpropertiesフィールドを含める場合は、引数ごとにスキーマ定義を指定します。スキーマ定義のさまざまなタイプについては、次のセクションで説明します。

プロパティスキーマ定義

最上位の各プロパティは、最上位のスキーマ定義とわずかに異なる要件を持つ SchemaDefinition オブジェクトにSchemaDefinitionマッピングされます。使用可能なフィールドは、 プロパティtypeの によって異なります。SchemaDefinition タイプの の形状を確認するには、次のタブから を選択します。

String
  1. 文字列プロパティSchemaDefinitionの 構造は次のとおりです。

    { "type": "string", "description": "string" }
Number
  1. number プロパティSchemaDefinitionの には、次の構造があります。

    { "type": "number", "description": "string" }
Integer
  1. 整数プロパティSchemaDefinitionの 構造は次のとおりです。

    { "type": "integer", "description": "string" }
Boolean
  1. ブールプロパティSchemaDefinitionの には、次の構造があります。

    { "type": "boolean", "description": "string" }
Array
  1. 配列プロパティSchemaDefinitionの 構造は次のとおりです。

    { "type": "array", "description": "string", "items": SchemaDefinition }

    items フィールドの値は、配列内の各項目の構造SchemaDefinitionを定義する です。

Object
  1. オブジェクトプロパティSchemaDefinitionの は、次の構造を持ち、最上位のプロパティスキーマ定義と一致します。

    { "type": "object", "description": "string", "properties": { "string": SchemaDefinition }, "required": ["string"] }

別のオブジェクトタイププロパティを含める場合は、再帰的に別の を追加しますSchemaDefinition

Lambda ツール定義の例

タブを選択すると、Lambda 関数に含めることができるツール定義の例が表示されます。

Weather tool
  1. 次のget_weatherツールにはlocation文字列引数が必要で、その場所の天気を返すために使用できます。

    { "name": "get_weather", "description": "Get weather for a location", "inputSchema": { "type": "object", "properties": { "location": { "type": "string", "description": "the location e.g. seattle, wa" } }, "required": [ "location" ] } }
Time tool
  1. 次のget_timeツールにはtimezone文字列引数が必要で、そのタイムゾーンの時刻を返すために使用できます。

    { "name": "get_time", "description": "Get time for a timezone", "inputSchema": { "type": "object", "properties": { "timezone": { "type": "string" } }, "required": [ "timezone" ] } }

Lambda 関数の入力形式

Amazon Bedrock AgentCore ゲートウェイが Lambda 関数を呼び出すと、 event オブジェクトと context オブジェクトを関数に渡します。書き込む Lambda イベントハンドラーは、これらのオブジェクトの値にアクセスできます。

イベントオブジェクト

ツールによって返される propertiesから の値inputSchemaへのマップ。たとえば、入力スキーマにプロパティ keywordscategory が含まれている場合、イベントオブジェクトは次のようになります。

{ "keywords": "wireless headphones", "category": "electronics" }

コンテキストオブジェクト

次のメタデータが含まれます。

  • bedrockAgentCoreMessageVersion – メッセージのバージョン。

  • bedrockAgentCoreAwsRequestId – Amazon Bedrock AgentCore サービスに対して行われたリクエストの ID。

  • bedrockAgentCoreMcpMessageId – MCP サーバーに送信されるメッセージの ID。

  • bedrockAgentCoreGatewayId – 呼び出されたゲートウェイの ID。

  • bedrockAgentCoreTargetId – 呼び出されたゲートウェイターゲットの ID。

  • bedrockAgentCoreToolName – 呼び出されたツールの名前。ツール名は _ ${target_name} の形式です${tool_name}

コンテキストオブジェクトの形式は次のとおりです。

{ "bedrockAgentCoreMessageVersion": "1.0", "bedrockAgentCoreAwsRequestId": "string", "bedrockAgentCoreMcpMessageId": "string", "bedrockAgentCoreGatewayId": "string", "bedrockAgentCoreTargetId": "string", "bedrockAgentCoreToolName": "string" }

書き込む Lambda 関数は、イベントオブジェクトとコンテキストオブジェクトのプロパティにアクセスできます。次の定型コードを使用して開始できます。

# Access context properties in your Lambda function def lambda_handler(event, context): # Since the visible tool name includes the target name as a prefix, we can use this delimiter to strip the prefix delimiter = "___" # Get the tool name from the context originalToolName = context.client_context.custom['bedrockAgentCoreToolName'] toolName = originalToolName[originalToolName.index(delimiter) + len(delimiter):] # Get other context properties message_version = context.client_context.custom['bedrockAgentCoreMessageVersion'] aws_request_id = context.client_context.custom['bedrockAgentCoreAwsRequestId'] mcp_message_id = context.client_context.custom['bedrockAgentCoreMcpMessageId'] gateway_id = context.client_context.custom['bedrockAgentCoreGatewayId'] target_id = context.client_context.custom['bedrockAgentCoreTargetId'] # Process the request based on the tool name if tool_name == 'searchProducts': # Handle searchProducts tool pass elif tool_name == 'getProductDetails': # Handle getProductDetails tool pass else: # Handle unknown tool pass