AWS: ThrottlingException - Rate exceeded
AWS APIのレート制限に達した際のスロットリングエラーの原因と解決策
概要
AWS APIの呼び出しレートが制限を超えた際に発生するエラーです。
エラーメッセージ
``` ThrottlingException: Rate exceeded ```
原因
- API呼び出し頻度が高すぎる: 短時間に大量のリクエスト
- バーストリクエスト: 同時に多数のリクエスト
- アカウント全体の制限: 他のアプリケーションとの競合
- リージョン固有の制限: 特定リージョンでの制限
解決策
1. Exponential Backoffを実装
```python import time import random import boto3 from botocore.exceptions import ClientError
def call_with_retry(func, max_retries=5): for attempt in range(max_retries): try: return func() except ClientError as e: if e.response[‘Error’][‘Code’] == ‘ThrottlingException’: wait = (2 ** attempt) + random.uniform(0, 1) time.sleep(wait) else: raise raise Exception(“Max retries exceeded”)
使用例
ec2 = boto3.client(’ec2’) result = call_with_retry(lambda: ec2.describe_instances()) ```
2. AWS SDKの自動リトライ設定
```python from botocore.config import Config
config = Config( retries={ ‘max_attempts’: 10, ‘mode’: ‘adaptive’ # または ‘standard’ } ) client = boto3.client(’ec2’, config=config) ```
3. リクエストをバッチ化
```python
悪い例: 1件ずつAPI呼び出し
for instance_id in instance_ids: ec2.describe_instances(InstanceIds=[instance_id])
良い例: バッチで呼び出し
ec2.describe_instances(InstanceIds=instance_ids[:100]) ```
4. Service Quotasで上限緩和申請
```bash
aws service-quotas request-service-quota-increase
–service-code ec2
–quota-code L-1216C47A
–desired-value 100
```
よくある間違い
- リトライ間隔を固定値にする
- エラー種別を確認せずにリトライ
- 制限緩和せずにワークアラウンド
関連エラー
関連エラー
AWS の他のエラー
この記事は役に立ちましたか?