業務でAWS Glueを使っていると、たまに出てくる「エクスポネンシャルバックオフ」って何?と思い調べたことをまとめてみました。
🔍 エクスポネンシャルバックオフとは?
「エクスポネンシャルバックオフ(Exponential Backoff)」とは、リクエストに失敗したときに、一定時間待ってから再試行(リトライ)する手法の一つです。
リトライのたびに待機時間を倍々で増やしていくのが特徴で、下記のようなイメージです。
1回目 → 1秒待つ
2回目 → 2秒待つ
3回目 → 4秒待つ
4回目 → 8秒待つ
✅ なんで必要なの?
AWS GlueなどのAPIにアクセスすると、以下のような一時的なエラーが起きることがあります
- リクエスト数が多すぎてスロットリング(Rate Limit)
- 一時的なネットワーク障害
- サービスの過負荷状態
このような場合、すぐにリトライしてもまた失敗する可能性が高いため、「ちょっと待ってから再試行しよう」というのがこの考え方です。
🛠 boto3での実装方法
boto3でAWS Glueクライアントを使う場合、Config
オブジェクトにリトライ設定を渡せば簡単に実装できます。
import boto3
from botocore.config import Config
# リトライ設定
config = Config(
retries={
'max_attempts': 10, # 最大10回までリトライ
'mode': 'standard' # エクスポネンシャルバックオフ + Jitter が有効
}
)
# Glueクライアント作成
glue = boto3.client(
service_name='glue',
region_name='ap-northeast-1',
config=config
)
※ endpoint_url は基本的に省略可能です(特殊なケースを除く)
💡 リトライモードの種類
モード名 | 説明 |
---|---|
standard |
デフォルトのエクスポネンシャルバックオフ。Jitter(ランダム性)ありで衝突を防ぐ |
adaptive |
CloudWatchメトリクスを活用して、より動的にリトライタイミングを調整(対応サービスのみ) |
🎯 Glueでよくある失敗パターン
-
ThrottlingException
-
ServiceUnavailableException
-
TooManyRequestsException
これらのエラーが発生したら、リトライ設定がないと即失敗になります。
逆に、リトライ設定があれば自動で再試行してくれるので、安定性が増します。
✍️ まとめ
エクスポネンシャルバックオフは失敗時のリトライにおいて超重要
-
Glueのバッチ処理やAPI実行時の安定化に効果的
-
boto3ではConfigで簡単に設定できる
-
Glueの処理が不安定だな…と思ったら、まずはこの設定を見直してみてください!