View a markdown version of this page

AI エージェントのツールとして Step Functions ワークフローを使用する - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AI エージェントのツールとして Step Functions ワークフローを使用する

Amazon Bedrock AgentCore Gateway を介してステートマシンをモデルコンテキストプロトコル (MCP) ツールとして公開することで、AI エージェントに Step Functions ワークフローを実行させることができます。ゲートウェイに接続されたエージェントは、実行の開始、ステータスと出力の確認、イベント履歴の読み取り、実行の停止を行うことができます。Lambda 関数を記述したり、自分でツールを定義したりする必要はありません。ゲートウェイはツールスキーマを作成し、エージェントの Step Functions を呼び出します。

このパターンは、タスクが毎回同じステップを同じ順序で実行する必要がある場合に便利です。エージェントは、ワークフローを実行するタイミングと渡す入力を決定します。ステートマシンは実行するステップを決定するため、エージェントはステップをスキップしたり順序を変更したりできず、実行履歴はワークフローの各ステップを記録します。

エージェントが実行できる操作は 2 つの方法で制御できます。実行を開始または一覧表示するツールは、選択したステートマシンに固定され、エージェントは変更できません。特定の実行で動作するツールは、エージェントから Amazon リソースネーム (ARN) を実行します。ゲートウェイサービスロールの AWS Identity and Access Management ポリシーは、これらのツールがアクセスできる実行を制限します。このチュートリアルでは、そのポリシーを単一のステートマシンにスコープします。

このチュートリアルでは、シンプルなスタンダードステートマシンと、それを指す Step Functions コネクタターゲットを持つゲートウェイを作成します。次に、 を使用してエージェントが行うのと同じ MCP 呼び出しを行いawscurl、各リクエストとレスポンスを確認できます。標準ステートマシンがすでにある場合は、 にスキップステップ 2: ゲートウェイのサービスロールを作成するして、その ARN を の代わりに使用できますAgentHelloWorld。このチュートリアルでは、ListExecutions、、 は Express 実行では機能GetExecutionHistoryしないためDescribeExecution、標準ワークフローを使用します。作成したリソースは、 で削除するまで料金が発生する可能性がありますステップ 6: クリーンアップする。

重要

このチュートリアルのリソースでは、Step Functions の状態遷移と Amazon Bedrock AgentCore Gateway ツール呼び出しに対して料金が発生する可能性があります。料金については、「Step Functions の料金」と「Amazon Bedrock AgentCore の料金」を参照してください。継続的な課金を回避するには、「」の説明に従って、終了時にリソースを削除しますステップ 6: クリーンアップする。

注記

Step Functions コネクタは 10 個のオペレーションを公開します。このチュートリアルでは、、StartExecution、ListExecutions、、GetExecutionHistory、 の DescribeStateMachine DescribeExecution6 つを設定しますStopExecution。タスクトークンオペレーションや Standard ワークフローと Express ワークフローの違いを含む完全なリストについては、「Amazon Bedrock AgentCore デベロッパーガイド」のAWS 「コネクタターゲットとしての Step Functions」を参照してください。

前提条件

作業を開始する前に、以下の準備が整っていることを確認します。

  • アカウントの認証情報で設定されたAWS CLI バージョン 2。ステップ 3~6 では、 を使用します AWS CLI。

  • 署名バージョン 4 の署名付き HTTP リクエストをゲートウェイに送信できるクライアント。このチュートリアルでは、 でインストールできる awscurl を使用しますpip install awscurl。署名バージョン 4 をサポートする MCP クライアントは、同じように動作します。

  • アカウントに IAM ロール、Step Functions ステートマシン、および AgentCore ゲートウェイを作成するアクセス許可、およびステップ 4 と 5 で呼び出す ID に対してステップ 3 で作成したゲートウェイに対するアクセスbedrock-agentcore:InvokeGateway許可。

このチュートリアルのすべてのリソースを同じ に作成します AWS リージョン。ゲートウェイは独自のリージョンで Step Functions を呼び出すため、別のリージョンのステートマシンにはコネクタ経由でアクセスできません。

ステップ 1: ステートマシンを作成する

