使用 AWS API 网关和 Lambda 的地理定位服务

Geolocation service with AWS API Gateway and Lambda

我们正在努力做什么

我们正在尝试使用 API 网关和 Lambda 设置一个非常简单的地理定位服务。

https://ipstack.com/ 非常相似,但我们不想使用外部服务,因为我们认为在某些司法管辖区向我们提供的服务发送 non-anonymized IP 地址可能是个问题不控制(在征得用户同意之前)。

想要一个简单的 api https://location.my-site.com returns 国家(用于 GDPR、cookie 等目的)。

现在看来,API 网关后面有一个轻型 Cloudfront,它会产生 header “Cloudfront-Viewer-Country”,这将非常简单并实现我们需要的。即 lambda 接收 Cloudfront-Viewer-Country 并将其发回。

我们的尝试

我见过这样的解决方案:Build a Geolocation API using AWS Lambda and MaxMind,但我很难理解为什么部署 RDS 和维护 MaxMind 数据库对我们有意义,如果它已经可以从 Cloudfront-Viewer-Country.

我看到了这个问题:, and tried implementing the answer from Michael - sqlbot。但我似乎无法访问 headers.

我也尝试过 post 中的建议,但我似乎也无法访问 Cloudfront-Viewer-Country 的值。

我们在做什么(结合'What we have tried')

要访问并检查 header 是否可用,我正在使用以下 python lambda 函数

import json
 
def lambda_handler(event, context):

    response = {
        'status': '200',
        'statusDescription': 'Found',
        'headers': {
            'location' : [ {
                'event': json.dumps(event)
            } ]
        }
    }
 
    return response

问题是什么

但事件 json 转储不包含 Cloudfront-Viewer-Country。

我怀疑我做错了什么,但我真的想不通。任何指针将不胜感激。

谢谢

我能够通过设置 Endpoint Type = Edge optimized 来访问 Cloudfront-Viewer-Country。

我无法让它与 Endpoint Type = Regional 或 http api 网关一起工作。