DynamoDB-エラー処理

リクエストの処理が失敗すると、DynamoDBはエラーをスローします。各エラーは、HTTPステータスコード、例外名、およびメッセージで構成されます。エラー管理は、エラーを伝播するSDKまたは独自のコードに基づいています。

コードとメッセージ

例外は、さまざまなHTTPヘッダーステータスコードに分類されます。4xxと5xxは、リクエストの問題とAWSに関連するエラーを保持します。

HTTP4xxカテゴリの例外の選択は次のとおりです-

  • AccessDeniedException −クライアントは要求に正しく署名できませんでした。

  • ConditionalCheckFailedException −falseと評価された条件。

  • IncompleteSignatureException −リクエストに不完全な署名が含まれていました。

HTTP5xxカテゴリの例外は次のとおりです-

  • 内部サーバーエラー
  • サービスは利用できません

再試行とバックオフアルゴリズム

エラーは、サーバー、スイッチ、ロードバランサー、その他の構造やシステムなど、さまざまな原因で発生します。一般的なソリューションは、信頼性をサポートする単純な再試行で構成されます。すべてのSDKにはこのロジックが自動的に含まれており、アプリケーションのニーズに合わせて再試行パラメーターを設定できます。

For example − Javaは、再試行を停止するためのmaxErrorRetry値を提供します。

Amazonは、フローを制御するために、再試行に加えてバックオフソリューションを使用することをお勧めします。これは、再試行間の待機期間を徐々に増やし、最終的にはかなり短い期間の後に停止することで構成されます。注SDKは自動再試行を実行しますが、指数バックオフは実行しません。

次のプログラムは、再試行バックオフの例です。

public enum Results { 
   SUCCESS,  
   NOT_READY,  
   THROTTLED,  
   SERVER_ERROR 
}
public static void DoAndWaitExample() {  
   try {
      // asynchronous operation. 
      long token = asyncOperation();  
      int retries = 0; 
      boolean retry = false;  
      
      do { 
         long waitTime = Math.min(getWaitTime(retries), MAX_WAIT_INTERVAL);  
         System.out.print(waitTime + "\n");  
         
         // Pause for result 
         Thread.sleep(waitTime);  
         
         // Get result 
         Results result = getAsyncOperationResult(token);  
         
         if (Results.SUCCESS == result) { 
            retry = false; 
         } else if (Results.NOT_READY == result) { 
            retry = true; 
         } else if (Results.THROTTLED == result) { 
            retry = true; 
         } else if (Results.SERVER_ERROR == result) { 
            retry = true; 
         } else { 
            
            // stop on other error 
            retry = false; 
         }  
      } while (retry && (retries++ < MAX_RETRIES)); 
   }
   catch (Exception ex) { 
   } 
}
public static long getWaitTime(int retryCount) {  
   long waitTime = ((long) Math.pow(3, retryCount) * 100L);  
   return waitTime; 
}