无服务器AWS上的全球无边界实施网站/应用程序

时间:2018-03-20 20:39:22

标签: aws-lambda serverless

我计划使用AWS来托管一个遍布全球的客户的全球网站。我们将有一个网站和应用程序,我们将使用无服务器架构。我还将考虑多区域DynamoDB,以允许更靠近该区域的用户访问最近的数据库实例。

关于实施解决方案的最佳设计我的问题并未锁定到某个特定区域,我们是无边框实现。我也在关注不同国家的高流量和大量用户。

我正在考虑这个https://aws.amazon.com/getting-started/serverless-web-app/module-1/,但它需要我选择一个地区。我几乎需要一个带有多个S3存储桶的路由器,但不知道如何。例如,用户如何访问离其所在地区最近的着陆页副本?移动应用用户如何调用其所在地区的lambda功能?

如果你能指点我的帖子或文章或只是你的回复,我将非常感激。

注意:如果Google Cloud Platform也是一个选项,会有兴趣吗?

谢谢你!

1 个答案:

答案 0 :(得分:4)

S3

您可以设置CloudFront分配,以便在所有边缘位置提供单个存储桶的内容,而不是按区域设置S3存储桶。

Create Distribution进程中,在Origin Domain Name下拉列表中选择S3存储桶。

警告:更新存储桶内容时,需要使CloudFront缓存无效,以便更新内容得到分发。这不是什么大不了的事。

API网关

通过设置API网关,您可以选择Edge-OptimizedRegional

Edge-Optimized案例中,AWS会自动通过边缘网络为您的API提供服务,但请求将全部路由回其本地区域中的原始API网关实例。这是一个简单的选择。

Regional案例中,您需要部署API的多个实例,每个区域一个。从那里,您可以在Route 53中进行基于延迟的路由设置。这是更难的选择,但更灵活。

Refer to this SO answer for more detail

注意:您始终可以在Edge-Optimized配置中开始开发,然后再重新部署到Regional配置。

DynamoDB / Lambda

DynamoDB和Lambda是区域服务,但您可以将实例部署到多个区域。

对于DynamoDB,您可以使用流功能设置跨区域复制。

虽然我从未实现过,AWS provides documentation on how to set up replication

注意:与Edge-Optimized API网关一样,您可以在单个区域中开始开发DynamoDB表和Lambda函数,然后再扩展到多区域部署。

更新

如评论中所述,DynamoDB有一个名为Global Tables的功能,它可以为您处理跨区域复制。看似相当简单 - 创建一个表,然后从Global Tables选项卡管理其跨区域复制(从该选项卡启用流,然后添加其他区域)。

有关详细信息,请here are the AWS Docs

在撰写本文时,以下区域仅支持此功能:US West (Oregon)US East (Ohio)US East (N. Virginia)EU (Frankfurt)EU West (Ireland)。我想当有足够的客户在其他地区请求此功能时,它就可以使用。

另请注意,您可以运行Lambda @ Edge函数来响应CloudFront事件。

lambda函数可以在运行时检查AWS_REGION环境变量,然后调用(并转发请求详细信息)适合区域的服务(例如API网关)。这意味着您也可以通过自己检查查询字符串(YMMV)来将Lambda @ Edge用作API网关替换。