【发布时间】:2021-08-18 23:35:50
【问题描述】:
我使用了这种技术 (How could I retrieve AWS Lambda public IP address by using Python?),但它提供了 AWS 内 Lambda 服务器的 IPAddress。
基于此:How can I retrieve a user's public IP address via Amazon API Gateway + Lambda (node),看来应该可以用了
ip_address = event['requestContext']['identity']['sourceIp'];
我的处理程序是这样开始的:
def lambda_handler(event, context):
但如果我执行pprint.pprint(event),我看不到任何 RequestContext,只有“正文”。
FFXSam 对 Jonathan 回答的最后一条评论说:“应该注意,如果您提供的页面不在授权方后面,则 event.requestContext.identity 不存在。”。 我不确定这意味着什么或为什么它是真的。我正在使用 API Gateway,并且客户端的 JavaScript 代码正在调用它。
我可以要求客户端编码器将正文中的本地 IP 地址发送给我,但似乎我应该能够在 Lambda 函数本身中获取它。
有人询问事件,尽管我说它只有在名为“body”的 json 元素中传递的字段:
代码:
print("pprint event:")
pprint.pprint(event)
2021-06-06T13:30:01.231-05:00 pprint event:
2021-06-06T13:30:01.231-05:00 {'body': {'ResponseTimeMilliseconds': 2225,
2021-06-06T13:30:01.231-05:00 'authToken': '12312312',
2021-06-06T13:30:01.231-05:00 'handNumber': 7}}
【问题讨论】:
-
检查您是否通过
aws apigateway get-authorizers --rest-api-id YOUR-API-ID在API网关中或在授权者部分下的控制台中附加了授权者 -
@JenyaY。 - 没有授权人
-
如果我添加一个“授权人”,这意味着客户端代码必须更改,对吗?添加授权人是否会自动使 IP 地址起作用,如果是,为什么?
-
阅读您链接的帖子中的第二个答案:stackoverflow.com/a/46021715/13070 另请注意,它完全取决于您选择的 API Gateway 集成类型,以及您拥有的映射模板或请求直通选项选择。您的问题实际上是另一个问题的重复。您需要花时间阅读完整的答案,包括有关映射模板的信息。
-
MarkB - 我在 events 对象上做了一个 pprint,但在那里没有看到类似的东西。当我有机会时,我会再次检查。看起来上下文可能已经想到了,其他答案之一:$context.identity.sourceIp
标签: amazon-web-services aws-lambda python-3.7