HTTP API のログ記録の設定 - Amazon API Gateway

HTTP API のログ記録の設定

ログ記録を有効にして CloudWatch Logs にログを記録することができます。ログ変数を使用して、ログの内容をカスタマイズできます。

HTTP API のログ記録を有効にするには、以下を実行する必要があります。

  1. ログ記録を有効にするために必要なアクセス許可がユーザーにあることを確認します。

  2. CloudWatch Logs ロググループを作成します。

  3. API のステージの CloudWatch Logs ロググループの ARN を指定します。

ログ記録を有効にするアクセス許可

API のログ記録を有効にするには、 ユーザーに次のアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }

ロググループを作成し、HTTP API のログ記録を有効にする

ロググループを作成し、AWS Management Console または AWS CLI を使用してアクセスログ記録を有効化できます。

AWS Management Console
  1. ロググループを作成します。

    コンソールを使用してロググループを作成する方法については、Amazon CloudWatch Logs ユーザーガイドの「ロググループとログストリームの操作」を参照してください。

  2. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  3. HTTP API を選択します。

  4. プライマリナビゲーションパネルの [Monitor] (モニタリング) タブで、[Logging] (ログ記録) を選択します。

  5. ログ記録を有効にするステージを選択し、[Select] (選択) を選択します。

  6. [Edit] (編集) を選択してアクセスログを有効にします。

  7. [Access logging] (アクセスのログ記録) を有効にし、CloudWatch Logs を入力して、ログ形式を選択します。

  8. [Save] を選択します。

AWS CLI

以下の AWS CLI コマンドはロググループを作成します。

aws logs create-log-group --log-group-name my-log-group

ログ記録を有効にするには、ロググループの Amazon リソースネーム (ARN) が必要です。ARN 形式は、arn:aws:logs:region:account-id:log-group:log-group-name です。

次の AWS CLI コマンドは、HTTP API の $default ステージのログ記録を有効にします。

aws apigatewayv2 update-stage --api-id abcdef \ --stage-name '$default' \ --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'

ログ形式の例

いくつかの一般的なアクセスログ形式の例は API Gateway コンソールで使用できます。それらの例を以下に示します。

  • CLF (Common Log Format):

    $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  • JSON:

    { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  • XML:

    <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  • CSV (カンマ区切り値):

    $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId