问题描述:
在使用Amazon Lambda和API Gateway时,当从API Gateway传递请求到Lambda函数时,'event.source_ip'返回为'null'。
解决方法:
确保API Gateway的部署配置中启用了“X-Forwarded-For”选项。这将确保API Gateway将客户端的IP地址传递给Lambda函数。
在Lambda函数的代码中,使用以下代码来获取客户端的IP地址:
import json
def lambda_handler(event, context):
source_ip = event['requestContext']['identity']['sourceIp']
# 其他代码...
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
如果在上述代码中仍然无法获取IP地址,请确保在API Gateway的集成请求中启用了“Use Lambda Proxy integration”选项。这将确保Lambda函数能够正确解析来自API Gateway的请求。
另外,您还可以尝试在API Gateway的集成请求中使用'Mapping Templates'来控制传递给Lambda函数的事件对象。您可以使用以下模板来确保客户端的IP地址在事件对象中的正确位置:
{
"requestContext": {
"identity": {
"sourceIp": "$context.identity.sourceIp"
}
},
"otherData": "$input.json('$')"
}
请注意,上述解决方法假设您正在使用AWS Lambda和API Gateway的Python运行时。如果您使用的是其他语言或框架,请相应地修改代码示例。