使用API Gateway、Lambda、Cognito、S3、Dynamodb部署AWS全球基础设施



假设我需要一个API网关,它将运行Lambdas,我想做最好的全球分布式执行基础设施。此外,我将使用Cognito进行身份验证,使用Dynamodb,使用S3处理用户数据和前端静态信息。

我的应用程序位于myapp.com

首先用户从最近的位置获取静态前端:

用户===>边缘位置在CloudFront <—S3在任何区域(静态前端)

之后,我们需要与API网关进行通信。

用户= = => S3 API网关——>λ> | | Cognito | | Dynamodb

API Gateway可以位于多个区域,即使是与CloudFront一起分布的,每个端点都指向位于给定区域的Lambda:假设我在eu-west-1部署API。如果一个请求是从美国发送的,即使我的API在CloudFront上,它运行的Lambda位于eu-west-1,所以延迟无论如何都会很高。

为了避免这种情况,我需要在us-east-1和所有lambda上部署另一个API。这个API会指向那些lambda

如果我为每个单独的区域部署一个API,我将需要为每个区域部署一个端点,并且前端应该决定请求哪一个。但是我们怎么知道哪一个是最近的位置呢?

理想的场景是api.myapp.com上的单个全局端点,它将前往最近的API网关,该网关也运行位于该区域的Lambdas。我可以使用Route 53延迟路由配置多个A记录指向每个api网关吗?

如果这样做不对,你能给我指出正确的方向吗?

AWS最近宣布支持区域API端点,您可以使用它来实现此功能。

下面是一个AWS博客,解释了如何实现这一点:

使用Amazon API Gateway和AWS Lambda构建多区域无服务器应用程序

摘自博客:

API网关中默认的API端点类型是边缘优化API端点,它允许客户端通过Amazon访问APICloudFront分布。这通常会改善的连接时间客户地域多样化。缺省情况下,自定义域名为全局唯一的,并且边缘优化的API端点将调用函数在单个区域的情况下进行积分。不能在Route 53双活的情况下使用这种类型的端点设置和故障转移。

API网关中的新区域API端点移动API端点,且自定义域名在每个区域内是唯一的。这使得在每个区域运行API的完整副本成为可能,然后使用Route 53使用双活设置和故障转移。

不幸的是,这是目前不可能的。这里的主要拦截器是CloudFront。MikeD@AWS在他们的论坛上提供信息:

当你创建一个自定义域名时,它会为域名创建一个关联的CloudFront分布,CloudFront在域名上强制全局唯一性。

如果带有域名的CloudFront分布已经存在,那么CreateCloudFrontDistribution将失败,API网关将返回一个错误,而不保存域名或允许您定义与之相关的API。

因此,目前(2016年6月29日)没有办法让多个地区的API网关处理相同的域名。

自2016年7月4日确认存在开放功能请求以来,AWS没有提供必要的更新。更新的AWS表单线程

Checkout Lambda@Edge

问:Lambda@Edge是什么?Lambda@Edge允许您跨AWS运行代码无需配置或管理服务器的全球位置,以最低的网络延迟响应最终用户。你只需要上传将Node.js代码配置到AWS Lambda,并将函数配置为触发响应Amazon CloudFront请求(即,当当请求被转发或接收回来时,查看器请求着陆从原点开始,并在响应到最终用户之前)。然后,代码就可以跨全球AWS位置执行了接收到内容请求,并根据CloudFront全局请求。

用例,最小化全局分布用户的延迟

问:什么时候使用Lambda@Edge?Lambda@Edge针对延迟进行了优化敏感的用例,您的终端查看器分布在全球。理想情况下,做出决定所需的所有信息都是可用的在CloudFront边缘,在函数和请求中。这意味着在用例中,您希望决定如何根据用户特征(例如,位置、客户端)提供内容设备等)现在可以从边缘执行和服务Node.js-6.10无需路由回中心化服务器

最新更新