概要
クライアントが API Gateway を呼び出し、API Gateway がバックエンドサービスを呼び出すのは、すべて TCP 接続に基づいています。 TCP 接続の場合、不適切なタイムアウト構成は問題や障害の原因となる可能性があります。 このトピックでは、クライアントと API Gateway 間および API Gateway とバックエンドサービス間の TCP 接続のタイムアウト期間を構成する方法について説明します。 タイムアウト期間を適切に構成することで、API Gateway をより有効に活用し、既知の問題を回避できます。
TCP 接続では、通常、次のタイムアウトパラメーターが構成されます。
ConnectionTimeout: TCP 接続を確立するためのタイムアウト期間
WriteTimeout: リクエストを送信するためのタイムアウト期間
ReadTimeout: バックエンドサービスからのレスポンスを読み取るためのタイムアウト期間
ネットワークの種類に応じて、ConnectionTimeout と WriteTimeout に異なる値を構成できます。 通常、インターネットでは ConnectionTimeout と WriteTimeout の両方で 10 秒などの大きな値が必要であり、内部ネットワークでは小さな値が必要です。
ReadTimeout パラメーターは、バックエンド サービスの処理時間に基づいて構成することをお勧めします。 特に、異なるアプリケーションに対して ReadTimeout を構成する場合は、このトピックで説明されているルールに従う必要があります。
構成ルール
次の図は、API 呼び出しの全体的なプロセスを示しています。 クライアントは API Gateway にリクエストを送信し、API Gateway はそのリクエストをバックエンド サービスに転送します。 リクエストを受信して処理した後、バックエンド サービスは API Gateway にレスポンスを返し、API Gateway はそのレスポンスをクライアントに転送します。

このプロセスでは、2 つのタイムアウト構成が重要です。
ClientReadTimeout: クライアントが API Gateway からレスポンスを受信するためのタイムアウト期間。 この期間はクライアントで構成されます。
APIGatewayBackendTimeout: API Gateway がバックエンド サービスからレスポンスを受信するためのタイムアウト期間。 この期間は API Gateway で構成されます。
前の図から、次のことがわかります。
ClientReadTimeout = T2 + T3 + T4 + T5
APIGatewayBackendTimeout = T2 + T3 + T4
したがって、ClientReadTimeout と APIGatewayBackendTimeout を構成する場合は、次のルールに従う必要があります。
APIGatewayReaderTimeout の値は、バックエンド サービスに必要なビジネス処理時間よりも大きくする必要があります。
ClientReadTimeout の値は、APIGatewayBackendTimeout の値よりも大きくする必要があります。
たとえば、ほとんどの場合、バックエンド サービスが 10 秒以内に API リクエストを処理すると推定される場合は、APIGatewayBackendTimeout を 10 秒に、ClientReadTimeout を 15 秒に設定して、バックエンド サービスがレスポンスを返すときに TCP 接続が閉じられないようにすることができます。
これらのルールに従わずに短いタイムアウト期間を構成すると、バックエンド サービスによるリクエスト処理に時間がかかる場合に接続がすでに閉じられているため、API Gateway は使用可能な TCP 接続を見つけられません。 この場合、API Gateway は N502RE エラーを報告します。 極端な場合には、雪崩が発生します。 したがって、これらのルールに特に注意することをお勧めします。
例
API Gateway で構成されたバックエンド サービス タイムアウト (APIGatewayBackendTimeout) の最小値は 300 ミリ秒です。 このしきい値未満の設定は、デフォルトで 300 ミリ秒になります。
次の図は、ClientReadTimeout 構成の例を示しています。 このパラメーターは、HTTP クライアント接続プールのクライアント初期化コードで構成されます。 この例では、API Gateway SDK が使用されています。

次の図は、APIGatewayBackendTimeout 構成の例を示しています。 このパラメーターは、API Gateway コンソールの API 定義のバックエンド サービス設定で構成されます。

[APIGatewayBackendTimeout 構成] の優先順位階層
バックエンド サービス タイムアウト プロパティ (APIGatewayBackendTimeout) は、API Gateway コンソール内の複数の場所で構成できます。
バックエンド サービス
API バックエンド
ルート プラグイン
これらの場所で競合する値が設定されている場合、有効な優先順位は次のとおりです。 ルート プラグイン > API バックエンド > バックエンド サービス