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

部署AWS Lambda与API Gateway获取客户端IP报错排查求助

问题根因

报错Cannot read property 'sourceIP' of undefined的核心原因是配置不匹配:你在API Gateway映射模板中定义的sourceIP字段位于传入Lambda的event对象根级,但Lambda代码中尝试读取的路径是event.identity.sourceIP,路径不存在导致取值报错。

快速修复方案

两种修复方式二选一即可,修改完成后必须重新部署API到对应阶段,新配置才会生效:

  • 方案1(改Lambda代码,无需调整API配置):
    保留现有API Gateway映射模板配置,直接替换Lambda函数代码为如下内容,同时对齐官方checkip服务的纯文本返回格式:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
    const clientIp = event.sourceIP;
    console.log('SourceIP =', clientIp);
    callback(null, {
        statusCode: 200,
        headers: {
            'Content-Type': 'text/plain',
            'Access-Control-Allow-Origin': '*'
        },
        body: clientIp
    });
};
  • 方案2(改映射模板,无需调整Lambda代码):
    保留原有Lambda代码,进入Integration Request的Mapping Templates配置页,将原有映射模板替换为如下内容,让传入的字段路径和代码取值逻辑匹配:
{
    "identity": {
        "sourceIP": "$context.identity.sourceIp"
    }
}
更优零配置实现方案

不需要手动编写映射模板,直接利用API Gateway传给Lambda的原生请求上下文取值,配置步骤更少,出错概率更低:

  1. 创建Lambda函数,选择Node.js 14.x及以上版本Runtime,写入如下函数代码:
exports.handler = async (event) => {
    // 直接从API Gateway原生请求上下文中读取客户端源IP
    const clientIp = event.requestContext.identity.sourceIp;
    return {
        statusCode: 200,
        headers: {
            'Content-Type': 'text/plain'
        },
        body: clientIp
    };
};
  1. 进入API Gateway控制台创建REST API,新建GET方法,集成类型选择Lambda,绑定刚才创建的函数,Integration Request配置保持默认,不要添加任何自定义Mapping Templates。
  2. 按需开启GET方法的CORS配置,完成后将API部署到对应阶段,访问生成的调用URL即可直接得到客户端公网IP,返回行为和官方checkip服务完全一致。

常见踩坑提示:所有API Gateway侧的配置修改,必须执行部署操作后才会在线上生效,仅保存配置不会同步到已发布的API阶段。

内容的提问来源于stack exchange,提问作者kpg11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:21:47