如何将请求路由到正确的租户 api 网关?

How to route requests to right tenant api gateway?

我正在创建一个多租户筒仓模式架构来支持 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: 欢迎任何建议。

您可以使用为备用域名 (CNAME) 设置的通配符 (*.api.foo.com) 设置分配。如果您将 Lambda@Edge 附加到源请求(在缓存行为设置下),您可以动态修改主机 header 以指向适当的 API 网关主机 (xxxxxx.execute-api。 us-east-1.amazonaws.com).

他们用 S3 存储桶作为来源的 AWS 博客。 它应该相当接近地转换为 API 网关主机名:

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/