API に SpikeArrest ポリシーを追加する

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

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

学習内容

このチュートリアルでは、次の方法を学習します。

  • リクエストとレスポンスに影響を及ぼすポリシーを追加する。
  • ポリシーの効果を確認する。

必要なもの

  • Apigee のインストール。概要と前提条件をご覧ください。
  • 1 つ以上のポリシーが接続されている、動作する API プロキシ。最初の API プロキシの概要を構築するをご覧ください。
  • API 呼び出しを行うためにマシンにインストールされている HTTP API クライアント。チュートリアルの例では、curl を使用します。

SpikeArrest ポリシーを追加する

このチュートリアルでは、突然のトラフィックの急増からターゲット サービスを保護するために、Spike Arrest ポリシーを追加して構成します。トラフィックの急増の原因としては、使用量の増加、クライアントのバグ、悪意のある攻撃などが考えられます。リクエスト数がレート制限を超えると、API は HTTP 429 エラーを返します。

新しいプロキシ エディタ

API プロキシに SpikeArrest ポリシーを追加するには:

  1. Cloud コンソールの Apigee UI を使用している場合: [プロキシ開発] > [API プロキシ] を選択します。

    従来の Apigee UI を使用している場合: [Develop] > [API Proxies] を選択して、[Proxies] ペインでプロキシの環境を選択します。

    「はじめに」のチュートリアルを使用している場合は、API プロキシを作成するで作成した API プロキシに追加できます。

  2. [Develop] タブをクリックします。
  3. 左側のパネルで、[Policies] 行の [+] ボタンをクリックします。
  4. [Create policy] ダイアログで、[Select policy type] フィールドをクリックし、[Traffic Management] まで下にスクロールし、[SpikeArrest] を選択します。

  5. 必要に応じて、ポリシーの [Name](名前)と [Display name](表示名)を変更できます。デフォルトでは、ポリシー名には短い接頭辞(この場合は SA-)が付いています。接頭辞の後に、ダッシュで区切られた一連の記述的単語を追加できます。命名規則をご覧ください。

    [Create policy] ダイアログ。

    完了したら、[Create] をクリックしてポリシーを作成します。

以上で Spike Arrest ポリシーを作成できたので、これを PreFlow のステップに追加できます。

  1. 左側のペインで [Proxy Endpoints] > [default] > [PreFlow] を選択します。

    プロキシ エディタで PreFlow のターゲット エンドポイントを選択します。

    注: すべての要素を表示するため、場合によっては右側のペインでビジュアル エディタを広げる必要があります。これを行うには、ビジュアル エディタとテキスト エディタの間の分割線をクリックして下に少しドラッグします。

  2. ビジュアル エディタの右下にある [Response] ペインの [PreFlow] の横にある [+] ボタンをクリックします。

    [Response] ペインの [PreFlow] の横にある [+] ボタンをクリックします。

  3. [Add policy step] ダイアログで、[Spike Arrest] ポリシーを選択します。
  4. [Add] をクリックしてポリシーを接続します。

    Spike Arrest ポリシーが [Response] ペインに表示されます。

    [Response] ペインに表示された Spike Arrest ポリシー。

以上で Spike Arrest ポリシーを PreFlow に接続できたので、ポリシーのコードを変更してみます。

  1. [Response] ペインで [SA-] を選択します。

    [Policies] タブに表示された Spike Arrest ポリシー。

  2. テキスト エディタに、PreFlow の Response 要素の Spike Arrest ポリシー ステップを含む、プロキシの XML コードが表示されます。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SpikeArrest continueOnError="false" enabled="true" name="SA-">
        <DisplayName>SA-</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <MessageWeight ref="request.header.weight"/>
        <Rate>30ps</Rate>
    </SpikeArrest>
  3. ポリシーの XML で、<Rate> 要素の値を 1pm に変更します(これにより、クラウドでは 60 秒ごとに約 2 件のリクエストが許可されます)。

    レートは、分単位(pm)または秒単位(ps)の整数値で指定できます。このチュートリアルでは、ポリシーを説明するためにのみ、この制限は非常に低く設定されています。通常は、はるかに高い制限が設定されます。 

    [Property Inspector] の Rate 値も 1pm に変更されます。また、[Property Inspector] で [Rate] の値を変更すると、XML ビューに反映されます。

  4. [Save] をクリックし、現在のリビジョンに変更を加えて保存します。

従来バージョンのプロキシ エディタ