エージェントが実行する標準ステートマシンを作成します。次の定義には、固定結果を返す 1 つのPass状態があります。コンソールが、ステップ 3 でゲートウェイを作成するリージョンに設定されていることを確認します。

ステートマシンを作成するには (コンソール)
  1. AWS Step Functions コンソールを開き、[Create a state machine (ステートマシンの作成)] を選択します。

  2. 空白 を選択し、選択 を選択します。

  3. Code を選択し、定義を以下に置き換えます。

    { "Comment": "A workflow that an AI agent starts through AgentCore Gateway", "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "Result": "Hello from Step Functions", "End": true } } }
  4. Config を選択します。ステートマシン名には、 と入力しますAgentHelloWorld。タイプを標準のままにします。

  5. Create を選択してステートマシンを作成します。

  6. プロンプトが表示されたら、Step Functions に実行ロールの作成を許可します。 AWS CLI 代わりに を使用する場合は、次の手順に示すように、ロールを自分で作成します。

  7. ステートマシンの詳細ページで、次の例に示すように ARN を書き留めます。

    arn:aws:states:region:123456789012:stateMachine:AgentHelloWorld

AWS CLI 代わりに を使用して同じステートマシンを作成するには、次の手順を使用します。コンソールとは異なり、 AWS CLI は実行ロールを作成しないため、最初に作成します。この Passのみのワークフローは他のサービスを呼び出さないため、ロールにはアクセス許可ポリシーは必要ありません。

ステートマシンを作成するには (AWS CLI)
  1. Step Functions が引き受けることができる実行ロールを作成します。リージョンとアカウント ID を独自の ID に置き換えます。

    aws iam create-role \ --role-name AgentHelloWorldExecutionRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "states.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:states:region:123456789012:stateMachine:*" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }'
  2. コンソールの手順に示されている定義を という名前のファイルに保存しdefinition.json、ステートマシンを作成します。

    aws stepfunctions create-state-machine \ --name AgentHelloWorld \ --type STANDARD \ --definition file://definition.json \ --role-arn "arn:aws:iam::123456789012:role/AgentHelloWorldExecutionRole" \ --region region

    レスポンスには が含まれますstateMachineArn。ステップ 2 と 3 に注意してください。

ステップ 2: ゲートウェイのサービスロールを作成する

ゲートウェイは、サービスロールを使用して Step Functions を呼び出します。ロールを作成したステートマシンにスコープして、エージェントがアカウントの他のワークフローで動作できないようにします。

ゲートウェイサービスロールを作成するには
  1. IAM コンソールを開き、ロール、ロールの作成を選択します。

  2. 信頼されたエンティティタイプで、カスタム信頼ポリシーを選択し、次のように入力します。リージョンとアカウント ID を独自の ID に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:region:123456789012:gateway/step-functions-gateway-*" } } } ] }
  3. 次へを選択し、次に管理ポリシーをアタッチせずに再度次へを選択します。

  4. [ロール名] に「AgentCoreGatewayToStepFunctions」と入力し、[ロールの作成] を選択します。

  5. ロールを開き、アクセス許可の追加、インラインポリシーの作成、JSON の選択、次のポリシーの入力を選択します。リージョンとアカウント ID を独自の ID に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "StateMachineOperations", "Effect": "Allow", "Action": [ "states:StartExecution", "states:ListExecutions", "states:DescribeStateMachine" ], "Resource": "arn:aws:states:region:123456789012:stateMachine:AgentHelloWorld" }, { "Sid": "ExecutionOperations", "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:GetExecutionHistory", "states:StopExecution" ], "Resource": "arn:aws:states:region:123456789012:execution:AgentHelloWorld:*" } ] }
  6. ポリシーに という名前を付けStepFunctionsConnectorAccess、ポリシーの作成を選択します。

  7. 次の例に示すように、ロール ARN を書き留めます。

    arn:aws:iam::123456789012:role/AgentCoreGatewayToStepFunctions
注記

実行 ARNs はステートマシン ARNsとは異なるリソースタイプであるため、ポリシーには 2 つのステートメントがあります。

