假设我需要一个运行Lambdas的API网关,并且我希望创建最佳的全球分布式执行基础架构。此外,我将使用Cognito进行身份验证,Dynamodb和S3用于用户数据和前端静态。
我的应用位于myapp.com
首先,用户从最近的位置获取静态前端:
user ===> CloudFront的边缘位置< ---任何地区的S3(带静态前端)
之后我们需要与API网关通信。
user ===> API网关---> Lambda ---> S3 || Cognito || Dynamodb
API网关可以位于多个区域,即使与CloudFront一起分发,每个端点也指向位于给定区域的Lambda:假设我在eu-west-1部署API。如果从美国发送请求,即使我的API在CloudFront上,它运行的Lambda也位于eu-west-1,因此延迟也会很高。
为了避免这种情况,我需要在us-east-1和我所有的Lambdas上部署另一个API。该API将指向那些Lambdas
如果我为每个区域部署一个API,我需要为每个区域配置一个端点,并且前端应该决定请求哪个端点。但我们怎么知道哪一个是最近的位置?
理想情况是api.myapp.com
处的单个全局端点,它将转到最近的API网关,该网关也运行位于该区域的Lambdas。我可以使用路由53延迟路由配置多个A记录指向每个api网关吗?
如果这不是正确的方法,你能指出我正确的方向吗?
答案 0 :(得分:2)
AWS最近宣布支持区域API端点,您可以使用它来实现此目的。
以下是一个AWS博客,解释了如何实现这一目标:
Building a Multi-region Serverless Application with Amazon API Gateway and AWS Lambda
摘自博客:
API Gateway中的默认API端点类型是边缘优化的API 端点,使客户端能够通过亚马逊访问API CloudFront分发。这通常可以缩短连接时间 地理位置多样化的客户。默认情况下,自定义域名是 全局唯一且边缘优化的API端点将调用a 在Lambda集成的情况下,Lambda函数在单个区域中。 您不能将此类型的端点与Route 53主动 - 主动一起使用 设置和故障转移。
API Gateway中的新区域API端点移动API端点 进入该区域,每个区域的自定义域名是唯一的。这个 使得可以在每个区域中运行API的完整副本然后 使用Route 53使用主动 - 主动设置和故障转移。
答案 1 :(得分:0)
不幸的是,这目前不可能。这里的主要阻止者是CloudFront。 MikeD @ AWS 在其论坛上提供信息:
创建自定义域名时,它会为域名创建关联的CloudFront分配,CloudFront会对域名强制实施全局唯一性。
如果已存在具有域名的CloudFront分配,则CreateCloudFrontDistribution将失败,并且API Gateway将返回错误,而不保存域名或允许您定义其关联的API。
因此,目前(2016年6月29日)无法在多个地区获取API网关来处理相同的域名。
自2016年7月4日确认存在开放功能请求后,AWS没有提供必要的更新。AWS Form thread for updates
答案 2 :(得分:0)
问:什么是Lambda @ Edge? Lambda @ Edge允许您跨AWS运行代码 全局位置,无需配置或管理服务器, 以最低的网络延迟响应最终用户。你只需上传 您的Node.js代码到AWS Lambda并配置您的功能 触发响应Amazon CloudFront请求(即,当a 当请求被转发或接收回来时,查看者请求登陆 从原点开始,然后在回复最终用户之前)。 然后,当a时,代码可以在全球范围内的AWS位置执行 收到内容请求,并按体积缩放 CloudFront全局请求。在我们的文档中了解更多信息。
用例,最大限度地减少全球分布式用户的延迟
问:我什么时候应该使用Lambda @ Edge? Lambda @ Edge针对延迟进行了优化 敏感用例,您的最终查看者是全球分布的。 理想情况下,您可以获得做出决定所需的所有信息 在CloudFront边缘,在函数和请求中。这个 表示您希望就如何做出决定的用例 基于用户特征(例如,位置,客户端)来提供内容 设备等)现在可以从边缘执行并提供服务 Node.js-6.10无需路由回中央服务器。