AWS Lambda函数event.requestContext为何未定义,无法获取用户远程IP?
Lambda无法获取requestContext及用户IP的原因与解决方案
核心原因分两种场景:
1. 控制台测试按钮调用
Lambda控制台的默认测试事件模板(如Hello World)不包含requestContext字段,直接访问event.requestContext自然会返回undefined。
解决方法:手动构造包含IP信息的测试事件,比如:
{ "requestContext": { "identity": { "sourceIp": "192.168.1.1" } } }
2. Function URL调用
Function URL的事件格式遵循APIGatewayV2规范,用户IP的存储位置和传统API Gateway不同:
- 传统API Gateway:
event.requestContext.identity.sourceIp - Function URL:
event.requestContext.http.sourceIp
你仍用旧路径访问,自然拿不到值。
修正后的兼容代码
同时兼容Function URL、传统API Gateway及测试场景,还修复了代码中multiValueHeader的拼写错误(应为复数multiValueHeaders):
const res = { statusCode: 200, isBase64Encoded: false, headers: { "Access-Control-Allow-Origin":"*", "Content-Type": "text/plain" }, multiValueHeaders: {} }; export const handler = async(event) => { let ip = 'unknown'; if (event.requestContext) { // 优先取Function URL的IP if (event.requestContext.http?.sourceIp) { ip = event.requestContext.http.sourceIp; } // 兼容传统API Gateway或自定义测试事件 else if (event.requestContext.identity?.sourceIp) { ip = event.requestContext.identity.sourceIp; } } res.body = "hi " + ip; return res; }
内容的提问来源于stack exchange,提问作者Chong Lip Phang
相关产品推荐
相关产品推荐

