AWS EC2 でClientError(RequestLimitExceeded)エラー

富松広太 2019年3月29日

弊社のお客様で短時間にAPIを発行しまくり、
ClientError(RequestLimitExceeded)となってしまったお客様がおられました。

原因と対応

単純にリクエストレートを超えていることはエラー内容から予想がついたのですが、
秒間あたりの具体的な上限数は公開されていないようでした。

また、状況に応じてレートが変わることもあるようなので、
秒間あたり数API程度に押さえて実行するようにしました。

また、下記ドキュメントには「exponential backoff」的に
実行するようにした方が良いことが書かれています。
上記エラーを拾い、時間を置いて再実行するように処理を書き換えたところ
正常に動作するようになりました。
https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#api-request-rate

ご参考

「exponential backoff」
次は3秒後、その次は9秒後、その次は27秒後・・・のような
再実行の感覚を次第に(指数関数的に)大きくし、
再実行する仕組みのことです。

エラーを拾う実装は下記を参考にさせて頂きました。

[AWS][SDK][メモ]RequestLimitExceededエラーについて


https://botocore.amazonaws.com/v1/documentation/api/latest/client_upgrades.html#error-handling