このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する
学習内容
このチュートリアルでは、次の方法を学習します。
- リクエストとレスポンスに影響を及ぼすポリシーを追加する。
- ポリシーの効果を確認する。
必要なもの
- Apigee のインストール。概要と前提条件をご覧ください。
- 1 つ以上のポリシーが接続されている、動作する API プロキシ。最初の API プロキシの概要を構築するをご覧ください。
- API 呼び出しを行うためにマシンにインストールされている HTTP API クライアント。チュートリアルの例では、
curl
を使用します。
SpikeArrest ポリシーを追加する
このチュートリアルでは、突然のトラフィックの急増からターゲット サービスを保護するために、Spike Arrest ポリシーを追加して構成します。トラフィックの急増の原因としては、使用量の増加、クライアントのバグ、悪意のある攻撃などが考えられます。リクエスト数がレート制限を超えると、API は HTTP 429
エラーを返します。
新しいプロキシ エディタ
API プロキシに SpikeArrest ポリシーを追加するには:
Cloud コンソールの Apigee UI を使用している場合: [プロキシ開発] > [API プロキシ] を選択します。
従来の Apigee UI を使用している場合: [Develop] > [API Proxies] を選択して、[Proxies] ペインでプロキシの環境を選択します。
「はじめに」のチュートリアルを使用している場合は、API プロキシを作成するで作成した API プロキシに追加できます。
- [Develop] タブをクリックします。
- 左側のパネルで、[Policies] 行の [+] ボタンをクリックします。
[Create policy] ダイアログで、[Select policy type] フィールドをクリックし、[Traffic Management] まで下にスクロールし、[SpikeArrest] を選択します。
必要に応じて、ポリシーの [Name](名前)と [Display name](表示名)を変更できます。デフォルトでは、ポリシー名には短い接頭辞(この場合は SA-)が付いています。接頭辞の後に、ダッシュで区切られた一連の記述的単語を追加できます。命名規則をご覧ください。
完了したら、[Create] をクリックしてポリシーを作成します。
以上で Spike Arrest ポリシーを作成できたので、これを PreFlow のステップに追加できます。
- 左側のペインで [Proxy Endpoints] > [default] > [PreFlow] を選択します。
注: すべての要素を表示するため、場合によっては右側のペインでビジュアル エディタを広げる必要があります。これを行うには、ビジュアル エディタとテキスト エディタの間の分割線をクリックして下に少しドラッグします。
- ビジュアル エディタの右下にある [Response] ペインの [PreFlow] の横にある [+] ボタンをクリックします。
- [Add policy step] ダイアログで、[Spike Arrest] ポリシーを選択します。
[Add] をクリックしてポリシーを接続します。
Spike Arrest ポリシーが [Response] ペインに表示されます。
以上で Spike Arrest ポリシーを PreFlow に接続できたので、ポリシーのコードを変更してみます。
[Response] ペインで [SA-] を選択します。
- テキスト エディタに、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>
-
ポリシーの XML で、
<Rate>
要素の値を1pm
に変更します(これにより、クラウドでは 60 秒ごとに約 2 件のリクエストが許可されます)。レートは、分単位(
pm
)または秒単位(ps
)の整数値で指定できます。このチュートリアルでは、ポリシーを説明するためにのみ、この制限は非常に低く設定されています。通常は、はるかに高い制限が設定されます。[Property Inspector] の
Rate
値も1pm
に変更されます。また、[Property Inspector] で [Rate] の値を変更すると、XML ビューに反映されます。 - [Save] をクリックし、現在のリビジョンに変更を加えて保存します。
従来バージョンのプロキシ エディタ
API プロキシに SpikeArrest ポリシーを追加するには:
- Apigee UI にログインします。
- 左側のナビゲーション バーで [Develop] > [API Proxies] を選択します。
- SpikeArrest ポリシーを追加する API プロキシを選択します。
「はじめに」のチュートリアルを使用している場合は、API プロキシを作成するで作成した API プロキシに追加できます。
- 新しい API プロキシのエディタで [Develop] タブをクリックします。
API プロキシ エディタを使用すると、API プロキシの構造を表示してフローを構成できます。このエディタには、プロキシのリクエスト メッセージとレスポンス メッセージのフローが視覚的に表示されます。また、プロキシを定義する、基盤となる XML の編集画面も表示されます。
- 左側の [Navigator] ペインで、[Proxy Endpoints] > [default] の下にある [PreFlow] をクリックします(フローのコンセプトについては、別のチュートリアルで説明します)。
- リクエスト PreFlow に対応する最上部の [+ Step] ボタンをクリックします。これにより、作成可能なすべてのポリシーの分類リストが表示されます。
- [Traffic Management] カテゴリで、[SpikeArrest] を選択します。[New Policy] ダイアログが表示されます。
- デフォルト名をそのまま残し、[Add] をクリックします。新しいポリシーが、リクエストの PreFlow フローに適用されます。
- [Navigator] で、[Proxy Endpoints] > [default] の下の PreFlow がまだ選択されていることを確認します。API プロキシ エディタで、次の点に注目してください。
- 新しい SpikeArrest-1 ポリシーが、API プロキシ エディタの左側にある [Navigator] の [Policies] の下に追加されます。
- SpikeArrest-1 アイコンが、API プロキシ エディタの上部中央にあるデザイナー ビューに追加されて、プロキシのメッセージ フローが視覚的に表示されます。
- ポリシーの XML が、API プロキシ エディタの下部中央にあるコードビューに表示されます。
- [Navigator] の [Policies] の下にある [SpikeArrest-1] を選択します。API プロキシ エディタで次の点に注目してください。
- ポリシーの詳細が、API プロキシ エディタの上部中央にあるデザイナー ビューに表示されます。
- ポリシーの XML が、API プロキシ エディタの下部中央にあるコードビューに表示されます。
- API ポリシー エディタの右側にある [Property Inspector] に、ポリシーの XML 要素と属性値が表示されます。
-
ポリシーの XML で、
<Rate>
要素の値を1pm
に変更します(これにより、クラウドでは 60 秒ごとに約 2 件のリクエストが許可されます)。レートは、分単位(
pm
)または秒単位(ps
)の整数値で指定できます。このチュートリアルでは、ポリシーを説明するためにのみ、この制限は非常に低く設定されています。通常は、はるかに高い制限が設定されます。[Property Inspector] の
Rate
値も1pm
に変更されます。また、[Property Inspector] で [Rate] の値を変更すると、XML ビューに反映されます。 - [Save] をクリックし、現在のリビジョンに変更を加えて保存します。
- [Deploy to:] ボタンを使用して、変更をデプロイします。
-
ドメインの 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 秒の間隔が経過した後は、引き続き呼び出しを行うことができます。