Skip to content

Python Agent to Gateway

connectionジェネレーターは、Python AgentAgentCore Gatewayに接続できます。

このジェネレーターは、デプロイ時にGatewayに対してIAM SigV4(httpxリクエスト署名経由)で認証し、ローカル実行時にはGatewayプロジェクトによって起動されたローカルゲートウェイに接続するようにエージェントを配線します。

このジェネレーターを使用する前に、以下を確認してください:

  1. Agentコンポーネント(infra: agentcore)を持つPythonプロジェクト
  2. agentcore-gatewayプロジェクト
  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - connection
  5. 必須パラメータを入力
    • クリック Generate

    エージェントプロジェクトをソースとして、Gatewayプロジェクトをターゲットとして選択します。

    パラメータ デフォルト 説明
    sourceProject 必須 string - ソース プロジェクト
    targetProject 必須 string - 接続先のターゲット プロジェクト
    sourceComponent string - 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
    targetComponent string - 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
    preferInstallDependencies boolean true ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

    ジェネレーターは、共有のcore-gatewayモジュールをagent_connection Pythonプロジェクトに出力し、さらにGatewayごとのラッパーを追加し、エージェントを変更します:

    • Directorypackages/common/agent_connection
      • Directory<scope>_agent_connection
        • Directorycore/
          • agentcore_endpoints.py フレームワークに依存しないARN/URL解決
          • agentcore_gateway_mcp_transport.py フレームワークに依存しないGateway MCPトランスポート
          • agentcore_gateway_mcp_client_<framework>.py エージェントのフレームワーク用のGateway MCPクライアント
          • Directoryauth/ フレームワークに依存しないSigV4 / セッション転送 httpx.Auth
        • Directoryapp/
          • <gateway_snake>_client_<framework>.py Gatewayごとのクライアントラッパー
        • __init__.py Gatewayクライアントを再エクスポート

    クライアントのサフィックスは、エージェントのフレームワーク(_strandsまたは_langchain)と一致します。

    さらに、ジェネレーターは以下を行います:

    • エージェントのagent.pyを変更して、Gatewayクライアントをインポートし、そのツールをtoolsに登録します
    • エージェントのワークスペース依存関係としてagent_connectionを追加します
    • エージェントの<agent>-devターゲットをGatewayのdevターゲットに依存するように配線します

    ジェネレーターは、エージェントのagent.pyをGatewayクライアントを使用するように変換します:

    packages/example/example/my_agent/agent.py
    from contextlib import contextmanager
    from strands import Agent
    from my_scope_agent_connection import MyGatewayClientStrands
    @contextmanager
    def get_agent():
    my_gateway = MyGatewayClientStrands.create()
    with (
    my_gateway,
    ):
    yield Agent(
    system_prompt="...",
    tools=[*my_gateway.list_tools_sync()],
    )

    MyGatewayClientStrands.create()は、list_tools_sync()がGatewayを通じて利用可能なすべてのツールを生成する、単一のコンテキスト管理可能なMCPClientを返します。

    どちらの場合も、クライアントはモードごとに同じように動作します:

    • デプロイモードLOCAL_DEV未設定):GatewayのMCPエンドポイントを指すツール、SigV4署名付き。
    • ローカルモードLOCAL_DEV=true):Gatewayプロジェクトのdevターゲットによって起動されたローカルゲートウェイを指すプレーンHTTPツール。

    セッションIDはX-Amzn-Bedrock-AgentCore-Runtime-Session-Idヘッダーを介して、下流のMCPサーバーに自動的に伝播されます。

    ジェネレーターを実行した後、エージェントにGatewayを呼び出す権限を付与する必要があります。

    packages/infra/src/stacks/application-stack.ts
    const gateway = new MyGateway(this, 'MyGateway');
    const myAgent = new MyAgent(this, 'MyAgent');
    // Grant the agent permissions to invoke the Gateway
    gateway.grantInvokeAccess(myAgent);

    Gateway URLは、生成されたCDKコンストラクトによってRuntime Configurationagentcore.gateways.<ClassName>名前空間に自動的に登録されるため、エージェントは実行時にそれを検出できます。

    ジェネレーターは、エージェントのdevターゲットを次のように設定します:

    1. 接続されたGatewayのローカルゲートウェイと接続されているすべてのMCPサーバーを起動
    2. LOCAL_DEV=trueを設定して、生成されたクライアントがデプロイされたGatewayの代わりにローカルゲートウェイを指すようにします

    エージェントをローカルで実行するには:

    Terminal window
    pnpm nx <agent-name>-dev <project-name>

    エージェントをローカルでデプロイされたGatewayに対して実行するには(例えば、Cedarポリシーを実行するため)、エージェントのserveターゲットを使用します。LOCAL_DEVが設定されていない場合、クライアントはランタイム設定からデプロイされたGateway URLを解決し、ローカルのAWS認証情報でリクエストにSigV4署名します:

    Terminal window
    pnpm nx <agent-name>-serve <project-name>

    ローカルゲートウェイはデプロイされたGatewayの代わりとなるため:

    • Cedarポリシー評価なし。 すべてのツールは、ポリシーに関係なくエージェントに表示されます。デプロイされたGatewayに対してポリシーを実行するには、serveターゲットを使用してください。
    • ツール名のプレフィックスは保持されます。 各ローカルMCPサーバーのツールは<target-name>___<tool-name>として公開され、デプロイされたGatewayが出力するものと一致します。これにより、エージェントのシステムプロンプトと参照するCedarアクション名が、ローカル実行とデプロイ実行の間で一貫性を保ちます。