AgentCore Gateway から AgentCore Gateway へ
connection ジェネレーターは、AgentCore Gateway を別の AgentCore Gateway のターゲットとして登録できます。これにより、ゲートウェイを階層的に構成できます。たとえば、チームレベルのゲートウェイが複数のドメインゲートウェイを集約し、各ドメインゲートウェイが独自の MCP サーバーをフロントするような構成が可能です。
接続されると、ソース Gateway はターゲット Gateway のツールを単一の MCP エンドポイントに集約します。ターゲット Gateway は既に独自のターゲット名でツールにプレフィックスを付けているため、ソース Gateway を通じてツールは <gateway-target-name>___<target-name>___<tool-name> として表示されます。チェーン内の各ゲートウェイが 1 つのプレフィックスを追加します。両方のゲートウェイは独自の Cedar ポリシーを評価します。ソース Gateway は呼び出し元に対してプレフィックス付きアクションを認可し、次にターゲット Gateway は内部アクションに対してソース Gateway の実行ロールを認可します。
このジェネレーターを使用する前に、以下を確認してください:
- 2 つの
agentcore-gatewayプロジェクト
両方のゲートウェイは protocol: mcp を持つ必要があり、ターゲットゲートウェイは auth: iam を持つ必要があります。ソースゲートウェイは独自の実行ロールで署名してターゲットを呼び出すため、ターゲットのインバウンド認証のみが IAM である必要があります。ジェネレーターはこれを検証し、ゲートウェイ間でサイクルを作成する接続も拒否します。サイクルがあると tools/list で無限に再帰してしまいます。
ジェネレーターの実行
Section titled “ジェネレーターの実行”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- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - connection - 必須パラメータを入力
- クリック
Generate
集約する Gateway プロジェクトをソースとして選択し、集約される Gateway をターゲットとして選択します。
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| sourceProject 必須 | string | - | ソース プロジェクト |
| targetProject 必須 | string | - | 接続先のターゲット プロジェクト |
| sourceComponent | string | - | 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。 |
| targetComponent | string | - | 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。 |
| preferInstallDependencies | boolean | true | ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。 |
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは新しいソースファイルを生成するのではなく、既存のプロジェクトを接続します。以下のファイルが変更されます:
Directorypackages/<source-gateway>
- project.json ソース Gateway の
devターゲットがターゲットゲートウェイのdevターゲットへの依存関係を取得 - local-dev.ts
ATTACHED_MCP_SERVERSが更新され、ローカルゲートウェイがターゲットゲートウェイを集約
- project.json ソース Gateway の
ソース Gateway プロジェクトの dev ターゲットはターゲット Gateway の dev ターゲットへの依存関係を取得するため、ソース Gateway をローカルで実行すると、ターゲットゲートウェイ(およびそれに接続されているすべての MCP サーバー)も起動します。ターゲットゲートウェイはソース Gateway プロジェクトの local-dev.ts にも登録され、ローカルゲートウェイがそのツールを集約します。
スタックへのゲートウェイターゲットの追加
Section titled “スタックへのゲートウェイターゲットの追加”ジェネレーターは、どのスタックまたはモジュールが Gateways をインスタンス化するかを知らないため、ゲートウェイターゲットをインフラストラクチャに自動的に接続できません。gateway.addGateway(targetGateway) の呼び出しを 1 回、自分で追加してください。
Gateways をインスタンス化するスタックで、ターゲットゲートウェイをソースゲートウェイのターゲットとして登録します:
const innerGateway = new InnerGateway(this, 'InnerGateway');const outerGateway = new OuterGateway(this, 'OuterGateway');
// Register the inner gateway as a target of the outer gateway. The target// name defaults to the inner gateway's `gatewayName` (its class name in// kebab-case, e.g. `InnerGateway` -> `inner-gateway`).outerGateway.addGateway(innerGateway);Gateway ターゲット名(デフォルトではターゲットゲートウェイの gatewayName)は、ソースゲートウェイの Cedar アクション名にプレフィックスを付けます。アクション形式は AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>" です。ポリシーの記述セクションを参照してください。ターゲット名は短く安定したものにしてください。後で変更すると、古い名前を参照する Cedar ポリシーが無効になります。
デフォルトのターゲット名を上書きするには、gatewayTargetName を渡します:
outerGateway.addGateway(innerGateway, { gatewayTargetName: 'inner' });コンストラクトは、ソースゲートウェイの実行ロールにターゲットゲートウェイへの bedrock-agentcore:InvokeGateway アクセスを付与し、ソースゲートウェイが独自の実行ロールを使用してアウトバウンド呼び出しに署名できるように、ターゲットを iamCredentialProvider.service = 'bedrock-agentcore' で構成します。ターゲットは、ターゲットゲートウェイとそのすべてのターゲットの後に作成されます。これは、AgentCore が作成時にターゲットのツールを取得するためです。
Gateways をインスタンス化する Terraform ファイルで、ゲートウェイターゲットを接続します:
module "inner_gateway" { source = "../../common/terraform/src/app/gateways/inner-gateway"
# Target ids of the inner gateway's own targets (e.g. its MCP servers), so # its gateway_url is not consumed until it serves their tools. tool_dependencies = [aws_bedrockagentcore_gateway_target.my_mcp_server.target_id]}
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] } ]}
# Register the inner gateway as a target of the outer gatewayresource "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 “ローカル開発”ソース Gateway をローカルで実行するには:
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 アクション名は、ローカル実行とデプロイ実行の間で一貫性が保たれます。