

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Keyspaces の一般的なエラーのトラブルシューティング
<a name="troubleshooting.general"></a>

一般的なエラーが発生していませんか。以下は、一般的なシナリオとその解決方法です。

## 一般的なエラー
<a name="troubleshooting-general"></a>

次のいずれかの上位の例外が発生している場合、さまざまな原因が考えられます。
+ `NoNodeAvailableException`
+ `NoHostAvailableException`
+ `AllNodesFailedException`

これらはクライアントドライバーが生成する例外であり、コントロール接続の確立時や、読み取り/書き込み/準備/実行/バッチリクエストの実行時に発生する可能性があります。

コントロール接続の確立中にエラーが起きた場合は、アプリケーションで指定されたすべての接続先に到達できないということです。読み取り/書き込み/準備/実行クエリの実行中にエラーが起きれば、それは、そのリクエストが再試行回数をすべて使い果たしたということです。デフォルトの再試行ポリシーを使用している場合、再試行のたびに別のノードで試行されます。

### 上位の Java ドライバー例外の根本原因のエラーを特定する方法
<a name="troubleshooting-general-isolation"></a>

これらの一般的なエラーは、接続に問題がある場合や、読み取り/書き込み/準備/実行のオペレーションの実行時に発生することがあります。分散型システムでは一時的な障害が想定されるため、リクエストを再試行することで対処する必要があります。接続エラーの発生時に、Java ドライバーは自動では再試行しません。そのため、アプリケーションでドライバー接続を確立する際は、再試行ポリシーを実装することを推奨します。接続のベストプラクティスの詳細については、「[サーバーレス環境のクライアントドライバー接続を最適化する](connections.md)」を参照してください。

デフォルトでは、Java ドライバーはすべてのリクエストに対して `idempotence` (べき等性) を false に設定します。つまり、読み取り/書き込み/準備のリクエストが失敗しても、Java ドライバーは自動的には再試行しません。`idempotence` を `true` に設定して、リクエストが失敗した場合は再試行するようにドライバーに指示する方法は、いくつかあります。ここでは、Java アプリケーションで単一のリクエストに対してプログラムでべき等性を設定する一例を紹介します。

```
Statement s = new SimpleStatement("SELECT * FROM my_table WHERE id = 1");
s.setIdempotent(true);
```

または、次の例に示すように、Java アプリケーション全体のデフォルトのべき等性をプログラムで設定できます。

```
// Make all statements idempotent by default:
cluster.getConfiguration().getQueryOptions().setDefaultIdempotence(true);
//Set the default idempotency to true in your Cassandra configuration
basic.request.default-idempotence = true
```

また、アプリケーションレベルで再試行ポリシーを作成する方法もお勧めします。この場合、アプリケーションで `NoNodeAvailableException` をキャッチしてリクエストを再試行する必要があります。再試行は 10 回行い、エクスポネンシャルバックオフを使用して、10 ミリ秒から始めて最長 100 ミリ秒まで延ばし、すべての再試行の合計時間を 1 秒に収めることを推奨します。

もう 1 つの選択肢は、Java ドライバー接続の確立時に Amazon Keyspaces のエクスポネンシャルバックオフ再試行ポリシーを適用することです。このポリシーは [Github](https://github.com/aws-samples/amazon-keyspaces-java-driver-helpers/blob/main/src/main/java/com/aws/ssa/keyspaces/retry/AmazonKeyspacesExponentialRetryPolicy.java) で公開されています。

デフォルトの再試行ポリシーを使用する場合は、複数のノードへの接続が確立されていることを確認してください。それには、Amazon Keyspaces で次のクエリを使用します。

```
SELECT * FROM system.peers;
```

このクエリの応答が空の場合、Amazon Keyspaces で単一のノードを使用しているということです。デフォルトの再試行ポリシーを使用している場合、再試行は行われません。デフォルトの再試行は必ず別のノードで行われるためです。VPC エンドポイントを介した接続の確立の詳細については、「[Amazon Keyspaces の VPC エンドポイント経由接続の設定方法](connections.md#connections.VPCendpoints)」を参照してください。

Datastax 4.x Cassandra ドライバーを使用して Amazon Keyspaces への接続を確立する方法を説明したステップバイステップのチュートリアルについては、「[Apache Cassandra 用の 4.x DataStax Java ドライバーと SigV4 認証プラグインを使用して Amazon Keyspaces に接続するためのステップバイステップのチュートリアル](using_java_driver.md#java_tutorial.SigV4)」を参照してください。