後でタスクトークンオペレーション (SendTaskSuccess、SendTaskFailure、および SendTaskHeartbeat) を公開する場合、IAM はこれらのアクションのリソースレベルのアクセス許可をサポートしていないため"*"、 で付与する必要があります。タスクトークンは、エージェントがどのタスクを完了できるかを制御する唯一のものであるため、タスクトークンをシークレットとして扱い、タスクトークンを処理する必要があるエージェントにのみ送信します。

ゲートウェイ上のすべてのターゲットは、そのサービスロールを共有します。ワークフローごとに異なる IAM 境界が必要な場合は、それぞれに個別のゲートウェイを使用します。

ステップ 3: ゲートウェイを作成し、Step Functions コネクタターゲットを追加する

AWS 認証情報で署名されたリクエストを受け入れるゲートウェイを作成し、statesコネクタを使用してステートマシンに固定するターゲットを追加します。

ゲートウェイとターゲットを作成するには
  1. を使用してゲートウェイを作成します AWS CLI。ロール ARN をステップ 2 のものに置き換えます。

    aws bedrock-agentcore-control create-gateway \ --name "step-functions-gateway" \ --protocol-type MCP \ --authorizer-type AWS_IAM \ --role-arn "arn:aws:iam::123456789012:role/AgentCoreGatewayToStepFunctions" \ --region region

    レスポンスには、 gatewayIdと が含まれますgatewayUrl。両方に注意してください。

  2. ゲートウェイのステータスが になるまで待ちますREADY。これは数分かかることがあります。GATEWAY_ID を前のステップgatewayIdの に置き換えます。

    aws bedrock-agentcore-control get-gateway \ --gateway-identifier "GATEWAY_ID" \ --query status --output text --region region
  3. コネクタターゲットを追加します。configurations リストは、ツールになるオペレーションを選択します。StartExecution、、 ListExecutionsDescribeStateMachineはステートマシンに固定されます。DescribeExecution、GetExecutionHistory、 はエージェントからStopExecution実行 ARN を取得します。GATEWAY_ID をゲートウェイ ID に置き換えます。

    aws bedrock-agentcore-control create-gateway-target \ --gateway-identifier "GATEWAY_ID" \ --name "hello" \ --target-configuration '{ "mcp": { "connector": { "source": { "connectorId": "states" }, "configurations": [ { "name": "StartExecution", "parameterValues": { "stateMachineArn": "arn:aws:states:region:123456789012:stateMachine:AgentHelloWorld" } }, { "name": "ListExecutions", "parameterValues": { "stateMachineArn": "arn:aws:states:region:123456789012:stateMachine:AgentHelloWorld" } }, { "name": "DescribeStateMachine", "parameterValues": { "stateMachineArn": "arn:aws:states:region:123456789012:stateMachine:AgentHelloWorld" } }, { "name": "DescribeExecution" }, { "name": "GetExecutionHistory" }, { "name": "StopExecution" } ] } } }' \ --credential-provider-configurations '[{"credentialProviderType": "GATEWAY_IAM_ROLE"}]' \ --region region
  4. ターゲットステータスが になるまで待ちますREADY。これは数分かかることがあります。TARGET_ID をcreate-gateway-targetレスポンスtargetIdの に置き換えます。

    aws bedrock-agentcore-control get-gateway-target \ --gateway-identifier "GATEWAY_ID" --target-id "TARGET_ID" \ --query status --output text --region region

ゲートウェイは、、hello___StartExecution、hello___ListExecutions、、hello___DescribeStateMachinehello___DescribeExecution、 hello___GetExecutionHistoryの 6 つの MCP ツールを公開するようになりましたhello___StopExecution。ゲートウェイは、各ツール名のプレフィックスにターゲット名を付けます。

ステップ 4: ゲートウェイ経由で実行を開始する

MCP クライアントは、JSON-RPC リクエストを使用してゲートウェイを呼び出します。ゲートウェイはAWS_IAM認可を使用するため、リクエストは署名バージョン 4 で署名する必要があります。次の例ではawscurl、 AWS CLI 認証情報を使用してリクエストに署名する を使用します。「前提条件」を参照してください。各コマンドで、GATEWAY_URL をステップ 3 gatewayUrlの に置き換えます。

