2015/11/27: 本件はAWSに報告済みの既知の問題です。
2015/12/24: AWSより回答がありました。問題改修までの間は、Clone from API
を使わない方が良いようです。本ドキュメントでは、Clone API利用時の回避策を記載しています。
概要
API GatewayのThrottling Settings
に関する不具合を共有します。
新規にAPIを作成する際はコピー元となるAPIを指定する機能があるのですが、ここに罠があります。
Clone from API
を選択してAPIを作成すると、Throttling Settings
の挙動がコピー元にエイリアスされてしまうのです。
つまり、オリジンAPI
からクローンAPI
を作成し、クローンAPI
の接続数を100
から1
に変更すると、オリジンAPI
も接続数が1
に書き換わってしまいます。
API Gatewayにおいて、開発用エンドポイントから本番用エンドポイントをクローンして運用する場合は注意が必要です。
再現手順
以下にAWSコンソールから問題を再現する手順を記載します。
API Gatewayのダッシュボードから新規API
Origin
(API name) を作成。下図はIntegration type
をHTTP Proxy
に指定したもの。恐らくIntegration type
は何でも構わない
新規にStageを作成し、
Throttling Settings
のBurst Limit
、Rate
をそれぞれ100
に指定
API Gatewayのダッシュボードから新規API
Clone
(API name) を作成。API作成時のオプションで、API Clone from API
からOrigin
を選択。Integration type
はOrigin
と同じものを指定
新規にStageを作成し、
Throttling Settings
のBurst Limit
、Rate
をそれぞれ1
に指定
Origin
に対し20回の連続アクセスを試みたところ、半数のレスポンスでHTTPステータス429
が返されました。 429
は API Gatewayから返される、 Limit Exceeded Exception
というエラーです。
Handling Errors in Amazon API Gateway - Error Codes (Client and Server Errors)
つまり、Clone
に設定したはずのthrottleが Origin
にも適用されてしまっているということです。うーむ。。
回避策
Clone APIを作成した場合は、Stageから対象エンドポイントを開き、Settings
のタイプを Override for this method
に指定。ここで新たに Throttling Settings
を指定することで問題を回避できました。
問題が解消されるまでは、面倒ですがエンドポイント単位で Throttling Settings
は設定したほうが安全なようです。