如何通过Amazon API Gateway + Lambda(节点)获取用户的公共IP地址

我目前正在写一个Node.js的lambda函数,我想logging传入的请求者的公共IP地址。 我一整天都在浏览API网关和Lambda文档,但还没有find解决scheme。

lambda event对象是否包含可用于提取用户IP的请求元数据?

以下是在Lambda函数中使用API​​网关的$context.identity.sourceIp的简单演示。

API映射模板:

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

Lambdafunction:

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

在API网关中,这是价值

 $context.identity.sourceIp 

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

您可以通过映射模板将其传递给您的Lambda。

编辑

更好的方法是实际检查

 event['requestContext']['identity']['sourceIp'] 

您也可以从同一个对象获取User-Agent

 event['requestContext']['identity']['userAgent'] 

原始答案

截至2017年9月,您可以使用Lambda Proxy集成在API网关中创build一个方法,这将使您能够访问

 events['headers']['X-Forwarded-For'] 

这看起来像1.1.1.1,214.25.52.1

第一个ip 1.1.1.1是你的用户的公共ip地址。