Phil
Phil

Reputation: 824

AWS API Gateway: Log Query String in Access Log

I've enabled Access Logging to CloudWatch for my API in AWS API Gateway and that works fine. However, it will only log the path section of the URL and not my query string parameters.

My log format looks like this:

[$context.requestTime] ($context.status) "$context.httpMethod $context.path $context.requestId

Let's say, I call my API like this:

GET http://my.server.com/details?id=123

The corresponding access log line will look like this:

[19/Jun/2018:06:09:27 +0000] (200) "GET /details 5229a43c-7387-11e8-xxxx-xxxxxxxx

I need the id=123 as well, but I can't figure out how to access it. The documentation suggest using $input.params('id'), but that will always return -.

Upvotes: 14

Views: 5000

Answers (2)

surry
surry

Reputation: 1

I have not been able to figure out a way to log the query string other than to integrate it within my Lambda Authorizer. This is a code snippet. You then reference the query string in the access log format definition as "queryString": "$context.authorizer.queryString"

def lambda_handler(event, context):
    queryStringParameters = event["queryStringParameters"]
    queryString = urlencode(queryStringParameters)
    authResponse = {
        "principalId": "",
        "policyDocument": {
            "Version": "",
            "Statement": []
        }
    }
    
    authResponse["principalId"] = "user|a1b2c3d4"
    authResponse["policyDocument"]["Version"] = "2012-10-17"
    authResponse["policyDocument"]["Statement"] = []
    statementOne = {
        "Action": "execute-api:Invoke",
        "Effect": effect,
        "Resource": methodArn
    }
    authResponse["policyDocument"]["Statement"].append(statementOne)
    context = {
        'queryString': queryString
    }
    authResponse['context'] = context
    return authResponse

Upvotes: 0

Andres Luque
Andres Luque

Reputation: 55

Only $context variables are supported, not $input, etc. AWS Ref: Have you seen https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html?

Upvotes: 5

Related Questions