我试图利用CloudFront上的AWS地理跟踪功能通知我的UI用户位置,以便它知道不会在有问题的区域加载某些文件。
AWS文档提到了以下内容,但未给出有关如何准确配置CloudFront以便将CloudFront-Viewer-Country标头转发到原始位置的明确说明。我需要这样做,以便对缓存对象的请求产生带有CloudFront-Viewer-Country值的响应。
配置CloudFront以根据查看器的位置缓存对象
如果希望CloudFront根据请求来自的国家/地区缓存对象的不同版本,请配置CloudFront以将CloudFront-Viewer-Country标头转发到您的来源。CloudFront会自动将请求来自的IP地址转换为两个字母的国家/地区代码。有关易于使用的国家/地区代码列表(可按代码和国家/地区名称排序),请参阅Wikipedia条目ISO 3166-1 alpha-2。
我已经使用 API Gateway 配置了一个 WebSocket API,并且正在尝试为其配置一个自定义域名。这是一个非常简单的 API,用于在连接的客户端之间发送消息,将连接 ID 存储在 DynamoDB 中。本质上,它类似于此处演示的示例:https : //aws.amazon.com/blogs/compute/annoucing-websocket-apis-in-amazon-api-gateway/
使用 AWS 生成的 URL 时一切正常,即 wss://.execute-api.us-west-2.amazonaws.com/。但是,当我按照AWS 的这些说明设置自定义区域域名时,我能够连接但无法在客户端之间发送消息。
我检查了我的 Lambda 函数的 Cloudwatch 日志,没有看到任何错误,并尝试使用我的 CloudFormation 模板启动一个全新的环境,但无济于事。
非常清楚,以下连接命令正确触发了我的 Lambda 函数,并使用 AWS 生成的 URL 和我在 Route 53 中自己的 URL 连接我的客户端。
wscat -c wss://<endpoint> <payload>
Run Code Online (Sandbox Code Playgroud)
以下命令向连接的客户端发送消息,使用 AWS 生成的 URL 但不是我自己的。
{ "message": "sendMessage", "toId": "193818", "data", "a random msg" }
Run Code Online (Sandbox Code Playgroud)