はじめに

この記事は、下記について書いた記事となります。

  • 対象読者:初めて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 のトラブルシューティングに役立ちますが、機密データが記録される可能性があります。

注記
本稼働用 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のメインナビゲーションペイン > ステージ > ログとトレース > 編集 からログの設定画面へ遷移

  • 実行ログ無効化:ログ記録レベル – オフ を選択

  • アクセスログ無効化:カスタムのアクセスログ – 有効化ボタンをオフ

  • 保存を押下
  • 設定確認

(内容としては以上となります。)