假设我需要一个运行Lambdas的API网关,并且我希望创建最佳的全球分布式执行基础架构 . 此外,我将使用Cognito进行身份验证,Dynamodb和S3用于用户数据和前端静态 .
我的应用程序位于 myapp.com
首先,用户从最近的位置获取静态前端:
user ===> edge location at CloudFront <--- S3 at any region (with static front end)
之后,我们需要与API Gateway通信 .
user ===> API Gateway ---> Lambda ---> S3 || Cognito || Dynamodb
API网关可以位于多个区域,即使与CloudFront一起分发,每个 endpoints 也指向位于给定区域的Lambda:假设我在eu-west-1部署API . 如果从美国发送请求,即使我的API在CloudFront上,它运行的Lambda也位于eu-west-1,因此无论如何延迟都会很高 .
为了避免这种情况,我需要在us-east-1和我所有的Lambdas上部署另一个API . 该API将指向那些Lambdas
如果我为每个区域部署一个API,我需要为每个区域配置一个 endpoints ,并且前端应该决定请求哪个 endpoints . 但我们怎么知道哪一个是最近的位置?
理想情况是 api.myapp.com
处的单个全局 endpoints ,它将转到最近的API网关,该网关也运行位于该区域的Lambdas . 我可以使用路由53延迟路由配置多个A记录指向每个api网关吗?
如果这不是正确的方法,你能指出我正确的方向吗?
3 回答
AWS最近宣布支持区域API endpoints ,您可以使用它来实现此目的 .
以下是AWS博客,其中介绍了如何实现此目标:
Building a Multi-region Serverless Application with Amazon API Gateway and AWS Lambda
摘自博客:
不幸的是,这是 not currently possible . 这里的主要阻止者是CloudFront . MikeD @ AWS在其论坛上提供信息:
自2016年7月4日确认存在开放式功能请求以来,AWS没有提供必要的更新.AWS Form thread for updates
结帐Lambda@Edge
用例,最大限度地减少全球分布用户的延迟