从 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 中的上下文对象?

将 AWS Lambda 429 错误映射到 API Gateway 2XX 响应

未调用 AWS API Gateway 自定义授权方

AWS API Gateway 自定义授权方有用吗?

使用 VTL 的 AWS Gateway API 映射超时

AWS API Gateway 默认响应和触发 AWS Lambda