Skip to content

TypeScript Agent to Gateway

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

このジェネレーターは、デプロイ時にIAM SigV4でGatewayに認証し、ローカル実行時にはGatewayプロジェクトによって起動されたローカルゲートウェイに接続するようにエージェントを構成します。

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

  1. Agentコンポーネント(infra: agentcore)を持つTypeScriptプロジェクト
  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プロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

    ジェネレーターは、共有コアクライアントファイルをagent-connectionパッケージに出力し、Gateway毎のラッパーを追加し、エージェントを変更します:

    • Directorypackages/common/agent-connection
      • Directorysrc
        • Directorycore/
          • agentcore-endpoints.ts フレームワークに依存しないARN/URL解決
          • agentcore-gateway-mcp-transport.ts フレームワークに依存しないGateway MCPトランスポート
          • agentcore-gateway-mcp-client-strands.ts デプロイされたGateway用のStrands MCPクライアント
        • Directoryapp/
          • <gateway-kebab>-client-strands.ts Gateway毎のStrandsクライアントラッパー
        • index.ts Gatewayクライアントを再エクスポート

    さらに、ジェネレーターは:

    • エージェントのagent.tsを変更して、Gatewayクライアントクラスをインポートし、<Gateway>ClientStrands.create()を呼び出し、返されたクライアントをtools配列に登録します
    • エージェントの<agent>-devターゲットをGatewayのdevターゲットに依存するように構成します
    • 必要なSigV4 / MCP依存関係をインストールします

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

    packages/example/src/my-agent/agent.ts
    import { Agent } from '@strands-agents/sdk';
    import { MyGatewayClientStrands } from ':my-scope/agent-connection';
    export const getAgent = async () => {
    const myGateway = await MyGatewayClientStrands.create();
    return new Agent({
    systemPrompt: '...',
    tools: [myGateway],
    });
    };

    デプロイ時(SERVE_LOCALが未設定)、クライアントはGatewayのMCPエンドポイントを指し、SigV4で認証します。SERVE_LOCAL=trueの場合、それはGatewayプロジェクトのserve-localターゲットによって起動されたローカルゲートウェイを指すため、同じagent.tsが両方のモードで統一的に動作します。

    セッション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');
    // エージェントに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アクション名がローカル実行とデプロイ実行で一貫性を保ちます。