我计划使用AWS来托管一个遍布全球的客户的全球网站。我们将有一个网站和应用程序,我们将使用无服务器架构。我还将考虑多区域DynamoDB,以允许更靠近该区域的用户访问最近的数据库实例。
关于实施解决方案的最佳设计我的问题并未锁定到某个特定区域,我们是无边框实现。我也在关注不同国家的高流量和大量用户。
我正在考虑这个https://aws.amazon.com/getting-started/serverless-web-app/module-1/,但它需要我选择一个地区。我几乎需要一个带有多个S3存储桶的路由器,但不知道如何。例如,用户如何访问离其所在地区最近的着陆页副本?移动应用用户如何调用其所在地区的lambda功能?
如果你能指点我的帖子或文章或只是你的回复,我将非常感激。
注意:如果Google Cloud Platform也是一个选项,会有兴趣吗?
谢谢你!答案 0 :(得分:4)
您可以设置CloudFront分配,以便在所有边缘位置提供单个存储桶的内容,而不是按区域设置S3
存储桶。
在Create Distribution
进程中,在Origin Domain Name
下拉列表中选择S3存储桶。
警告:更新存储桶内容时,需要使CloudFront缓存无效,以便更新内容得到分发。这不是什么大不了的事。
通过设置API网关,您可以选择Edge-Optimized
或Regional
。
在Edge-Optimized
案例中,AWS会自动通过边缘网络为您的API提供服务,但请求将全部路由回其本地区域中的原始API网关实例。这是一个简单的选择。
在Regional
案例中,您需要部署API的多个实例,每个区域一个。从那里,您可以在Route 53中进行基于延迟的路由设置。这是更难的选择,但更灵活。
Refer to this SO answer for more detail
注意:您始终可以在Edge-Optimized
配置中开始开发,然后再重新部署到Regional
配置。
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网关替换。