Skip to content

AgentCore Gateway から AgentCore Gateway へ

connection ジェネレーターは、AgentCore Gateway を別の AgentCore Gateway のターゲットとして登録できます。これにより、ゲートウェイを階層的に構成できます。たとえば、チームレベルのゲートウェイが複数のドメインゲートウェイを集約し、各ドメインゲートウェイが独自の MCP サーバーをフロントするような構成が可能です。

接続されると、ソースゲートウェイはターゲットゲートウェイのツールを単一の MCP エンドポイントに集約します。ターゲットゲートウェイは既に独自のターゲット名でツールにプレフィックスを付けているため、ソースゲートウェイを通じてツールは <gateway-target-name>___<target-name>___<tool-name> として表示されます。チェーン内の各ゲートウェイが1つのプレフィックスを追加します。両方のゲートウェイは独自の Cedar ポリシーを評価します。ソースゲートウェイはプレフィックス付きアクションに対して呼び出し元を認可し、次にターゲットゲートウェイは内部アクションに対してソースゲートウェイの実行ロールを認可します。

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

  1. 2つの agentcore-gateway プロジェクト

両方のゲートウェイは protocol: mcp を持つ必要があり、ターゲットゲートウェイは auth: iam を持つ必要があります。ソースゲートウェイは独自の実行ロールで署名してターゲットを呼び出すため、ターゲットのインバウンド認証のみが IAM である必要があります。ジェネレーターはこれを検証し、また、ゲートウェイ間でサイクルを作成する接続を拒否します。サイクルがあると tools/list で無限に再帰してしまうためです。

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

    集約するゲートウェイプロジェクトをソースとして選択し、集約されるゲートウェイをターゲットとして選択します。

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

    ジェネレーターは、新しいソースファイルを生成するのではなく、既存のプロジェクトを接続します。以下のファイルが変更されます:

    • Directorypackages/<source-gateway>
      • project.json <source-gateway>-serve-local がターゲットゲートウェイの <target-gateway>-serve-local への依存関係を獲得
      • serve-local.ts ATTACHED_MCP_SERVERS が更新され、ローカルゲートウェイがターゲットゲートウェイを集約

    ソースゲートウェイプロジェクトの <source-gateway>-serve-local ターゲットは、ターゲットゲートウェイの <target-gateway>-serve-local ターゲットへの依存関係を獲得します。そのため、ソースゲートウェイをローカルで実行すると、ターゲットゲートウェイ(および推移的に、それに接続されているすべての MCP サーバー)も起動します。ターゲットゲートウェイは、ソースゲートウェイプロジェクトの serve-local.ts にも登録され、ローカルゲートウェイがそのツールを集約します。

    スタックへのゲートウェイターゲットの追加

    Section titled “スタックへのゲートウェイターゲットの追加”

    ジェネレーターは、どのスタックやモジュールがゲートウェイをインスタンス化するかを知らないため、ゲートウェイターゲットをインフラストラクチャに自動的に接続できませんgateway.addGateway(targetGateway) の呼び出しを1つ自分で追加してください。

    ゲートウェイをインスタンス化するスタックで、ターゲットゲートウェイをソースゲートウェイのターゲットとして登録します:

    packages/infra/src/stacks/application-stack.ts
    const innerGateway = new InnerGateway(this, 'InnerGateway');
    const outerGateway = new OuterGateway(this, 'OuterGateway');
    // 内部ゲートウェイを外部ゲートウェイのターゲットとして登録します。ターゲット
    // 名はデフォルトで内部ゲートウェイの `gatewayName`(クラス名をケバブケースに
    // 変換したもの、例:`InnerGateway` -> `inner-gateway`)になります。
    outerGateway.addGateway(innerGateway);

    ゲートウェイターゲット名(デフォルトではターゲットゲートウェイの gatewayName)は、ソースゲートウェイ上の Cedar アクション名にプレフィックスを付けます。アクション形式は AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>" です。ポリシーの記述セクションを参照してください。ターゲット名は短く安定したものにしてください。後で変更すると、古い名前を参照する Cedar ポリシーが無効になります。

    デフォルトのターゲット名を上書きするには、gatewayTargetName を渡します:

    outerGateway.addGateway(innerGateway, { gatewayTargetName: 'inner' });

    コンストラクトは、ソースゲートウェイの実行ロールにターゲットゲートウェイへの bedrock-agentcore:InvokeGateway アクセスを付与し、ターゲットを iamCredentialProvider.service = 'bedrock-agentcore' で構成します。これにより、ソースゲートウェイは独自の実行ロールを使用してアウトバウンド呼び出しに署名します。ターゲットは、ターゲットゲートウェイとそのすべてのターゲットの後に作成されます。これは、AgentCore がターゲットの作成中にターゲットのツールを取得するためです。

    チェーンされたゲートウェイ間の Cedar ポリシー

    Section titled “チェーンされたゲートウェイ間の Cedar ポリシー”

    チェーン内の各ゲートウェイは独自のポリシーセットを評価します:

    1. ソースゲートウェイは、元の呼び出し元(例:エージェントの実行ロール)をプレフィックス付きアクションに対して評価します。例:AgentCore::Action::"inner-gateway___my-mcp___add"
    2. ターゲットゲートウェイは、ソースゲートウェイの実行ロールを内部アクションに対して評価します。例:AgentCore::Action::"my-mcp___add"

    これは、ゲートウェイチェーンを通じたツール呼び出しが、すべてのホップで許可される必要があることを意味します。デフォルトの permit-all.cedar は同じ AWS アカウント内の任意の呼び出し元を許可し、これにはソースゲートウェイのロールが含まれます。ターゲットゲートウェイでより狭いポリシーを記述する場合は、ターゲットゲートウェイが見るプリンシパルは元の呼び出し元ではなく、ソースゲートウェイのロールであることを忘れないでください。

    ソースゲートウェイをローカルで実行するには:

    Terminal window
    pnpm nx dev <source-gateway-name>

    これにより、ローカルソースゲートウェイ、ローカルターゲットゲートウェイ、およびいずれかに接続されているすべての MCP サーバーが、それぞれ割り当てられたローカルポートで起動します。ツール名は、デプロイされた場合とまったく同じように各ホップでプレフィックスが付けられます(<gateway-target-name>___<target-name>___<tool-name>)。そのため、エージェントのプロンプトと Cedar アクション名は、ローカル実行とデプロイ実行の間で一貫性が保たれます。

    �。 :::