Is it possible to get the headers in HttpApi Gateway logs?

0

Howdy!

Is it possible to access and log specific header values directly from the HttpApi Gateway to Cloudwatch?

Im using Cloudflare for my DNS and am routing from Cloudflare to my HttpApi Gateway where I have Lambdas firing. My Gateway is logging the ip to Cloudwatch; however, this is the Cloudflare IP, not the original user IP which is a value sent along in the headers.

I am able to get the original users' ip in my Lambda by accessing event.headers['cf-connecting-ip'], but I would like to have my HttpApi Gateway log this to Cloudwatch as well. I've reviewed the documentation and didn't see mention of accessing headers from the HttpApi Gateway.

Here's what my current log template is set up as for my Gateway

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

Thanks!

1개 답변
1
수락된 답변

It doesn't look like it is possible to log header in the API Gateway access log. From the documentation, only the following variables can be logged from API Gateway access logs to Cloudwatch - https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-logging-variables.html

Having said that, it is possible to log the headers in the backend integration lambda.

I used this tutorial https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-dynamo-db.html and just modified the lambda function code to log the event object

const AWS = require("aws-sdk");

const dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event, context) => { let body; let statusCode = 200; const headers = { "Content-Type": "application/json" }; console.log("#####################") console.log(event) console.log("#####################") try { .....rest of the code

When I called the API from the API Gateway, I do see the headers getting logged in the Cloudwatch logs of the lambda function.

profile pictureAWS
전문가
답변함 2년 전
  • Thank you! I'll go ahead and continue to log the headers at the Lambda level. That should be enough since I am able to get the original user ip from the headers that way.

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