如何将请求路由到正确的租户 API 网关?
Posted
技术标签:
【中文标题】如何将请求路由到正确的租户 API 网关?【英文标题】:How to route requests to right tenant api gateway? 【发布时间】:2021-12-19 18:13:17 【问题描述】:我正在创建一个多租户孤岛模式架构来支持 SAAS 应用程序。关注这个link。
我可以像这样注册新租户并创建他们各自的堆栈:
到目前为止一切顺利,下一步是为每个租户创建自己的域,例如:tenant1.admin.foo.com
,以访问相同的 CloudFront 分配(Web 前端必须对所有人都相同)。我可以通过在 Route53 *.admin.foo.com
中创建一个可以访问 CloudFront 的记录来实现这一点
问题:
我需要将每个请求路由到各自的租户堆栈,例如:tenant1.api.foo.com/whatever
应该路由到为租户 1 创建的 api 网关。
起初我想在 CloudFront 中创建一个路由到 api 网关的源,这样做的问题是 CloudFront 源被限制为 25 个。
我想在 Route53 中创建一条记录以指向它们各自的 api 网关,但问题是我必须在 api 网关中使用自定义域,因为它们限制为 120,我希望有更多租户超过 120 人。
如何进行此路由?
这是一个用例的图示:
PS:欢迎任何建议。
【问题讨论】:
【参考方案1】:您可以使用为备用域名 (CNAME) 设置的通配符 (*.api.foo.com) 设置分配。如果您将 Lambda@Edge 附加到源请求(在缓存行为设置下),您可以动态修改主机标头以指向适当的 API 网关主机 (xxxxxx.execute-api.us-east-1.amazonaws.com) .
AWS 博客,他们在其中使用 S3 存储桶作为源。 它应该相当接近地转换为 APIGateway 主机名:
https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/
【讨论】:
因为我需要检查 subdomian (tenant.foo.com) 我应该使用 origin-request 还是 viewer-request?我需要获取域的“租户”部分以上是关于如何将请求路由到正确的租户 API 网关?的主要内容,如果未能解决你的问题,请参考以下文章