EC2与AWS CloudFront?

IN SHORT How do I connect to the nearest EC2 instances using CloudFront to achive geolocation based Content Distribution? 

我想做一个基于地理位置的内容分发,以便最终用户可以到达地理位置最接近的边缘位置,然后从距离他最近的s3实例获得静态内容,该s3实例的地址只知道关联的EC2实例。

  ______ | EC2 | |------| | S3 | |______| Lets say this is a single unit 

我希望这些单元充当我的内容caching。 需要EC2来检查权限并检查数据库的内容可用性,而S3包含实际的数据。

我希望用户能够到达离他最近的一个单位。 所以,我决定使用AWS CloudFront

如果我直接使用S3存储桶,但是这会产生不必要的数据副本(一个选项是TTL,但不适用于用例),这样工作得很好。

所以我尝试使用CloudFront-Viewer-Country进行白名单,但我无法看到任何更改。

访问后端时,selectCloudFront的一个主机名作为原始服务器主机名。 此主机名必须位于您所控制的域中,域名在Route 53中进行configuration。

我们要做的就是安排它,以便在CloudFront中的任何边缘位置尝试查找此主机名时,都会收到最近的EC2实例的IP地址。 (浏览器自动路由到最近的CloudFront边缘,所以前端路由是自动的,我们只需路由到所需的后端)。

为此,请为Route 53中的单个主机名创build多个基于延迟的路由logging,每个logging指向一个EC2实例(或者如果给定区域中有多个实例,则可能是ELB),并映射(在路由53configuration)到部署EC2实例的区域。

每当CloudFront边缘位置需要在DNS中查找源服务器时,它收到的答案将是位于EC2区域中最接近特定CloudFront边缘位置的实例。 (有更多CloudFront位置比AWS区域更多)。 这个实例将是唯一的这个特定的CloudFront边缘将发送所有的请求 – 这是你想要的 – 因为客户端请求已经被发送到最近的CloudFront边缘,每个CloudFront边缘现在将请求发送到EC2实例在最近的区域。

对于没有实例的区域,请在Route 53中不提供任何内容,并且将自动select其中一个现有区域 – 与CloudFront边缘“最接近”。 即使您只在基于延迟的路由RR集合中configuration了一个区域,该configuration实际上仍然有效,因为一个区域总是被认为与地球上任何地方“最近”,因为没有其他区域可以进行比较。

请注意,当然,地理路由既是一门艺术,也是一门科学,所以不能保证“最近的”CloudFront边缘(特定位置的浏览器连接的边缘)将是您所期望的那么“最近的”AWS区域必然是您所期望的。 这可能是因为“最接近”是指最佳的连接性而不是地理距离,或者是因为用户没有正确地理定位。 这不是Route 53或CloudFront的限制,而是因为基于IP地址的地理定位100%的准确性是不可能的。 这种不精确性需要考虑到你的devise中,但总的来说,这是你看起来试图完成的解决scheme。