Amazon Elasticsearch Service で HTTP 504 ゲートウェイタイムアウトエラーを回避するにはどうすればよいですか?

最終更新日: 2020 年 11 月 3 日

Amazon Elasticsearch Service (Amazon ES) で 504 ゲートウェイタイムアウトエラーを解決しようとしています。どうすればできますか?

簡単な説明

各 Amazon ES ドメインの前にロードバランサーが配置されています。ロードバランサーは、受信トラフィックをデータノードに分散します。Amazon ES リクエストが完了せず、アイドルタイムアウト期間内に成功または失敗した確認を返した場合、ロードバランサーはクラスターへの TCP 接続を終了します。これにより、通常は HTTP 504 ゲートウェイのタイムアウトエラーが発生します。HTTP 504 ゲートウェイのタイムアウトエラーは、必ずしもクラスターの問題を示しているわけではありません。アイドルタイムアウト時間内にリクエストを完了できなかったことを意味するだけです。

通常、ゲートウェイのタイムアウトエラーが発生するのは、同時に送信したリクエストが多すぎるか、複雑なリクエストを送信した場合です。どちらの場合も、結果は同じで、Amazon ES はアイドルタイムアウト期間内にリクエストを完了できません。

解決方法

HTTP 504 ゲートウェイのタイムアウトエラーを解決するには、次の 1 つまたは複数の方法を使用します。

  • Elasticsearch インデックスのスローログを有効にしてから、ログ記録のしきい値を指定します。スローログは、特定のクエリの完了に時間がかかるかどうかを判断するのに役立ちます。その場合は、クエリを調整して、504 エラーを解決します。詳細については、「Amazon Elasticsearch Service のスローログの表示」を参照してください。
  • Amazon ES がリクエストのためにクエリを実行する必要があるデータの量を減らします。これにより、リクエストが完了するまでの時間が短縮されます。
  • より大きなインスタンスタイプに切り替える。詳細については、インスタンスタイプとテストの選択、を参照してください。
  • エクスポネンシャルバックオフを設定し、アプリケーションのメカニズムを再試行して、タイムアウトしたリクエストが再送信されるようにします。
  • 個別のリクエストの代わりに一括リクエストを使用します。これにより、クラスターのリクエストごとのオーバーヘッドが減ります。