You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:55:23