Amazon DynamoDB の断続的なタイムアウトエラーをトラブルシューティングするにはどうすればよいですか?

所要時間1分
0

AWS SDK を使用して Amazon DynamoDB を操作すると、次のような断続的な接続タイムアウトまたはリクエストタイムアウトエラーが表示されます。

Unable to execute HTTP request: Connect to dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] failed: connect timed out (HTTP リクエストを実行できません: dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] への接続に失敗しました: 接続がタイムアウトしました) com.amazonaws.SdkClientException: Unable to execute HTTP request. (com.amazonaws.SdkClientException: HTTP リクエストを実行できません。)Request did not complete before the request timeout configuration (リクエストタイムアウト設定の前にリクエストが完了しませんでした)

解決方法

DynamoDB に対して API コールを実行すると、次のようになります。

  1. アプリケーションは、ローカル DNS サーバーを使用して DynamoDB エンドポイントを解決します。
  2. DynamoDB エンドポイントの IP アドレスを取得した後、アプリケーションはエンドポイントに接続し、API コールを実行します。
  3. エンドポイントは、このコールをバックエンドノードの 1 つにルーティングします。

このプロセス中に、API コールによって断続的に接続タイムアウトまたはリクエストタイムアウトエラーが発生することがあります。ほとんどの場合、タイムアウトエラーは、ネットワークの問題、またはクライアント側の SDK 設定が正しくないことを理由として、API コールが DynamoDB に到達する前に発生するクライアント側のエラーから発生します。

これらのエラーをトラブルシューティングするには、次の操作を行います。

  • ユースケースとアプリケーションの SLA に従って SDK HTTP クライアントパラメータを調整します。connectionTimeoutrequestTimeoutmaxRetries を調整することに加えて、clientExecutionTimeout および socketTimeout も調整できます。ClientExecutionTimeout パラメータは、エンドツーエンドのオペレーションを実行し、発生する可能性のある再試行を含め、目的のレスポンスを受信するためにかかった最大許容合計時間を示します。この値は、個々の requestTimeout 値よりも大きい値に設定してください。socketTimeout パラメータは、既に確立されている TCP 接続からのレスポンスを受信するまで HTTP クライアントが待機する最大時間を示します。詳細については、「Tuning AWS Java SDK HTTP request settings for latency-aware Amazon DynamoDB applications」(レイテンシーの影響を受けやすい Amazon DynamoDB アプリケーションの AWS Java SDK HTTP リクエスト設定の調整) を参照してください。
  • 一定のトラフィックを送信するか、接続を再利用してください。リクエストを実行しない場合は、クライアントがダミーのトラフィックを DynamoDB テーブルに送信するよう設定することを検討してください。または、クライアント接続を再利用するか、接続プーリングを使用できます。これらの手法は、内部キャッシュをウォームに保ち、レイテンシーを低くし、クライアント側のタイムアウトエラーを回避するのに役立ちます。例えば、「Node.js で Keep-alive を使用して接続を再利用する」を参照してください。
  • Amazon Virtual Private Cloud (Amazon VPC) フローログを表示して、エラーが発生した時間枠内に DynamoDB への受信トラフィックがあったかどうかを確認します。また、AWS X-Ray を使用してアプリケーションのレイテンシーをモニタリングすることもできます。

AWS公式
AWS公式更新しました 2年前