3

假设我需要一个将运行Lambdas的API网关,并且希望创建最佳的全球分布式执行基础架构。另外,我将使用Cognito进行认证,Dynamodb和S3用于用户数据和前端静态。使用API​​网关,Lambda,Cognito,S3,Dynamodb部署AWS Global基础设施

我的应用程序位于myapp.com

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

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

之后,我们需要与API网关沟通。

user ===> API网关---> Lambda ---> S3 || Cognito || Dynamodb

API网关可以位于几个区域,即使与CloudFront的分布,每个端点指向位于某一地区的λ:假设我部署的欧盟 - 西-1的API。如果请求是从美国发送的,即使我的API位于CloudFront上,它运行的Lambda位于eu-west-1,因此无论如何延迟都很高。

为了避免这种情况,我需要在美国东部-1和我所有的lambda表达式部署另一个API了。该API将指向这些Lambda表达式

如果我部署的每一个区域一个API,我需要为他们每个人一个端点,以及前端应决定申请哪一个。但是我们怎么能知道哪一个是最近的位置?

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

如果不这样做正确的方式,你可以点我在正确的方向?

回答

0

不幸的是,这是目前无法。这里主要的拦截器是CloudFront。 拾音@ AWS提供他们的论坛的信息:

当您创建它创造了该域名相关的CloudFront的分布和CloudFront的强制执行全球对域名的唯一性自定义域名。

如果具有域名的CloudFront分配已存在,则CreateCloudFrontDistribution将失败,并且API网关将返回错误而不保存域名或允许您定义其关联的API。

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

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

0

结帐[email protected]

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

的用例,最小化全球分布的用户

Q延迟:什么时候应该使用拉姆达@边缘? Lambda @ Edge优化了延迟 敏感用例,您的最终用户在全球范围内分发。 理想情况下,您需要做出决策所需的所有信息在CloudFront边缘,函数和请求中可用 。这个 意味着您正在寻找关于如何根据用户特征(例如,位置,客户端 设备等)为内容提供服务的用例现在可以在 的边缘执行并提供服务。Node.js- 6.10无需路由回中央服务器。

2

AWS最近宣布支持使用您可以实现此目标的区域API端点。

下面是一个AWS博客中介绍如何实现这一点:

在API网关的默认API端点类型是边缘优化的API:

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

从博客摘录 端点,使客户端可以通过Amazon CloudFront分配访问API。这通常会改善地理位置不同客户的连接时间。默认情况下,全局唯一的自定义域名是 ,在Lambda集成的情况下,边缘优化的API端点将在单个区域中调用 Lambda函数。 您不能将此类端点与路由53主动 - 主动 安装和故障切换配合使用。

API网关中新的区域API端点将API端点 移入区域,并且自定义域名在每个区域中都是唯一的。该 可以在每个区域运行API的完整副本,然后使用Route 53使用主动 - 主动设置和故障转移。