API プロキシのチェーン接続

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示する。

あるプロキシが別のプロキシのターゲット エンドポイントになるように指定できます。これにより、事実上、プロキシ チェーンで 2 つのプロキシを接続することになります。このようにプロキシをチェーンで接続すると、ネットワーク ホップが回避されるため、全体のパフォーマンスが向上します。

プロキシ チェーンでは、あるプロキシがもう一方のプロキシのローカル ターゲット エンドポイントになるように指定します。HTTPTargetConnection 要素を使用して 2 番目のプロキシを呼び出すのではなく、LocalTargetConnection 要素を使用します。

<LocalTargetConnection>
    <APIProxy>myproxy2</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

プロキシ チェーンは、他のプロキシが利用する個別の詳細レベルの機能を提供するプロキシが存在する場合に役立つことがあります。たとえば、バックエンド データストアを使用して create/read/update/delete オペレーションを公開するプロキシは、データをクライアントに公開する他の複数のプロキシのターゲット プロキシになることがあります。

動画: API プロキシ チェーンについて詳しく説明する短い動画をご覧ください。

プロキシ チェーンの動作

プロキシ チェーンでは、ローカル接続を使用して、あるプロキシを別のプロキシから呼び出す場合のネットワーク オーバーヘッドを最小限に抑えます。このローカル接続は、ロードバランサ、ルーター、メッセージ プロセッサなどのネットワーク機能を迂回するため、より効率的です。

HTTPTargetConnectionLocalTargetConnection(プロキシ チェーン接続)でプロキシを接続する場合の違いを以下に示します。

プロキシ チェーン接続なしのプロキシ間呼び出しの図。

プロキシ チェーン接続でのプロキシ間呼び出しの図。

一方が他方のローカル ターゲット エンドポイントになるように指定して、プロキシを接続します。上の図の構成(プロキシ チェーン接続を使用したプロキシ間の呼び出し)では、ProxyB(/proxyB)を ProxyA(/proxyA)のローカル ターゲット エンドポイントに指定します。これにより、ProxyA に到着したリクエストが ProxyB に転送されます。

プロキシ間のローカル接続は、次の 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>

<LocalTargetConnection><Path> 要素には文字列を指定できます。また、メッセージ テンプレートを使用して動的に値を割り当てることもできます。

Apigee UI を使用したプロキシの接続

Apigee UI を使用して、プロキシ名またはパスによってプロキシを接続することもできます。以下の例では、ProxyA と ProxyB の 2 つのプロキシがあり、ProxyB を ProxyA のターゲット エンドポイントに指定します。プロキシ名でプロキシを接続するには、次の操作を行います。

  1. Apigee UI にログインします。
  2. 左側のペインで [Develop] > [Proxies] を選択します。
  3. プロキシのリストで ProxyA を選択します。
  4. [Develop] タブをクリックします。
  5. [Code] ペインで、XML の <TargetEndpoint> セクションを次のように置き換えます。
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. [Save] をクリックします。

チェーンで接続されたプロキシ、API プロダクト、セキュリティ

プロキシ チェーンは、両方のプロキシが同じ API プロダクトに存在する場合に最適です。デフォルトでは、クライアントは両方を使用できます。Apigee では、クライアントがアクセスできない個別の API プロダクトに 2 番目のプロキシをバンドルすることはできません。

2 番目のプロキシを直接クライアント リクエストから保護する必要がある場合は、2 番目のプロキシにクライアントの IP アドレスを検証させるロジックを追加することを検討してください。チェーン接続で行われる呼び出しの場合、IP アドレスはローカル アドレスになります。処理を続行する前に、ローカル アドレスであることをコードで検証できます。方法については、AccessControl ポリシーをご覧ください。