API Gateway REST API の CloudWatch ログの不足についてトラブルシューティングする方法を教えてください。

所要時間2分
0

Amazon API Gateway の Amazon CloudWatch ログ記録をアクティブにしましたが、ログが見つかりませんでした。API Gateway REST API のトラブルシューティング用に CloudWatch ログを取得するにはどうすればよいですか?

簡単な説明

CloudWatch ログ記録を使用すると、リクエストの実行や API へのクライアントアクセスに関連する問題のデバッグに役立てることができます。CloudWatch ログ記録には、実行ログとアクセスログの記録が含まれます。

実行ログ記録の場合、API Gateway はロググループとログストリームの作成を含む CloudWatch ログ管理を行います。アクセスログ記録については、独自のロググループを作成するか、既存のロググループを選択できます。

API Gateway によって拒否されたすべてのクライアント側エラーが実行ログに記録されるわけではありません。例えば、クライアントが REST API の誤ったリソースパスに API リクエストを行うと、403「Missing Authentication Token」(認証トークンが見つかりません) という応答が返ります。このタイプの応答は実行ログに記録されません。CloudWatch アクセスログ記録を使用して、クライアント側のエラーをトラブルシューティングします。

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

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

  • 「413 Request Entity Too Large」(413 要求エンティティが大きすぎます) エラー。
  • 過剰な「429 Too Many Requests」(429 リクエストが多すぎます) エラー。
  • API マッピングのないカスタムドメインに送信されたリクエストからの 400 シリーズエラー。
  • 内部障害による 500 シリーズエラー。

詳細については、「REST API のモニタリング」を参照してください。

解決方法

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

CloudWatch Logs をアクティブ化するには、アカウントのログを CloudWatch に対して読み書きするアクセス許可を API Gateway に付与する必要があります。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 Console にログインします。

2.    ナビゲーションペインで、[APIs] (API) を選択します。

3.    API を選択し、[Stages] (ステージ) を選択します。

4.    [Stages] (ステージ) で、ステージを選択し、[Logs/Tracing] (ログ/トレース) タブを選択します。

5.    [CloudWatch Settings] (CloudWatch 設定) で、以下を確認します。
[Enable CloudWatch Logs] (CloudWatch Logs を有効にする) が選択されている。ログレベルINFO に設定されている。 注: ログレベルが ERROR に設定されている場合、API Gateway のエラーのリクエストのみがログに記録されます。成功した API リクエストはログに記録されません。
追加のログデータに対して、[Log full requests/responses data] (リクエスト/レスポンスデータをすべてログに記録する) と、[Enable Detailed CloudWatch Metrics] (詳細な CloudWatch メトリクスを有効にする) が選択されています。 注: 機密データがログに記録される可能性がある本番 API に対しては [Log full requests/responses data] (リクエスト/レスポンスデータをすべてログに記録する) を有効にしないことがベストプラクティスです。

6.    [Custom Access Logging] (カスタムアクセスログ記録) で、[Enable Access Logging] (アクセスログ記録を有効にする) が選択されていることを確認します。

ログ記録メソッドを確認し、必要に応じてオーバーライドする

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

1.    API Gateway Console にログインします。

2.    ナビゲーションペインで、[APIs] (API) を選択します。

3.    API を選択し、[Stages] (ステージ) を選択します。

4.    [Stages] (ステージ) で、ステージ名を展開し、HTTP メソッドを選択します。例えば、GET です。

5.    [Settings] (設定) で、[Override for this method] (このメソッドのオーバーライド) を選択します。

6.    [CloudWatch settings] (CloudWatch 設定) で、必要に応じてユースケースに対して追加のログ変更を加え、[Save Changes] (変更の保存) を選択します。

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


関連情報

CloudWatch ログで API Gateway REST API エラーを見つけるにはどうすればよいですか?

API Gateway のアクセスログ記録を設定するにはどうすればよいですか?

API Gateway の REST API または WebSocket API のトラブルシューティングのために CloudWatch Logs をオンにするにはどうすればよいですか?

コメントはありません

関連するコンテンツ