実行を開始するには
  1. エージェントに表示されるツールを一覧表示します。

    awscurl --service bedrock-agentcore --region region \ -X POST "GATEWAY_URL" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

    レスポンスには、入力スキーマを含む 6 つのツールが一覧表示されます。が のみをhello___StartExecutionアドバタイズすることに注意してくださいinput。ピン留めされた stateMachineArnはエージェントから非表示になり、上書きすることはできません。

  2. 実行を開始します。

    awscurl --service bedrock-agentcore --region region \ -X POST "GATEWAY_URL" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "hello___StartExecution", "arguments": { "input": "{\"who\": \"agent\"}" } } }'

    ツールの結果には、新しい実行の ARN を含む Step Functions レスポンスが含まれます。

    { "jsonrpc": "2.0", "id": 2, "result": { "isError": false, "content": [ { "type": "text", "text": "{\"executionArn\":\"arn:aws:states:region:123456789012:execution:AgentHelloWorld:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111\",\"startDate\":1.7597E9}" } ] } }

    次のステップexecutionArnでは、 に注意してください。

ステップ 5: 結果を確認する

実行レベルのツールを使用して、実行が成功したかどうかを確認し、出力を読み込みます。

実行結果を確認するには
  1. 実行を記述します。デフォルトでは、レスポンスにはメタデータのみが含まれます。入力と出力を含めるには、 includedData を に設定しますALL_DATA。EXECUTION_ARN をステップ 4 executionArnの に置き換えます。

    awscurl --service bedrock-agentcore --region region \ -X POST "GATEWAY_URL" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "hello___DescribeExecution", "arguments": { "executionArn": "EXECUTION_ARN", "includedData": "ALL_DATA" } } }'

    このステートマシンの場合、 statusは SUCCEEDEDで、 は outputです"Hello from Step Functions"。実行が失敗した場合、 statusは FAILEDで、レスポンスには失敗状態の フィールドerrorと causeフィールドが含まれます。

  2. イベント履歴を読み、実行が実行した各ステップを確認します。

    awscurl --service bedrock-agentcore --region region \ -X POST "GATEWAY_URL" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "hello___GetExecutionHistory", "arguments": { "executionArn": "EXECUTION_ARN" } } }'
  3. ピン留めされたステートマシンの最近の実行を一覧表示し、オプションでステータスでフィルタリングします。

    awscurl --service bedrock-agentcore --region region \ -X POST "GATEWAY_URL" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "hello___ListExecutions", "arguments": { "statusFilter": "SUCCEEDED" } } }'
  4. (オプション) AWS Step Functions コンソールで実行を確認します。AgentHelloWorld を選択し、実行を選択します。ゲートウェイによって開始された実行は、ゲートウェイのサービスロールを呼び出し元とする他の実行のように表示されます AWS CloudTrail。

注記

実行中の実行を停止するには、実行 ARN hello___StopExecutionを使用して を呼び出します。すでに完了した実行で呼び出すことは成功しますが、効果はありません。レスポンスは、実行の元の停止時間を返します。長時間実行されるワークフローの場合、エージェントは通常 を呼び出しStartExecution、 statusが でなくなるDescribeExecutionまでポーリングしますRUNNING。

ステップ 6: クリーンアップする

継続的な課金を回避するには、作成したリソースを削除します。

次をクリーンアップするには:
  1. ゲートウェイターゲットを削除し、次にゲートウェイを削除します。

    aws bedrock-agentcore-control delete-gateway-target \ --gateway-identifier "GATEWAY_ID" --target-id "TARGET_ID" --region region aws bedrock-agentcore-control delete-gateway \ --gateway-identifier "GATEWAY_ID" --region region
  2. Step Functions コンソールで、AgentHelloWorldステートマシンを削除します。

  3. IAM コンソールで、AgentCoreGatewayToStepFunctionsロールとステートマシンの実行ロール (Step Functions が作成したロール、または を使用したAgentHelloWorldExecutionRole場合は ) を削除します AWS CLI。