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;
}