我有一个由 lambda 支持的 api 网关,部署在两个区域。这两个 API 完全相同。我有两个不同的 URL,例如
*.execute-api.us-east-1.amazonaws.com *.execute-api.eu-west-1.amazonaws.com
我的想法是在两个区域定义相同的自定义域,并使用 Route53 地理位置功能,从离用户最近的区域提供 API。但是,在一个区域定义自定义 URL 后,当我尝试在第二个区域定义时,出现错误,提示该域已在另一个 cloudfront 发行版中定义。
这是一个错误吗?或者我可以遵循哪种策略来实现 API 网关的多区域部署。
谢谢。
答案1
不幸的是,这是目前不可能。这里主要的阻碍因素是 CloudFront。 MikeD@AWS在他们的论坛上提供信息:
当您创建自定义域名时,它会为该域名创建关联的 CloudFront 分配,并且 CloudFront 会强制该域名具有全局唯一性。
如果具有该域名的 CloudFront 分发已存在,则 CreateCloudFrontDistribution 将失败,并且 API Gateway 将返回错误,而不保存域名或允许您定义其关联的 API。
因此,目前(2016 年 6 月 29 日)无法让多个地区的 API 网关处理同一个域名。
自 2016 年 7 月 4 日确认存在开放功能请求以来,AWS 尚未提供任何必要的更新。 AWS 表单更新线程
答案2
我们解决这个问题的方法实际上是通过 cloudfront 来实现。然后在 cloudfront 中将两个端点添加为原点。
答案3
我有几个想法。
CloudFront 如上所述,您无法使用 CloudFront 进行负载平衡。因此您的选择似乎是
- 使用 CloudFront 的单一来源。延迟85毫秒美国东海岸和西海岸之间的延迟不算太差。与我居住的地方(新西兰)和美国之间的延迟(高达 250 毫秒)相比,这个延迟相当小。
- 删除 CloudFront,使用基于延迟的 Route 53 路由直接访问 API 网关。这样,您就可以使用任意数量的区域 - 如果您在悉尼/亚洲有客户,请在悉尼/亚洲添加一个。