【新機能】Amazon API Gatewayに「使用量プラン」機能が追加。キーごとにスロットリングやリクエストの制限が可能に

2016.08.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。先程AWS Summit NewYorkのキーノートが終わり、新機能がドカドカ発表されました。 ELBの新しいオプションやようやく出たかKinesis Analytics、ようやく出たかIPv6など目玉機能が目白押しの中、 私の方からはAPI Gatewayの新機能をご紹介します。

API Gatewayをビジネス的に使うには

API Gatewayは文字通り簡単にAPIを作ることができる画期的なサービスですが、APIを使っていざ運用を行う際にビジネスモデルとして欠かせない機能として所謂「プレミアムプラン」「有料会員プラン」というものがあります。一般会員なら途中で繋がらなくなったりする時もプレミアム会員なら繋がる、無料会員なら月に何回までアクセス可能、と制限されていたものが有料会員になれば無制限アクセスが可能となる、等のビジネスモデルです。よくありますよね。これらのビジネスモデルは課金による差別化により利益を生むことができるようになる、経営戦略上重要な方法論です。

ですが今までAPI Gatewayの「つながりやすさ」はステージ毎にしか設定できませんでした。それが今回の「使用量プラン」機能によりAPIキーごとに設定できるようになりました。これで一般会員よりシルバー会員、シルバー会員よりゴールド会員の方をより使いやすく、というような実装が可能となりました。

やってみた

それではサクッと試してみましょう。マネージメントコンソールのAPI Gatewayに行ってみると新たに「使用量プラン」というナビが増えています。クリックするとまず有効化するかどうかのボタンが現れます。

usage_plan1

デフォルトでは使用量プランは有効化されていません。クリックして有効化しましょう。 有効化するとこのような画面になります。

usage_plan2

使用量プランの作成ボタンをクリックします。出てきた項目に必要な数値を入れていきます。

usage_plan3

入れる項目はスロットリングのレートとバースト、クォータの値です。スロットリングのレートとバーストを理解するには「トークンバケットモデル」というスロットリング調整の考え方(アルゴリズム)を理解しておく必要があります。

トークンバケットモデルではバケット(ばけつ)の中にトークンがまず入っています。リクエストがきたら1つのリクエストにトークンを合わせてネットワークに送り出します。つまり、バケットの中にあるトークンの数だけリクエストを送ることができ、なくなったら{"message": "null"}という形でレスポンスを返します。この「バケットに入る最大トークン量」が「バースト」です。 一方このバケットには一定単位でトークンが補充されていきます。ですのでバケットが空になっても補充された分のトークンは使えるようになるため、リクエスト自体は送れるようになりますが、バースト分のトークンを使いきった時はこの補充されたトークンのみを使えるようになるためつながりやすさは落ちます。この補充される割合を「レート」と言います。

つまり上の例では200リクエストまでまず一気に捌けますが、その後は20リクエスト/秒の割合でリクエストを送ることが出来ます。リクエストの数が20/秒以下になっていくと余った分がどんどんバケットに溜まっていき、最大で200リクエストまで溜める事が出来ます。短期的には200リクエストですが、中長期的には20リクエスト/秒、ということですね。

usage_plan4

次にこのプランを適用するステージを選択します。ステージで使用量のプランを考える必要がない場合はここはスキップでも構いません。開発用はキー制限を無制限にしたい、という用途に使えますね。

usage_plan5

これが今回の本命です。使うAPIを選択して、作った使用量プランを適用させていきます。 これで設定は終わりました。後はプレビューを確認したら

usage_plan6

登録すればOKです。

usage_plan7

尚、今回の機能追加では使用状況を確認するボタンと拡張をするボタンが増えました。

usage_plan8

これで現在のAPIの状況が見えるようになりました。

usage_plan9

拡張機能は一時的にクォータのような単位ごとの使用リクエスト上限をアップさせる機能です。例えばゲームでAPI Gatewayを使う場合は何かしらの「ごほうび」が貰えると一時的につながりやすくなる、というような場合ですね。ここらへんはAPIでプログラマブルに解決した方がいいでしょう。

まとめ

いかがでしたでしょうか。この機能はビジネスモデルにも直結する大事なアップデートになります。是非とも試してみて、その簡単さを実感してみてください!

参考リンク