はじめに
この記事は、下記について書いた記事となります。
- 対象読者:初めてAPIGWのログ設定をする人 / 公式ドキュメントを探す時間を短縮したい人
- 記事内容:公式ドキュメントを元にAPIGWのログ取得 (実行ログ•アクセスログ) を有効化 / 無効化する方法を記載 (取得したログは、CloudWatch Logs ロググループへ送信する方式)
実際にAPIGWのログ設定を実施してみた内容となります。
この記事がどなたかのご参考となれば幸いです。
APIGWのログ:実行ログ/アクセスログ
API Gateway での CloudWatch によるログの形式
CloudWatch による API のログには、実行ログとアクセスログの 2 種類があります。実行ログでは、API Gateway によって CloudWatch Logs が管理されます。このプロセスには、ロググループとログストリームの作成、および呼び出し元のリクエストとレスポンスのログストリームへのレポートが含まれます。
- 実行ログ (有効化時)
:自動的に作成されるAPI-Gateway-Execution-Logs_{rest-api-id}/{stage_name}
形式のロググループに送信される - アクセスログ (有効化時)
:任意に作成したロググループを指定、そちらに送信される
ログ取得:有効化
- ログ出力用 IAM ロールが設定されているか確認 (※未設定であれば設定を実施)
- APIGWのメインナビゲーションペイン > API > 対象のAPI を選択
- APIGWのメインナビゲーションペイン > ステージ > ログとトレース > 編集 からログの設定画面へ遷移
- 実行ログ有効化:ログ記録レベル – 今回は
エラーと情報ログ
を選択
- 【補足】実行ログのログ記録レベルは以下の種類がある
API Gateway での CloudWatch による REST API のログの設定 – API Gateway コンソールを使用した CloudWatch による API のログの設定
・オフ — この段階ではログ記録はオンになっていません。
・エラーのみ — ログ記録はエラーに対してのみ有効になっています。
・エラーと情報ログ — ログ記録はすべてのイベントに対して有効になっています。
・リクエストとレスポンスの完全なログ — 詳細なログ記録がすべてのイベントに対して有効になっています。このログは API のトラブルシューティングに役立ちますが、機密データが記録される可能性があります。注記
本稼働用 API には、[リクエストとレスポンスの完全なログ] を有効にしないことをお勧めします。
- アクセスログ有効化
:カスタムのアクセスログ – 有効化ボタンをオン
:アクセスログの送信先 ARN – 任意に作成したロググループのARNを入力
:ログの形式 – 今回は下記にあるテンプレート例を入力 (※一行で入力する必要あり)
アクセスログの作成では、API デベロッパーとして、API にアクセスしたユーザーと、呼び出し元が API にアクセスした方法を記録します。独自のロググループを作成したり、既存のロググループを選択したりすることができます。これらは、API Gateway で管理することができます。アクセスの詳細を指定するには、$context 変数、ログ形式、ロググループの送信先を選択します。
アクセスログには少なくとも
$context.requestId
または$context.extendedRequestId
が含まれている必要があります。ベストプラクティスとして、$context.requestId
と$context.extendedRequestId
をログ形式に含めます。
API Gateway マッピングテンプレートとアクセスのログ記録の変数リファレンス – $context 変数テンプレートの例
{ "stage" : "$context.stage", "request_id" : "$context.requestId", "api_id" : "$context.apiId", "resource_path" : "$context.resourcePath", "resource_id" : "$context.resourceId", "http_method" : "$context.httpMethod", "source_ip" : "$context.identity.sourceIp", "user-agent" : "$context.identity.userAgent", "account_id" : "$context.identity.accountId", "api_key" : "$context.identity.apiKey", "caller" : "$context.identity.caller", "user" : "$context.identity.user", "user_arn" : "$context.identity.userArn" }
(一行形式)
{ "stage":"$context.stage", "request_id":"$context.requestId", "api_id":"$context.apiId", "resource_path":"$context.resourcePath", "resource_id":"$context.resourceId", "http_method":"$context.httpMethod", "source_ip":"$context.identity.sourceIp", "user-agent":"$context.identity.userAgent", "account_id":"$context.identity.accountId", "api_key":"$context.identity.apiKey", "caller":"$context.identity.caller", "user":"$context.identity.user", "user_arn":"$context.identity.userArn" }
- 保存を押下
- 設定確認
ログ取得:無効化
- 現状設定 確認
- APIGWのメインナビゲーションペイン > API > 対象のAPI を選択
- APIGWのメインナビゲーションペイン > ステージ > ログとトレース > 編集 からログの設定画面へ遷移
- 実行ログ無効化:ログ記録レベル –
オフ
を選択
- アクセスログ無効化:カスタムのアクセスログ – 有効化ボタンをオフ
- 保存を押下
- 設定確認
(内容としては以上となります。)