AWS AppSync Lambda 解析器 $context.identity 为空

AWS AppSync Lambda resolver $context.identity is null

我正在尝试在从 AWS AppSync 调用的 lambda 函数中获取用户的 IP 地址。

我试过这个输入解析器:

{ 
    "version" : "2017-02-28", 
    "operation": "Invoke", 
    "payload": { 
         "arguments": $util.toJson($context.arguments),
         "sourceIp" : $context.identity.sourceIp 
    } 
}

但我在测试时发现,当我通过 AppSync 查询仪表板调用该函数时,$context.identity 为空。

还有其他方法可以获取用户的 ip 地址还是我做错了什么?

谢谢。

更新: 在 aldarisbm 的帮助下,我想出了这个输入解析器:

#set ($forwardHeader = "${context.request.headers.X-Forwarded-For}")
#set ($comma = $forwardHeader.indexOf(','))
#set ($ip = $forwardHeader.substring(0, $comma))
#set ($payload = $context.arguments)
#set ($discard = $payload.put("sourceIp", "${ip}"))

{ "version" : "2017-02-28", "operation": "Invoke", "payload": $util.toJson($payload) } 

我没有具体使用 $context.identity,但您是否尝试检查 AWS 添加到您的请求中的 header:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

有一个 X-Forwarded-For: client-ip-address、header 被添加到请求中。

这应该可以解决您的问题。