Reputation: 824
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
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
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