在HttpApi网关日志中是否可以获取到头信息?

0

【以下的问题经过翻译处理】 你好!

是否可以直接从HttpApi网关访问并记录特定header值到Cloudwatch?

我使用Cloudflare作为我的DNS,并从Cloudflare路由到我的HttpApi网关上触发的Lambda。我的网关将IP记录到Cloudwatch中。但是,这是Cloudflare IP而不是发送到标头中的原始用户IP值。

我可以通过访问event.headers['cf-connecting-ip']获取Lambda中的原始用户IP,但我也希望我的HttpApi网关将其记录到Cloudwatch。我已经查阅了文档,但没有看到从HttpApi网关访问标头的提及。

这是我的当前日志模板设置为我的网关:

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

谢谢!

profile picture
专家
已提问 6 个月前3 查看次数
1 回答
0

【以下的回答经过翻译处理】 在API Gateway 访问日志中记录头信息可能并不可行。根据文档,只有以下变量可以记录从API Gateway访问日志到Cloudwatch - https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-logging-variables.html

话虽如此,在后端集成lambda中记录头信息是可能的。

我使用了这个教程https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-dynamo-db.html,只需修改lambda函数代码即可记录事件对象。

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 { .....其余的代码

当我从API Gateway调用API时,我确实可以看到头信息被记录在lambda函数的Cloudwatch日志中。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则