API プロキシに SpikeArrest ポリシーを追加するには:

  1. Apigee UI にログインします。
  2. 左側のナビゲーション バーで [Develop] > [API Proxies] を選択します。
  3. SpikeArrest ポリシーを追加する API プロキシを選択します。

    「はじめに」のチュートリアルを使用している場合は、API プロキシを作成するで作成した API プロキシに追加できます。

  4. 新しい API プロキシのエディタで [Develop] タブをクリックします。

    [Develop] タブは、[Overview] タブと [Trace] タブの間にあります。

    API プロキシ エディタを使用すると、API プロキシの構造を表示してフローを構成できます。このエディタには、プロキシのリクエスト メッセージとレスポンス メッセージのフローが視覚的に表示されます。また、プロキシを定義する、基盤となる XML の編集画面も表示されます。

  5. 左側の [Navigator] ペインで、[Proxy Endpoints] > [default] の下にある [PreFlow] をクリックします(フローのコンセプトについては、別のチュートリアルで説明します)。
  6. リクエスト PreFlow に対応する最上部の [+ Step] ボタンをクリックします。これにより、作成可能なすべてのポリシーの分類リストが表示されます。

    リクエスト PreFlow で [Step] をクリックします。

  7. [Traffic Management] カテゴリで、[SpikeArrest] を選択します。[New Policy] ダイアログが表示されます。

    SpikeArrest ポリシーの作成

  8. デフォルト名をそのまま残し、[Add] をクリックします。新しいポリシーが、リクエストの PreFlow フローに適用されます。
  9. [Navigator] で、[Proxy Endpoints] > [default] の下の PreFlow がまだ選択されていることを確認します。API プロキシ エディタで、次の点に注目してください。
    • 新しい SpikeArrest-1 ポリシーが、API プロキシ エディタの左側にある [Navigator] の [Policies] の下に追加されます。
    • SpikeArrest-1 アイコンが、API プロキシ エディタの上部中央にあるデザイナー ビューに追加されて、プロキシのメッセージ フローが視覚的に表示されます。
    • ポリシーの XML が、API プロキシ エディタの下部中央にあるコードビューに表示されます。

    SpikeArrest ポリシーを含む PreFlow の表示

  10. [Navigator] の [Policies] の下にある [SpikeArrest-1] を選択します。API プロキシ エディタで次の点に注目してください。
    • ポリシーの詳細が、API プロキシ エディタの上部中央にあるデザイナー ビューに表示されます。
    • ポリシーの XML が、API プロキシ エディタの下部中央にあるコードビューに表示されます。
    • API ポリシー エディタの右側にある [Property Inspector] に、ポリシーの XML 要素と属性値が表示されます。

    [Property Inspector] ペインには、SpikeArrest-1 ポリシーの値が表示されます。

  11. ポリシーの XML で、<Rate> 要素の値を 1pm に変更します(これにより、クラウドでは 60 秒ごとに約 2 件のリクエストが許可されます)。

    レートは、分単位(pm)または秒単位(ps)の整数値で指定できます。このチュートリアルでは、ポリシーを説明するためにのみ、この制限は非常に低く設定されています。通常は、はるかに高い制限が設定されます。 

    [Property Inspector] の Rate 値も 1pm に変更されます。また、[Property Inspector] で [Rate] の値を変更すると、XML ビューに反映されます。

  12. [Save] をクリックし、現在のリビジョンに変更を加えて保存します。
  13. [Deploy to:] ボタンを使用して、変更をデプロイします。
  14. ドメインの URL を使用して、curl で API を呼び出します。

    curl "http://YOUR_DOMAIN/myproxy"

    各要素の意味は次のとおりです。

    • ENV_GROUP_HOSTNAME は、プロビジョニングで設定した環境グループのホスト名です。
    • DOMAIN_HOSTNAME は、ドメインのホスト名です。

    詳細については、API プロキシのテストをご覧ください。

    リクエストが成功し、以前と同じ XML レスポンスが表示されていることを確認します(ウェブブラウザに URL だけを入力することもできます)。

    次に、Rate 設定をさまざまな方法でテストしてみます。

    • 1 分以内に curl コマンド(または、ブラウザ ウィンドウの更新)を 2、3 回実行します。ポリシーのレート制限を超えたため、次のメッセージが表示されます。
      {
      "fault": {
        "faultstring":"Spike arrest violation. Allowed rate : 1pm",
        "detail": {
          "errorcode":"policies.ratelimit.SpikeArrestViolation"}
        }
      }

      1 分以内にこれ以上の呼び出しを行おうとすると、この障害メッセージが表示され続けます。

    • ポリシーを編集して、Rate> 制限を 15pm に設定します(これにより、クラウドでは 4 秒ごとに約 2 件のリクエストが許可されます)。そのうえで、API プロキシを保存してデプロイします。
    • 繰り返し curl コマンドを実行するか、ブラウザを更新します(curl のほうが高速です)。4 秒間に 1、2 回の呼び出しを行っても、呼び出しは成功することに注意してください。4 秒間に 3 回以上の呼び出しを行うと、障害エラーが発生します。ただし、(1pm が設定されている場合のように)1 分間ブロックされた状態が継続するのではなく、4 秒の間隔が経過した後は、引き続き呼び出しを行うことができます。