API Gateway のエッジ最適化 API エンドポイントのレイテンシーの問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

クライアントが Amazon API Gateway でエッジ最適化 API にリクエストを送信するとき、レイテンシーが高くなります。トラブルシューティングのためにレイテンシーの原因を見つけるにはどうすればよいですか?

簡単な説明

エッジ最適化 API エンドポイントのレイテンシーの原因を調べるには、接続パスの次の各部分にかかる時間を確認します。

重要: これらの接続パスのステップは、エッジ最適化 API エンドポイントにのみ適用され、リージョン API エンドポイントには適用されません。エッジ最適化 API は、Amazon CloudFront ディストリビューションを通じてアクセスされます。リージョン API エンドポイントは、CloudFront 経由でアクセスされません。

  1. DNS の名前解決への接続の開始
  2. CloudFront に接続するための伝送制御プロトコル (TCP) ハンドシェイクへの接続の開始
  3. CloudFront に接続するための Secure Sockets Layer (SSL) ハンドシェイクへの接続の開始
  4. CloudFront にクライアントの HTTP リクエストを送信する接続の開始
  5. CloudFront から転送される最初のバイトへの接続の開始
  6. リクエストと API への応答の合計時間
  7. API Gateway がリクエストを処理して CloudFront エッジロケーションに応答する時間
  8. API Gateway からの HTTP リクエストに統合エンドポイントが応答するまでの時間
  9. API Gateway が CloudFront エッジロケーションに応答し、CloudFront がクライアントに応答するまでの時間

接続パスのうち、時間が最も長くかかっている部分が、レイテンシーの原因です。

注: AWS X-Ray を使用して、Amazon API Gateway REST API を経由して基盤となるサービスに移動するユーザーリクエストをトレースおよび分析できます。API Gateway は、X-Ray が利用可能な AWS リージョンのすべてのAPI Gateway REST API エンドポイントタイプのために X-Ray トレーシングをサポートします。X-Ray が利用可能なすべてのリージョンを確認するには、AWS リージョン表を参照してください。

解決方法

curl_for_latency Bash スクリプトを実行する

API の接続パスプロセスのステップ 1~6 の所要時間を確認するには、GitHub で curl_for_latency Bash スクリプトを実行します。

重要: [URL]、[HTTP method] (HTTP メソッド)、および [parameters] (パラメータ) の値を、API の情報と一致するように置き換えてください。

このスクリプトは、API が次の接続パスのステップを完了するのにかかる時間を返します。

  1. DNS 名前解決への接続の開始 (「time_namelookup」)
  2. CloudFront に接続するための TCP ハンドシェイクへの接続の開始 (「time_connect」)
  3. CloudFront に接続するための SSL ハンドシェイクへの接続の開始 (「time_appconnect」)
  4. CloudFront にクライアントの HTTP リクエストを送信する接続の開始 (「time_pretransfer」)
  5. CloudFront から転送される最初のバイトへの接続の開始 (「time_starttransfer」)
  6. リクエストと API への応答の合計時間 (「time_total」)

レイテンシーの原因となっているイベントを特定したら、CloudFront によるレイテンシーの増加をトラブルシューティングして減らすにはどうすればよいですか?を参照してください。

API Gateway がリクエストを処理して CloudFront エッジロケーションに応答するのにかかる時間を確認する

CloudWatch コンソールで API の Latency メトリクスを確認します。その後、[1-minute interval] (1 分間隔) と [Maximum] (最大) の Latency メトリクスグラフ設定を構成して、1 分間の時間範囲内で最長の処理時間を確認します。

手順については、CloudWatch コンソールで API Gateway のメトリクスを表示するを参照してください。

API Gateway からの HTTP リクエストに統合エンドポイントが応答するまでの時間を確認する

CloudWatch コンソールIntegrationLatency メトリクスを確認します。その後、[1-minute interval] (1 分間隔) と [Maximum] (最大) の IntegrationLatency グラフ設定を構成して、1 分間の時間範囲内で最長の処理時間を確認します。

  • または -

API で CloudWatch ログ記録がアクティブ化されている場合は、次のような行項目のログを確認します。

Received response. Integration latency: 325 ms

また、レイテンシーのトラブルシューティングをさらに進めるために、アクセスログに $context 変数を追加することもできます。

手順については、CloudWatch Logs をオンにして、API ゲートウェイ REST API または WebSocket API をトラブルシューティングする方法を教えてくださいを参照してください。

Lambda と統合された API ゲートウェイリクエスト

API Gateway で AWS Lambda を使用していて、IntegrationLatency メトリクスが高い場合は、Lambda 関数の CloudWatch Logs を確認してください。Lambda 関数と統合されている API エンドポイントがクライアントに応答を送信するのに時間がかかりすぎる場合は、高レイテンシーに対処する必要があります。Lambda 関数のコールドスタートは関数の継続時間メトリクスには記録されないため、API の統合レイテンシーが関数の継続時間より長くなる可能性があります。コールドスタートのある関数の実行時間を確認するには、AWS X-Ray を使用します。

詳細については、Lambda と統合されている API Gateway リクエストの高レイテンシーをトラブルシューティングするにはどうすればよいですか?を参照してください。

API Gateway が CloudFront エッジロケーションに応答し、CloudFront がクライアントに応答するまでの時間を確認する

API へのリクエストとレスポンスの合計時間 (「time_total」) を確認し、次を減じます。

  • CloudFront にクライアントの HTTP リクエストを送信する接続の開始 (「time_pretransfer」)
  • API Gateway がリクエストを処理して CloudFront エッジロケーションに応答する時間 (API の Latency メトリクス)

これで、API Gateway が CloudFront エッジロケーションに応答し、CloudFront がクライアントに応答するまでの時間を確認できます。


関連情報

HTTP API メトリクスの操作

Amazon API Gateway のディメンションとメトリクス

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

Amazon API Gateway のログをトラブルシューティングに使用するにはどうすればよいですか。

コメントはありません

関連するコンテンツ