Dynamodb-error-handling

提供:Dev Guides
移動先:案内検索

DynamoDB-エラー処理

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

コードとメッセージ

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

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

  • AccessDeniedException -クライアントがリクエストに正しく署名できませんでした。
  • ConditionalCheckFailedException -偽と評価された条件。
  • IncompleteSignatureException -要求に不完全な署名が含まれていました。

HTTP 5xxカテゴリの例外は次のとおりです-

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

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

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

たとえば-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;
}