AWS CLIでコマンド実行時、時折発生する「TooManyRequestsException」エラーを回避するには

2022.05.18

困っていた内容

AWS CLIでdescribeやget系のコマンド実行時、時々TooManyRequestsExceptionエラーが発生してコマンドが失敗します。
再度コマンドを実行すると成功するのですが、なるべくコマンドが失敗しないようにするにはどうしたらいいでしょうか。

どう対応すればいいの??

AWS CLIの再試行回数を増やすことをお試しください。

AWS CLIバージョン2の場合、デフォルトの再試行回数は2回で、初回呼び出しと合わせると合計3回コマンドが呼び出されます。

最大再試行回数のデフォルト値は 2 で、合計で 3 回呼び出しが試みられます。この値は、max_attempts 設定パラメータを使用して上書きできます。
引用元:AWS CLI の再試行


この最大再試行回数の値を増やすことで、TooManyRequestsExceptionによりコマンドが失敗する可能性を減らすことができます。
設定は、環境変数や設定ファイル(~/.aws/config)より変更可能です。

再試行環境変数は次のとおりです。
・ AWS_RETRY_MODE
・ AWS_MAX_ATTEMPTS

以下は AWS 設定ファイルの例です。

[default]
retry_mode = standard
max_attempts = 6

引用元:AWS CLI の再試行


なお、max_attemptsに指定する値は、最大試行回数であり、再試行する回数ではありません。
再試行回数は、max_attemptsに指定した値に1を引いた数です。

例えば、max_attemptsに3を指定した場合、1回実行して失敗した後、2回再試行(リトライ)します。

設定してみた

CloudShell上で設定しています。
なお、以下では再試行回数を減らしていますが、実際に設定する際は増やしてください。

$ aws --version
aws-cli/2.6.3 Python/3.9.11 Linux/4.14.275-207.503.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

AWS CLIのバージョンが2のため、デフォルトの再試行回数は2回です。
実際にTooManyRequestsExceptionエラーが発生した際、reached max retries: 2と出力されました。

An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 2): Too Many Requests

環境変数で設定

AWS_MAX_ATTEMPTS環境変数を設定します。

$ export AWS_MAX_ATTEMPTS=2
$ echo $AWS_MAX_ATTEMPTS
2

エラーが発生した際、reached max retries: 1と表示されたので、反映していることが分かります。

An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 1): Too Many Requests

設定ファイルで設定

~/.aws/config設定ファイルを作成し、max_attemptsを設定します。
なお、環境変数でも設定している場合、環境変数で指定した値が優先されるのでお気をつけください。

$ cd
$ mkdir .aws
$ touch .aws/config
$ vi .aws/config


~/.aws/config

[default]
max_attempts = 1

エラーが発生した際、reached max retries: 0と表示されたので、設定変更の反映が確認できました。

An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 0): Too Many Requests

参考資料

AWS CLI の再試行

AWS でのエラー再試行とエクスポネンシャルバックオフ

構成設定と優先順位