首页 > 解决方案 > 使用 NodeJS、Rest API 和 Lambda 获取 IP

问题描述

我尝试使用以下方法从传入的 API 请求中检索 IP 地址

这是在 Lambda 函数中使用 API Gateway 的 $context.identity.sourceIp 的简单演示。

这是我用于发送到 lambda 的集成过程的 API 映射模板:

{
    "sourceIP" : "$context.identity.sourceIp"
}

这就是我使用 NodeJS 构建 lambda 函数的方式

'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
    console.log('SourceIP =', event.identity.sourceIp);
    callback(null, event.identity.sourceIp);
};

我一直在 event.identity.sourceIp 部分中遇到 SourceIp 错误。

回复:

{
  "errorType": "TypeError",
  "errorMessage": "Cannot read property 'sourceIp' of undefined",
  "trace": [
    "TypeError: Cannot read property 'sourceIp' of undefined",
    "    at Runtime.exports.handler (/var/task/index.js:4:46)",
    "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
  ]
}

我认为 event.identity.sourceIp 是使用错误的数组,我可能应该使用 event.sourceIp 但我看到在线人员在代码中使用身份。但是,当使用 event.sourceIp 时,我得到一个空响应。这看起来像以下

null,在我得到的日志下

START RequestId: 4fe70699-6e2a-411a-b7a5-684d62d4051b Version: $LATEST
2020-11-23T01:50:40.759Z    4fe70699-6e2a-411a-b7a5-684d62d4051b    INFO    SourceIP = undefined
END RequestId: 4fe70699-6e2a-411a-b7a5-684d62d4051b
REPORT RequestId: 4fe70699-6e2a-411a-b7a5-684d62d4051b  Duration: 19.15 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 64 MB  Init Duration: 143.93 ms    

我需要知道以下内容:event.identity.sourcecIp 还好吗?我应该改用 event.sourceIp 吗?

另外为什么我使用 event.sourceIP 得到空响应,在日志中我看到 INFO SourceIP = undefined????

标签: node.jsamazon-web-servicesapiaws-lambda

解决方案


推荐阅读