AWS SDK for Python (Boto3)の エラーの再試行について
API 呼び出しは様々な要因で一時的に失敗することがありますが、AWS SDKは自動再試行ロジックを実装しています。今回は、AWS SDK for Python (Boto3)でのリトライ回数の変更方法をご紹介します。
リトライ処理やエクスポネンシャルバックオフについてはAWSドキュメント AWS でのエラーの再試行とエクスポネンシャルバックオフ もご参照ください。
Boto3におけるリトライ処理、エクスポネンシャルバックオフ
自動でリトライ処理が実装されていますが、AWS SDK for Python (Boto3)ではデフォルトで5回エクスポネンシャルバックオフによるリトライ処理が実施されるようです。
Boto 3 Documentation | Config Referenceより
'max_attempts' -- An integer representing the maximum number of retry attempts that will be made on a single request. For example, setting this value to 2 will result in the request being retried at most two times after the initial request. Setting this value to 0 will result in no retries ever being attempted on the initial request. If not provided, the number of retries will default to whatever is modeled, which is typically four retries.
例)
"retry": { "__default__": { "max_attempts": 5, "delay": { "type": "exponential", "base": "rand", "growth_factor": 2 },
リトライ数を変更する
セッションやサービスクライアントを作成時に config (botocore.client.Config) のretries
を設定することで変更することが可能です。
session作成時のconfigにretriesを設定する
例) メソッド呼び出しの最大リトライ数を10に設定する
from boto3.session import Session from botocore.client import Config session = Session() config = Config( retries=dict( max_attempts=10 ) ) client = session.client('ec2', config=config)
client作成時のconfigにretriesを設定する
例)メソッド呼び出しの最大リトライ数を10に設定する
import boto3 from botocore.config import Config config = Config( retries=dict( max_attempts=10 ) ) client = boto3.client('ec2', config=config)
まとめ
エクスポネンシャルバックオフはとても重要なアルゴリズムです。今回は、AWS SDK for Python (Boto3)についてご紹介しましたが、AWS SDKを使用していない場合などにもエクスポネンシャルバックオフアルゴリズムを取り入れたリトライ処理を実装することをおすすめします。 Pythonだと、retryingというモジュールがあります。