首页 文章

使用API Gateway,Lambda,Cognito,S3,Dynamodb部署AWS Global基础架构

提问于
浏览
3

假设我需要一个运行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 回答

  • 2

    AWS最近宣布支持区域API endpoints ,您可以使用它来实现此目的 .

    以下是AWS博客,其中介绍了如何实现此目标:

    Building a Multi-region Serverless Application with Amazon API Gateway and AWS Lambda

    摘自博客:

    API Gateway中的默认API endpoints 类型是边缘优化的API endpoints ,它使客户端能够通过Amazon CloudFront分配访问API . 这通常可以改善地理位置不同的客户端的连接时间 . 默认情况下,自定义域名是全局唯一的,边缘优化的API endpoints 在Lambda集成的情况下将在单个区域中调用Lambda函数 . 您不能将此类型的 endpoints 与Route 53主动 - 主动设置和故障转移一起使用 . API网关中的新区域API endpoints 将API endpoints 移动到该区域,并且每个区域的自定义域名是唯一的 . 这使得可以在每个区域中运行API的完整副本,然后使用Route 53来使用主动 - 主动设置和故障转移 .

  • 0

    不幸的是,这是 not currently possible . 这里的主要阻止者是CloudFront . MikeD @ AWS在其论坛上提供信息:

    创建自定义域名时,它会为域名创建关联的CloudFront分配,CloudFront会对域名强制实施全局唯一性 . 如果已存在具有域名的CloudFront分配,则CreateCloudFrontDistribution将失败,并且API Gateway将返回错误,而不保存域名或允许您定义其关联的API . 因此,目前(2016年6月29日)无法在多个区域中获取API网关来处理相同的域名 .

    自2016年7月4日确认存在开放式功能请求以来,AWS没有提供必要的更新.AWS Form thread for updates

  • 0

    结帐Lambda@Edge

    问:什么是Lambda @ Edge? Lambda @ Edge允许您在全球范围内跨AWS位置运行代码,无需配置或管理服务器,以最低的网络延迟响应最终用户 . 您只需将Node.js代码上传到AWS Lambda,并将您的功能配置为响应Amazon CloudFront请求而触发(即,当查看者请求登陆时,请求被转发到原点或从原点接收,并且在响应之前回到最终用户) . 然后,当收到内容请求时,代码就可以在全球范围内的AWS位置执行,并与全局的CloudFront请求量进行扩展 . 在我们的文档中了解更多

    用例,最大限度地减少全球分布用户的延迟

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

相关问题