あるプロキシが別のプロキシのターゲット エンドポイントになるように指定できます。これにより、事実上、プロキシ チェーンで 2 つのプロキシを接続することになります。このようにプロキシをチェーンで接続すると、ネットワーク ホップが回避されるため、全体のパフォーマンスが向上します。
プロキシ チェーンでは、あるプロキシがもう一方のプロキシのローカル ターゲット エンドポイントになるように指定します。HTTPTargetConnection
要素を使用して 2 番目のプロキシを呼び出すのではなく、LocalTargetConnection
要素を使用します。
<LocalTargetConnection> <APIProxy>myproxy2</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
プロキシ チェーンは、他のプロキシが利用する個別の詳細レベルの機能を提供するプロキシが存在する場合に役立つことがあります。たとえば、バックエンド データストアにかかわる作成 / 読み取り / 更新 / 削除オペレーションを公開するプロキシは、データをクライアントに公開する他の複数のプロキシのターゲット プロキシになることがあります。
動画: API プロキシ チェーンについて詳しく説明する短い動画をご覧ください。
プロキシ チェーンの動作
プロキシ チェーンでは、ローカル接続を使用して、あるプロキシを別のプロキシから呼び出す場合のネットワーク オーバーヘッドを最小限に抑えます。このローカル接続は、ロードバランサ、ルーター、メッセージ プロセッサなどのネットワーク機能をバイパスするため、より効率的です。
HTTPTargetConnection と LocalTargetConnection(プロキシ チェーン)を使用してプロキシを接続する場合の違いを以下に示します。
一方が他方のローカル ターゲット エンドポイントになるように指定して、プロキシを接続します。プロキシ間のローカル接続は以下の 2 通りの方法で作成できます。
- ターゲット プロキシの名前と ProxyEndpoint 名を指定する。
- ターゲット プロキシ エンドポイントへのパスを指定する。
以下に説明するように、TargetEndpoint
構成内で LocalTargetConnection
要素を使用してターゲット プロキシを接続します。
プロキシ名によるプロキシの接続
ターゲット プロキシは名前によって指定できます。接続をゼロから作成し、プロキシをまとめて開発する場合、この方法が最も便利である可能性があります。名前がわからない場合(または名前が変わる可能性がある場合)は、以下で説明するような、ターゲット プロキシのエンドポイント パスへの接続を検討してください。
名前でターゲット プロキシに接続する場合、プロキシの名前とその ProxyEndpoint
の名前を指定します。
以下の例では、data-manager
と呼ばれるターゲット プロキシを data-manager
によって公開される ProxyEndpoint
名とともに指定しています。リファレンス情報については、API プロキシ構成リファレンスをご覧ください。
<TargetEndpoint name="datamanager"> <PreFlow name="PreFlow"> <!-- PreFlow policies --> </PreFlow> <PostFlow name="PostFlow"> <!-- PostFlow policies --> </PostFlow> <LocalTargetConnection> <APIProxy>data-manager</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection> </TargetEndpoint>
パスによるプロキシの接続
ターゲット プロキシはそのエンドポイント パスによって指定できます。プロキシ名がわからない場合や、名前が変わる可能性がある場合は、この方法で指定できます。
プロキシがターゲット プロキシのコンシューマにすぎない場合(自分で両方を開発するわけではない場合など)、パスは最も信頼できる接続方法です。たとえば、接続するプロキシが他のチームによって開発、維持されている場合は、信頼できるエンドポイント パスを使用して接続できます。
以下の例では、/v1/streetcarts/foodcarts/data-manager
にあるターゲット プロキシを指定しています。ここで、ホストは現在のプロキシと同じであるものとします。リファレンス情報については、API プロキシ構成リファレンスをご覧ください。
<TargetEndpoint name="datamanager"> <PreFlow name="PreFlow"> <!-- PreFlow policies --> </PreFlow> <PostFlow name="PostFlow"> <!-- PostFlow policies --> </PostFlow> <LocalTargetConnection> <Path>/v1/streetcarts/foodcarts/data-manager</Path> </LocalTargetConnection> </TargetEndpoint>
管理コンソールによるプロキシの接続
Edge 管理コンソールを使用して、プロキシ チェーン接続を作成できます。
- ターゲット プロキシを利用するプロキシを開きます。
- [Navigator] で、[Target Endpoints] の横にあるプラス記号をクリックします。
- [New Target Endpoint] ダイアログで、ターゲット エンドポイントの名前を入力します。
- [Target Endpoint Name] ボックスで、以下のいずれかを選択します。
- Proxy Chaining: 組織と環境にすでに存在するプロキシのリストから選択します。
- [Proxy Name] プルダウンで、ターゲット プロキシを選択します。
- [Proxy Endpoint] ボックスに、接続先のターゲット プロキシ エンドポイントのパスを入力します。
- Path Chaining:
/mypath/myproxy/myendpoint
など、ターゲット プロキシのベースパスを入力します。
- Proxy Chaining: 組織と環境にすでに存在するプロキシのリストから選択します。
- [Add] をクリックします。
チェーンで接続されたプロキシ、API プロダクト、セキュリティ
プロキシ チェーンは、両方のプロキシが同じ API プロダクトに存在する場合に最適です。デフォルトでは、クライアントは両方を使用できます。Apigee では、クライアントがアクセス権を持っていない別の API プロダクトへの 2 番目のプロキシのバンドルを現在サポートしていません。
2 番目のプロキシを直接クライアント リクエストから保護する必要がある場合は、2 番目のプロキシでクライアントの IP アドレスを確認するロジックを追加することを検討してください。チェーンを使用して呼び出しを行った場合、IP アドレスはローカルです。処理を続行する前に、ローカルであることをコードで検証できます。この方法については、アクセス制御ポリシーをご覧ください。