LoginSignup
5
4

More than 5 years have passed since last update.

AWS API GatewayにおけるThrottling問題

Last updated at Posted at 2015-12-22

2015/11/27: 本件はAWSに報告済みの既知の問題です。
2015/12/24: AWSより回答がありました。問題改修までの間は、Clone from APIを使わない方が良いようです。本ドキュメントでは、Clone API利用時の回避策を記載しています。

概要

API GatewayのThrottling Settingsに関する不具合を共有します。
新規にAPIを作成する際はコピー元となるAPIを指定する機能があるのですが、ここに罠があります。

スクリーンショット 2015-12-22 22.33.33.png

Clone from APIを選択してAPIを作成すると、Throttling Settingsの挙動がコピー元にエイリアスされてしまうのです。
つまり、オリジンAPIからクローンAPIを作成し、クローンAPIの接続数を100から1に変更すると、オリジンAPIも接続数が1に書き換わってしまいます。
API Gatewayにおいて、開発用エンドポイントから本番用エンドポイントをクローンして運用する場合は注意が必要です。

再現手順

以下にAWSコンソールから問題を再現する手順を記載します。

  1. API Gatewayのダッシュボードから新規APIOrigin (API name) を作成。下図はIntegration typeHTTP Proxyに指定したもの。恐らくIntegration typeは何でも構わない
    スクリーンショット 2015-12-22 22.44.35.png

  2. 新規にStageを作成し、Throttling SettingsBurst LimitRateをそれぞれ100に指定
    スクリーンショット 2015-12-22 22.46.14.png

  3. API Gatewayのダッシュボードから新規APIClone (API name) を作成。API作成時のオプションで、API Clone from APIからOriginを選択。Integration typeOriginと同じものを指定
    スクリーンショット 2015-12-22 23.16.24.png

  4. 新規にStageを作成し、Throttling SettingsBurst LimitRate をそれぞれ 1に指定

Originに対し20回の連続アクセスを試みたところ、半数のレスポンスでHTTPステータス429が返されました。 429 は API Gatewayから返される、 Limit Exceeded Exception というエラーです。

Handling Errors in Amazon API Gateway - Error Codes (Client and Server Errors)

スクリーンショット 2015-12-22 23.22.38.png

つまり、Cloneに設定したはずのthrottleが Originにも適用されてしまっているということです。うーむ。。

回避策

Clone APIを作成した場合は、Stageから対象エンドポイントを開き、Settings のタイプを Override for this method に指定。ここで新たに Throttling Settings を指定することで問題を回避できました。

スクリーンショット 2015-12-22 22.58.24.png

問題が解消されるまでは、面倒ですがエンドポイント単位で Throttling Settings は設定したほうが安全なようです。

5
4
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
5
4