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

演習内容

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

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

必要なもの

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

Spike Arrest ポリシーを追加する

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

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

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

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

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

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

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

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

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

    Spike Arrest ポリシーの作成

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

    Spike Arrest ポリシーを含む PreFlow の表示

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

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

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

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

  12. [Save] をクリックして、変更を含む現在のリビジョンを保存します。
  13. 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 だけを入力することもできます)。

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

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

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