Edited at

AWS API GatewayにおけるThrottling問題

More than 3 years have passed since last update.

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 は設定したほうが安全なようです。