Protokollierung für eine HTTP-API konfigurieren - Amazon API Gateway

Protokollierung für eine HTTP-API konfigurieren

Sie können die Protokollierung aktivieren, um Protokolle in CloudWatch Logs zu schreiben. Sie können Protokollierungsvariablen verwenden, um den Inhalt Ihrer Protokolle anzupassen.

Um die Protokollierung für eine HTTP-API zu aktivieren, müssen Sie Folgendes tun.

  1. Stellen Sie sicher, dass Ihr IAM-Benutzer über die erforderlichen Berechtigungen verfügt, um die Protokollierung zu aktivieren.

  2. Erstellen Sie eine CloudWatch Logs-Protokollgruppe.

  3. Geben Sie den ARN der CloudWatch Logs-Protokollgruppe für eine Stufe Ihrer API an.

Berechtigungen zum Aktivieren der Protokollierung

Um die Protokollierung für eine API zu aktivieren, muss Ihr IAM-Benutzer über die folgenden Berechtigungen verfügen.

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

Erstellen einer Protokollgruppe

Der folgende AWS CLI-Befehl erstellt eine Protokollgruppe.

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

Zum Aktivieren der Protokollierung benötigen Sie den Amazon-Ressourcennamen (ARN) für Ihre Protokollgruppe. Das ARN-Format lautet arn:aws:logs:region: account-id:log-group:log-group-name.

Aktivieren der Protokollierung für eine Stufe

Mit dem folgenden AWS CLI-Befehl wird die Protokollierung für die $default-Stufe einer HTTP-API aktiviert.

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"}'

Beispielprotokollformate

Beispiele für einige gängige Zugriffsprotokollformate sind in der API Gateway-Konsole verfügbar und im Folgenden aufgeführt.

  • 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 (durch Komma getrennte Werte):

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