Lambda と統合されている API Gateway リクエストのレイテンシーが大きい場合のトラブルシューティング方法を教えてください。

所要時間2分
0

AWS Lambda 関数と統合されている Amazon API Gateway API にリクエストを送信したときの応答が遅いです。レイテンシーが大きい原因を特定する方法を教えてください。

解決方法

Lambda 関数と統合されている API エンドポイントがクライアントに応答を送信するのに時間がかかりすぎる場合は、レイテンシーが大きい問題を解決する必要があります。API Gateway のメトリクスを確認して、レイテンシーが大きい原因となっているリクエスト/応答フローのセクションを特定します。レイテンシーが大きい原因を特定できれば、遅延の削減に取り組むことができます。

CloudWatch メトリクスをフィルタリングして API でレイテンシーメトリクスを確認する

レイテンシーが大きい原因となっているリクエスト/応答フローのセクションを特定するには、まず次の手順を実行します。

  1. API にリクエストを送信した後のクライアントのレイテンシーを確認します。
  2. 全体のレイテンシーを書き留めたら、Amazon CloudWatch コンソールを開きます。左側のナビゲーションペインで、[Metrics] (メトリクス)、[All Metrics] (すべてのメトリクス) を順に選択します。メトリクス検索ボックスに「APIGateway」と入力します。検索結果から API GatewayApiId] を順に選択します。
  3. API のリストで、API ID または API 名を使用して、指定した API をフィルタリングします。フィルタリング後、[IntegrationLatency] および [Latency] (レイテンシー) チェックボックスをオンにします。
    注: API ID と API 名は API Gateway コンソールから入手できます。
  4. [Graphed metrics] (グラフ化したメトリクス) タブを開きます。[Statistic] (統計) で [Maximum] (最大) を選択します。[Period] (期間) で [1 minute] (1 分) を選択します。グラフの上の [Custom] (カスタム) の期間を選択します。クライアントでレイテンシーが大きくなった時間帯を選択します。
  5. IntegrationLatency および レイテンシーメトリクスの両方を確認します。これらのメトリクスの値が高い場合は、値とタイムスタンプを書き留めてください。この値でレイテンシーが大きい原因がわかります。

メトリクスを比較してレイテンシーが大きい原因を特定する

リクエスト/応答フローに関連するメトリクスを引き続き確認して、レイテンシーが大きい原因を見つけます。

  1. API Gateway レイテンシーメトリクスを、クライアントで観察された全体的なレイテンシー値と比較します。
    例えば、ある API では レイテンシー メトリクスの最大値が、クライアントの最大レイテンシー値とほぼ同等です。これらの値は、リクエスト/応答フローの最大遅延が、API Gateway がリクエストを処理するのにかかる時間であることを示しています。API Gateway の処理時間には、Lambda へのリクエストの送信、Lambda からの応答の待機、およびクライアントへの応答の送信にかかる時間が含まれます。
  2. IntegrationLatency メトリクスを API の Latency メトリクスと比較します。
    例えば、IntegrationLatency メトリクスは、Latency メトリクスとほぼ同等です。これらの値は、Lambda に送信されたバックエンドリクエストで応答に時間がかかっていることが、API レイテンシーの主な原因であることを示しています。IntegrationLatency メトリクスには、API Gateway がリクエストを送信してから API Gateway がバックエンドから応答を受け取るまでの時間が含まれます。
  3. IntegrationLatency メトリクスが API の Latency メトリクスと比較して低い場合、バックエンドの応答時間は短くなります。このシナリオでは、API リクエストまたは応答の処理に、より長い時間がかかります。
    例えば、API または API Gateway Lambda オーソライザーで設定されたマッピングテンプレートは、どちらも遅延の原因となる可能性があります。
  4. API の Latency メトリクスがクライアントで確認したレイテンシーよりもはるかに低い場合、ルートが遅延の原因となっている可能性があります。クライアントと API Gateway 間のルートを確認して、遅延を引き起こしている中間エンドポイントが存在しているかどうかを確認します。
    例えば、プライベート VPN 接続またはプロキシを使用すると、遅延が発生する場合があります。

Lambda メトリクスを表示して、IntegrationLatency が高い原因を特定する

最後に、リクエスト/応答フローに関連する Lambda メトリクスに焦点を当て、IntegrationLatency が高い原因を見つけます。

  1. Lambda 関数の Duration メトリクスをチェックして、Lambda 関数の実行時間が長くなっていないか確認します。Lambda 関数の実行時間が長くなった場合は、CloudWatch ログを確認して、レイテンシーが大きいとなっているコードのセクションを見つけてください。デフォルトでは、Lambda 関数は CloudWatch ログに START、END、および REPORT ステートメントを記録します。Lambda 関数コードの各論理セクションにカスタムログステートメントを追加して、詳細な CloudWatch ログを取得します。
  2. クライアントのレイテンシーが大きい期間に Duration メトリクスが変化しなかった場合は、初期化時間が増加したかどうかを確認します。Lambda 関数の初期化時間とは、リクエストを処理する実行環境をセットアップするのにかかる時間のことです。API Gateway から発信されるリクエストは、処理のために新しい環境を必要とする場合があります。新しい環境は Lambda を介してセットアップされます。通常、Lambda 関数ハンドラーの外部にあるコードは、初期化時間中に実行されます。コードの完了に時間がかかると、クライアントへの全体的な応答時間が遅れる可能性があります。
    : 初期化時間は INIT またはコールドスタートと呼ばれます。
  3. Lambda 関数ログのレポートステートメントを検証して、初期化時間の Duration が増加しているかどうかを確認します。一部のリクエストの初期化時間が長くなると、API Gateway の IntegrationLatency メトリクスが増加する可能性があります。

関連情報

HTTP API のメトリクスの操作

Amazon API Gateway のディメンションおよびメトリクス

CloudWatch メトリクスを使用した WebSocket API の実行のモニタリング

CloudWatch コンソールでのメトリクスの表示

Lambda 実行環境のライフサイクル

コメントはありません

関連するコンテンツ