AgentCore Gateway から AgentCore Gateway へ
connection ジェネレーターは、AgentCore Gateway を別の AgentCore Gateway のターゲットとして登録できます。これにより、ゲートウェイを階層的に構成できます。たとえば、チームレベルのゲートウェイが複数のドメインゲートウェイを集約し、各ドメインゲートウェイが独自の MCP サーバーをフロントするような構成が可能です。
接続されると、ソースゲートウェイはターゲットゲートウェイのツールを単一の MCP エンドポイントに集約します。ターゲットゲートウェイは既に独自のターゲット名でツールにプレフィックスを付けているため、ソースゲートウェイを通じてツールは <gateway-target-name>___<target-name>___<tool-name> として表示されます。チェーン内の各ゲートウェイが1つのプレフィックスを追加します。両方のゲートウェイは独自の Cedar ポリシーを評価します。ソースゲートウェイはプレフィックス付きアクションに対して呼び出し元を認可し、次にターゲットゲートウェイは内部アクションに対してソースゲートウェイの実行ロールを認可します。
このジェネレーターを使用する前に、以下を確認してください:
- 2つの
agentcore-gatewayプロジェクト
両方のゲートウェイは protocol: mcp を持つ必要があり、ターゲットゲートウェイは auth: iam を持つ必要があります。ソースゲートウェイは独自の実行ロールで署名してターゲットを呼び出すため、ターゲットのインバウンド認証のみが IAM である必要があります。ジェネレーターはこれを検証し、また、ゲートウェイ間でサイクルを作成する接続を拒否します。サイクルがあると tools/list で無限に再帰してしまうためです。
ジェネレーターの実行
Section titled “ジェネレーターの実行”- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - connection - 必須パラメータを入力
- クリック
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connection集約するゲートウェイプロジェクトをソースとして選択し、集約されるゲートウェイをターゲットとして選択します。
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| sourceProject 必須 | string | - | ソース プロジェクト |
| targetProject 必須 | string | - | 接続先のターゲット プロジェクト |
| sourceComponent | string | - | 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。 |
| targetComponent | string | - | 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。 |
| preferInstallDependencies | boolean | true | ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。 |
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは、新しいソースファイルを生成するのではなく、既存のプロジェクトを接続します。以下のファイルが変更されます:
Directorypackages/<source-gateway>
- project.json
<source-gateway>-serve-localがターゲットゲートウェイの<target-gateway>-serve-localへの依存関係を獲得 - serve-local.ts
ATTACHED_MCP_SERVERSが更新され、ローカルゲートウェイがターゲットゲートウェイを集約
- project.json
ソースゲートウェイプロジェクトの <source-gateway>-serve-local ターゲットは、ターゲットゲートウェイの <target-gateway>-serve-local ターゲットへの依存関係を獲得します。そのため、ソースゲートウェイをローカルで実行すると、ターゲットゲートウェイ(および推移的に、それに接続されているすべての MCP サーバー)も起動します。ターゲットゲートウェイは、ソースゲートウェイプロジェクトの serve-local.ts にも登録され、ローカルゲートウェイがそのツールを集約します。
スタックへのゲートウェイターゲットの追加
Section titled “スタックへのゲートウェイターゲットの追加”ジェネレーターは、どのスタックやモジュールがゲートウェイをインスタンス化するかを知らないため、ゲートウェイターゲットをインフラストラクチャに自動的に接続できません。gateway.addGateway(targetGateway) の呼び出しを1つ自分で追加してください。
ゲートウェイをインスタンス化するスタックで、ターゲットゲートウェイをソースゲートウェイのターゲットとして登録します:
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 がターゲットの作成中にターゲットのツールを取得するためです。
ゲートウェイをインスタンス化する Terraform ファイルで、ゲートウェイターゲットを接続します:
module "inner_gateway" { source = "../../common/terraform/src/app/gateways/inner-gateway"}
module "outer_gateway" { source = "../../common/terraform/src/app/gateways/outer-gateway" policy_dependencies = [aws_bedrockagentcore_gateway_target.inner_gateway.target_id]
additional_iam_policy_statements = [ { Effect = "Allow" Action = ["bedrock-agentcore:InvokeGateway"] Resource = [module.inner_gateway.gateway_arn] } ]}
# 内部ゲートウェイを外部ゲートウェイのターゲットとして登録resource "aws_bedrockagentcore_gateway_target" "inner_gateway" { gateway_identifier = module.outer_gateway.gateway_id name = "inner-gateway"
target_configuration { mcp { mcp_server { endpoint = module.inner_gateway.gateway_url } } }
credential_provider_configuration { gateway_iam_role { service = "bedrock-agentcore" } }}ターゲット name(上記の inner-gateway)は、外部ゲートウェイ上の Cedar アクション名にプレフィックスを付けます。ポリシーの記述セクションを参照してください。additional_iam_policy_statements エントリは、外部ゲートウェイの実行ロールに内部ゲートウェイへの呼び出しアクセスを付与します。これは、ターゲット作成時に内部ゲートウェイのツールを取得する場合と、実行時に呼び出しをルーティングする場合の両方で必要です。policy_dependencies は、このターゲットのアクションを参照する Cedar ポリシーが、ターゲットがそれらを登録した後に作成されることを保証します。
チェーンされたゲートウェイ間の Cedar ポリシー
Section titled “チェーンされたゲートウェイ間の Cedar ポリシー”チェーン内の各ゲートウェイは独自のポリシーセットを評価します:
- ソースゲートウェイは、元の呼び出し元(例:エージェントの実行ロール)をプレフィックス付きアクションに対して評価します。例:
AgentCore::Action::"inner-gateway___my-mcp___add" - ターゲットゲートウェイは、ソースゲートウェイの実行ロールを内部アクションに対して評価します。例:
AgentCore::Action::"my-mcp___add"
これは、ゲートウェイチェーンを通じたツール呼び出しが、すべてのホップで許可される必要があることを意味します。デフォルトの permit-all.cedar は同じ AWS アカウント内の任意の呼び出し元を許可し、これにはソースゲートウェイのロールが含まれます。ターゲットゲートウェイでより狭いポリシーを記述する場合は、ターゲットゲートウェイが見るプリンシパルは元の呼び出し元ではなく、ソースゲートウェイのロールであることを忘れないでください。
ローカル開発
Section titled “ローカル開発”ソースゲートウェイをローカルで実行するには:
pnpm nx dev <source-gateway-name>yarn nx dev <source-gateway-name>npx nx dev <source-gateway-name>bunx nx dev <source-gateway-name>これにより、ローカルソースゲートウェイ、ローカルターゲットゲートウェイ、およびいずれかに接続されているすべての MCP サーバーが、それぞれ割り当てられたローカルポートで起動します。ツール名は、デプロイされた場合とまったく同じように各ホップでプレフィックスが付けられます(<gateway-target-name>___<target-name>___<tool-name>)。そのため、エージェントのプロンプトと Cedar アクション名は、ローカル実行とデプロイ実行の間で一貫性が保たれます。
�。 :::