AWS EC2 でClientError(RequestLimitExceeded)エラー
弊社のお客様で短時間に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秒後・・・のような
再実行の感覚を次第に(指数関数的に)大きくし、
再実行する仕組みのことです。
エラーを拾う実装は下記を参考にさせて頂きました。
https://botocore.amazonaws.com/v1/documentation/api/latest/client_upgrades.html#error-handling