APIキー別にAPIの利用量を設定できるということだったので、試してみた。
- Amazon API Gateway 使用量プランのご紹介:https://aws.amazon.com/jp/about-aws/whats-new/2016/08/introducing-amazon-api-gateway-usage-plans/
- 【新機能】Amazon API Gatewayに「使用量プラン」機能が追加。キーごとにスロットリングやリクエストの制限が可能に:http://dev.classmethod.jp/cloud/aws/usage-plan-for-api-gateway/
なお、API自体はSample APIとかいうのを使ってみました。
コンソールから「使用量プラン」を選択
「使用量プランの有効化」をクリックするとリスト画面に移動します。
左上の「作成」をクリックしてプランを作りましょう。
プランを作成する
関連付けるAPIステージを選択
関連付けるAPIキーを選択
作ってない場合は「APIキーを作成して利用量プランに追加」で作成できます。
プラン設定
秒間・月間リクエスト数上限やトークンバケットの容量を指定します。
APIにキーを設定する
APIキーの設定は、「認証の設定」から「APIキーの必要性」をtrueにすればOKです。
APIを叩いてみる
$ curl https://wXXXXX.execute-api.us-west-2amazonaws.com/prod/pets/
{"message":"Forbidden"}
エラーになる。
APIキーをつけて送る
APIキーは「表示」を押すと確認できる。多分SDKとかでも取れるはずだから、実運用時はその辺を使うと思われる。
で、リクエストを出す時は「x-api-key」ヘッダを追加すればOK
$ curl https://wXXXXX.execute-api.us-west-2amazonaws.com/prod/pets/ --header 'x-api-key: XXXXXXXXXXXXXX'
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
エラーになるまで叩く
ちゃんとリクエストを送り過ぎた時にエラーになるか確認してみます。
# /bin/bash
for i in `seq 1 25`
do
echo $i
curl https://wXXXXX.execute-api.us-west-2amazonaws.com/prod/pets/ --header 'x-api-key: XXXXXXXXXXXXXX'
done
こんな感じでループさせてみました。
実行結果
16
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
17
{"message":"Limit Exceeded"}
18
{"message":"Limit Exceeded"}
19
{"message":"Limit Exceeded"}
20
{"message":"Limit Exceeded"}
21
{"message":"Limit Exceeded"}
22
{"message":"Limit Exceeded"}
23
{"message":"Limit Exceeded"}
24
17回目からエラーになっているのが確認できます。
拡張する
APIへの月間リクエスト回数は増やすことができます。
20回まで増やしたので、もう一度試します。
*なお、反映まで2〜3分ラグがある様子です。
リトライ
もう一度curlしてみます。
20
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
21
{"message":"Limit Exceeded"}
22
{"message":"Limit Exceeded"}
23
{"message":"Limit Exceeded"}
24
{"message":"Limit Exceeded"}
25
{"message":"Limit Exceeded"}
増やしたのが20なので、21回目からエラーになっています。
使用状況も確認できる
どれくらいAPIにリクエストがきたのかを確認することもできます。
JSON / CSV でエクスポートできる様子なのでJSONをエクスポートしてみました。
{
"thisPeriod": {
"XXXXXX": [
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
0,
20
],
[
40,
0
]
]
},
"startDate": "2016-08-01",
"endDate": "2016-08-16"
}
リクエスト数と利用数が配列で入っているっぽいですね。
多分SDKとかで取れるか、将来的に取れるようになるはずなんで追い追い調べてみます。