Amazon API Gateway で Amazon CloudWatch Logs を有効化しても、ログが見つからないため、原因をトラブルシューティングしたいです。
簡単な説明
API Gateway で REST API の CloudWatch ログを設定する際には、実行ログとアクセスログを使用できます。API Gateway は、拒否したすべてのクライアント側のエラーを実行ログに記録するとは限りません。たとえば、クライアントが API リクエストを行った REST API のリソースパスが誤っていた場合、クライアントには次の応答が返されます: "403 Missing Authentication Token"API Gateway は、この種類の応答を実行ログに記録しません。クライアント側のエラーをトラブルシューティングするには、CloudWatch のアクセスログを使用します。
API Gateway は、次のエラーに関するログを生成しない場合があります。
- "413 Request Entity Too Large" エラー
- "431 Request Header Fields Too Large" エラー
- "Excessive 429 Too Many Requests" エラー
- API マッピングを設定せず、クライアントがカスタムドメインにリクエストを行った場合の 4xx エラー
- 内部の障害が原因で発生する 5xx エラー
詳細については、「API Gateway で REST API を監視する」を参照してください。
解決策
CloudWatch Logs に対する API Gateway のアクセス許可を確認する
CloudWatch Logs を有効にするには、AWS アカウントの CloudWatch に対するログの読み書き権限を API Gateway に付与する必要があります。
まず、apigateway.amazonaws.com を信頼されたエンティティとする AWS Identity and Access Management (IAM) ロールを作成します。次に、AWS マネージドポリシー AmazonAPIGatewayPushToCloudWatchLogs をそのロールにアタッチします。ロールの Amazon リソースネーム (ARN) をアカウントの cloudwatchRoleArn に設定します。
ポリシー例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:GetLogEvents",
"logs:FilterLogEvents"
],
"Resource": "*"
}
]
}
**注:**AWS リージョンでは、AWS Security Token Service (AWS STS) を有効にする必要があります。さらに、CloudWatch Logs を有効化するすべてのリージョンにおいて、その IAM ロールが有効であることを確認してください。
詳細については、「AWS リージョンで AWS STS を有効化、無効化する」および「CloudWatch ログに対する権限」を参照してください。
API Gateway のログ記録設定を確認する
API Gateway で CloudWatch 実行ログまたはアクセスログが正しく設定されていることを確認します。
注: 実行ログとアクセスログは、個別に有効化できます。
次の手順を実行します。
- API Gateway コンソールを開きます。
- ナビゲーションペインで [API] を選択します。
- 目的の API を選択し、[ステージ] を選択します。
- 対象のステージを選択し、[ログ/トレース] タブを選択します。
- [CloudWatch 設定] で [CloudWatch Logs を有効にする] を選択します。
- [ログレベル] を [ERROR] および [INFO] に設定します。
注: [ログレベル] を [ERROR] に設定した場合、API Gateway はリクエストエラーのみを記録し、正常に行われた API リクエストを記録しません。
- [データトレース] を選択し、ステージでデータトレースの記録を有効にします。
注: データトレースを有効化した場合、API Gateway は機密データを記録する可能性があるため、本番環境では有効化は推奨されません。
- [カスタムアクセスログ] で [カスタムアクセスログを有効にする] を選択します。
ログ記録方法を確認する
デフォルトでは、すべての API リソースは API リソースステージと同じ構成を使用します。ステージを継承したくない場合は、設定をオーバーライドして別の構成を設定します。
ログ記録方法を確認するには、次の手順を実行します。
- API Gateway コンソールを開きます。
- ナビゲーションペインで [API] を選択します。
- 目的の API を選択し、[ステージ] を選択します。
- [ステージ] でステージ名を展開します。次に、使用する HTTP メソッド (例: GET) を選択します。
- [設定] で [このメソッドの上書き] を選択します。
注: 追加のログ変更を行う場合は、[CloudWatch 設定] セクションで必要な設定変更を行います。
- [変更を保存] を選択します。
関連情報
CloudWatch ログで API Gateway REST API のエラーを特定する方法を教えてください
API Gateway でアクセスログを設定する方法を教えてください
API Gateway REST API または WebSocket API のトラブルシューティング用に、CloudWatch Logs を有効にする方法を教えてください