aws-lambda - 无服务器 AWS 上的全局无边界实现网站/应用程序

标签 aws-lambda serverless

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

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

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

如果您能指出我的帖子或文章,或者只是您的回复,我将不胜感激。

注意:如果谷歌云平台也是一个选项,会感兴趣吗?

谢谢你!

最佳答案

S3
而不是设置 S3针对每个区域的存储桶,您可以设置 CloudFront 分配以在所有边缘站点提供单个存储桶的内容。
期间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 网关的替代品。

关于aws-lambda - 无服务器 AWS 上的全局无边界实现网站/应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393707/

相关文章:

amazon-web-services - 尝试使用 KMS 在 Lambda 函数中解密密文会导致超时

amazon-web-services - 从 cloudformation 模板调用 lambda 函数

amazon-web-services - Sequelize Serverless 离线迁移出错

amazon-s3 - 如何引用Cloud Formation中创建的S3存储桶

amazon-web-services - 无服务器复制用户池而不是按名称重用

javascript - 我在使用 Node js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException

python - 无法在AWS Lambda python中导入库

node.js - 在 GraphQL Playground 中设置我想要使用的测试 header 会导致 "Server cannot be reached"

java - 带有 jackson 注释的 AWS Lambda json 反序列化

amazon-web-services - 我正在学习创建 AWS Lambda。我想创建一个 "chain": S3 -> 4 Chained Lambda( )'s -> RDS. I can' t get the first lambda to call the second