LoginSignup
14
13

More than 5 years have passed since last update.

Amazon API Gatewayの「使用量プラン」を試す

Last updated at Posted at 2016-08-16

APIキー別にAPIの利用量を設定できるということだったので、試してみた。

なお、API自体はSample APIとかいうのを使ってみました。

コンソールから「使用量プラン」を選択

スクリーンショット 2016-08-16 15.34.40.png

「使用量プランの有効化」をクリックするとリスト画面に移動します。

スクリーンショット 2016-08-16 15.34.59.png

左上の「作成」をクリックしてプランを作りましょう。

プランを作成する

関連付けるAPIステージを選択

スクリーンショット 2016-08-16 15.36.01.png
プランを設定するAPIステージを聞かれるので設定します。

関連付けるAPIキーを選択

スクリーンショット 2016-08-16 15.52.58.png
プランで使用するAPIキーを設定します。

作ってない場合は「APIキーを作成して利用量プランに追加」で作成できます。
スクリーンショット 2016-08-16 15.53.16.png

プラン設定

秒間・月間リクエスト数上限やトークンバケットの容量を指定します。
スクリーンショット 2016-08-16 15.53.32.png

APIにキーを設定する

APIキーの設定は、「認証の設定」から「APIキーの必要性」をtrueにすればOKです。
スクリーンショット 2016-08-16 15.54.19.png

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
  }
]

エラーになるまで叩く

ちゃんとリクエストを送り過ぎた時にエラーになるか確認してみます。

check.sh

#/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への月間リクエスト回数は増やすことができます。

「使用量プラン」の「拡張」を選択して、増やしましょう。
スクリーンショット 2016-08-16 16.30.07.png

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回目からエラーになっています。

使用状況も確認できる

スクリーンショット 2016-08-16 16.34.09.png
どれくらいAPIにリクエストがきたのかを確認することもできます。
スクリーンショット 2016-08-16 16.34.47.png

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とかで取れるか、将来的に取れるようになるはずなんで追い追い調べてみます。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13