API に Spike Arrest ポリシーを追加する

演習内容

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

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

必要なもの

  • 評価アカウント。まだ持っていない場合は、最初の API プロキシを構築するの指示に従って登録できます。
  • プロキシに含まれる 1 つ以上のポリシー(これもスタートガイド チュートリアルの一部です)。
  • curl。コマンドラインから API 呼び出しを行うために、マシン上にインストールされている必要があります。

Spike Arrest ポリシーを追加する

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

次の手順で、API プロキシに Spike Arrest ポリシーを追加します。

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

    API プロキシ エディタを開いていない場合は、管理 UI メニューで [APIs] > [API Proxies] の順に選択します。

    スタートガイド チュートリアルを使用している場合は、API プロキシを作成するで作成した getstarted プロキシに追加することもできます。

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

  2. 左側のナビゲータ ペインで、[Proxy Endpoints] > [default] の順に移動し、[PreFlow] をクリックします(フローのコンセプトについては、別のチュートリアルで説明します)。
  3. リクエストの PreFlow に対応する [+Step] ボタン(上側)をクリックします。これにより、作成可能なポリシーの一覧がカテゴリ別に表示されます。

    リクエストの PreFlow で [Step] をクリック

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

    Spike Arrest ポリシーの作成

  5. デフォルトの名前をそのままにして、[Add] をクリックします。新しいポリシーがリクエストの PreFlow フローに適用されます。
  6. ナビゲータで [Proxy Endpoints] > [default] の順に移動し、PreFlow が選択されていることを確認して、API プロキシ エディタで次のことを確認します。
    • API ポリシー エディタの左側にあるナビゲーターで、[Policies] の下に新しい Spike Arrest-1 ポリシーが追加されている。
    • API プロキシ エディタの上部中央にある [Designer view] に、Spike Arrest-1 アイコンが追加されている。これは、プロキシのメッセージ フローを視覚的に表しています。
    • API プロキシ エディタの下部中央にある [Code view] に、ポリシーの XML が表示されている。

    Spike Arrest ポリシーを含むプレフローの表示

  7. ナビゲータの [Policies] の下にある [Spike Arrest-1] を選択し、API プロキシ エディタで次のことを確認します。
    • API プロキシ エディタの上部中央にある [Designer view] に、ポリシーの詳細が表示されている。
    • API ポリシー エディタの下部中央にある [Code view] に、ポリシーの XML が表示されている。
    • API ポリシー エディタの右側にある [Property Inspector] に、ポリシーの XML 要素と属性値が表示されている。

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

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

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

  9. [Save] をクリックして、変更を含む現在のリビジョンを保存します。
  10. curl を使用して API を再度呼び出します。org_name は Apigee 組織名に置き換えます。

    curl "http://org_name-test.apigee.net/getstarted"

    例:

    curl "http://ahamilton-eval-test.apigee.net/getstarted" | python -m json.tool

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

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

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

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