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

HTTP API のログ記録の設定

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

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

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

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

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

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

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

{ "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": "*" } ] }

ロググループを作成する

以下の 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
  • 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" }
  • 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> </request>
  • CSV (カンマ区切り値):

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