API Gateway REST API の CloudWatch ログが見つからない場合のトラブルシューティング方法を教えてください。

所要時間2分
0

Amazon API Gateway で Amazon CloudWatch のログ記録を有効にしましたが、ログが見つかりませんでした。

簡単な説明

CloudWatch のログ記録は、リクエストを実行したり、クライアントの API へのアクセスに関連する問題をデバッグしたりするための参考になります。CloudWatch のログ記録には、実行ログとアクセスログが含まれます。

実行ログでは、API Gateway がロググループやログストリームの作成などの CloudWatch ログを管理します。アクセスログ記録では、独自のロググループを作成するか、既存のロググループを選択することができます。

API Gateway によって拒否されたクライアント側エラーには、実行ログに記録されないものもあります。たとえば、クライアントが REST API の誤ったリソースパスに API リクエストを行うと、403 "認証トークンが見つかりません" という応答が返されます。この種類の応答は実行ログに記録されません。CloudWatch アクセスログを使用して、クライアント側のエラーをトラブルシューティングします。

詳細については、「API Gateway での CloudWatch ログの形式」を参照してください。

API Gateway は次のログを生成しない場合があります。

  • 413 Request Entity Too Large エラー。
  • 大量の 429 Too Many Requests エラー。
  • API マッピングのないカスタムドメインに送信されたリクエストによる 400 シリーズのエラー。
  • 内部の障害による 500 シリーズのエラー。

詳細については、「REST API を監視する」を参照してください。

解決策

CloudWatch ログ記録用の API Gateway のアクセス許可を確認する

CloudWatch Logs を有効にするには、アカウントの CloudWatch へのログの読み取りと書き込みを行うアクセス許可を API ゲートウェイに付与する必要があります。マネージドポリシー AmazonAPIGatewayPushToCloudWatchLogs には、必要なアクセス許可があります。

apigateway.amazonaws.com を信頼されたエンティティとする、AWS Identity and Access Management (IAM) ロールを作成します。次に、以下のポリシーを IAM ロールにアタッチし、AWS アカウントの cloudWatchRoleArn プロパティに IAM ロールの ARN を設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutLogEvents",
        "logs:GetLogEvents",
        "logs:FilterLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

次のことを確認してください。

  • AWS Security Token Service (AWS STS) が AWS リージョンで有効化されている。詳細については、「AWS リージョンで AWS STS を管理する」を参照してください。
  • IAM ロールが、CloudWatch ログを有効化する必要があるすべての AWS リージョンで有効になっている。

詳細については、「CloudWatch ログ記録用のアクセス許可」を参照してください。

API Gateway のログ記録設定を確認する

CloudWatch の実行設定またはアクセスログ設定が API Gateway で有効になっていることを確認します。

注: 実行ログとアクセスログは、個別に有効化することができます。

  1. API Gateway コンソールを開きます。
  2. ナビゲーションペインで **[API]**を選択します。
  3. API を選択し、[ステージ] を選択します。
  4. [ステージ] で対象のステージを選択してから、[ログ/トレース] タブを選択します。
  5. [CloudWatch の設定] で、次のことを確認してください。
    [CloudWatch ログを有効にする] ** が選択されている。
    ログレベルINFO に設定されている。注: ログレベルが ERROR に設定されている場合、API Gateway でのエラーとなったリクエストのみがログに記録されます。成功した API リクエストは記録されません。
    追加のログデータで、
    [すべてのリクエスト/応答データを記録する]** と [詳細な CloudWatch メトリクスを有効にする] が選択されている。
    注: 本番用 API では、[すべてのリクエスト/応答データを記録する] を有効にしないことがベストプラクティスです。有効にした場合、機密データがログに記録される場合があります。
  6. [カスタムアクセスログ] で、[アクセス・ログを有効にする] が選択されていることを確認します。

ログ記録の方法を確認し、必要に応じてオーバーライドする

デフォルトでは、すべての API リソースはステージと同じ設定を使用します。ステージからは継承しない場合は、この設定をオーバーライドしてメソッドごとに異なる構成にすることができます。

  1. API Gateway コンソールを開きます。
  2. ナビゲーションペインで [API] を選択します。
  3. API を選択し、[ステージ] を選択します。
  4. [ステージ] で、ステージ名を展開します。次に、HTTP メソッドを選択します。たとえば、GET と入力します。
  5. [設定] で、[このメソッドのオーバーライド] を選択します。
  6. CloudWatch の設定で、必要に応じてユースケースに合わせて追加のログ変更を行った後、[変更を保存] を選択します。

詳細については、「API Gateway で REST API 用に CloudWatch ログ記録を設定する」を参照してください。

関連情報

CloudWatch ログで API Gateway REST API のエラーを特定する方法を教えてください

API Gateway でアクセスログの記録を設定する方法を教えてください

API Gateway REST API または WebSocket API のトラブルシューティング用に CloudWatch Logs を有効にする方法を教えてください

コメントはありません

関連するコンテンツ