从 AWS API Gateway 自定义域映射中删除映射路径
Posted
技术标签:
【中文标题】从 AWS API Gateway 自定义域映射中删除映射路径【英文标题】:Remove mapped path from AWS API Gateway custom domain mapping 【发布时间】:2021-12-30 14:51:19 【问题描述】:我在 AWS API Gateway 中设置了一个自定义域。我的意图是使用“API 映射”将不同 API 版本的流量发送到各自的 API 网关,例如:
GET https://example.com/v1/foo
通过在 path="v1" 的自定义域上的 API 映射发送到 API 网关“APIv1”($default
阶段)。
GET https://example.com/v2/foo
通过路径 =“v2”(未显示)的自定义域上的 API 映射发送到 API 网关“APIv2”($default
阶段)
HTTP API 本身配置有单个路由 /proxy+
和将请求发送到私有 ALB 的集成:
就路由流量而言,此设置工作正常,但问题是当请求到达实际应用程序时,应用程序接收到的路由类似于/v1/foo
而不仅仅是/foo
,这就是应用程序正在等待。
我尝试过不同的路线匹配和parameter mapping(我几乎找不到我的用例的示例),但无济于事。
我可以更改我的应用程序代码以匹配 AWS 发送的路由,但这样做的全部目的是使用我的 AWS 堆栈而不是应用程序代码来处理版本控制。我还有其他选择吗?
【问题讨论】:
【参考方案1】:如果您创建一个名为 /foo
的资源和其中的代理资源,当您设置集成时,您可以定义要传递的路径,proxy
将只有 /foo
之后的部分,忽略 v1
完全。
请参阅下面的示例。
在这种情况下,它会忽略v1
之前的所有内容,并且还将集成重写为/api/proxy
。
它将以GET https://example.com/abc/xyz/v1/foo
接收请求,并将以GET https://example.com/api/foo
转发到后端。
更新
无法通过 VPC Link 完成,但我们可以像使用私有 ALB 一样使用公共 ALB,如下面的解释。 它解释了 CloudFront,但同样适用于 API Gateway。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html
【讨论】:
谢谢,但实际上我会从该对话框中选择“VPC 链接”选项,而不是 HTTP,因为流量将通过 VPC 链接进入私有 ALB。这不允许我自定义端点 URL。 @Devin 你最后找到解决方案了吗?我遇到了完全相同的问题,我们通过 VPC 链接路由到私有 ALB。 不,我得出的结论是它无法在 API Gateway 基础架构中完成,必须更新我的 API 代码以匹配所请求的路由。以上是关于从 AWS API Gateway 自定义域映射中删除映射路径的主要内容,如果未能解决你的问题,请参考以下文章
如何从 AWS API Gateway 自定义授权方检索 Spring Boot 中的上下文对象?