Amazon web services 将API网关用作具有uri(请求路径和变量查询参数)传递的http代理

Amazon web services 将API网关用作具有uri(请求路径和变量查询参数)传递的http代理,amazon-web-services,routing,aws-api-gateway,Amazon Web Services,Routing,Aws Api Gateway,我正在尝试使用API网关执行一些基本路由。 我需要实现以下场景: 用户发出请求xxxx执行api.eu-west-1.amazonaws.com/prod/api1/a/b/./n?param1=val1&parma2=val2…¶mn=valn请求应转到api1.back.end/a/b/./n?param1=val1&parma2=val2…¶mn=valn 用户发出请求xxxx执行api.eu-west-1.amazonaws.com/prod/api2/a/b/./n?

我正在尝试使用API网关执行一些基本路由。 我需要实现以下场景:

  • 用户发出请求xxxx执行api.eu-west-1.amazonaws.com/prod/api1/a/b/./n?param1=val1&parma2=val2…¶mn=valn请求应转到api1.back.end/a/b/./n?param1=val1&parma2=val2…¶mn=valn

  • 用户发出请求xxxx执行api.eu-west-1.amazonaws.com/prod/api2/a/b/./n?param1=val1&parma2=val2…¶mn=valn请求应转到api2.back.end/a/b/./n?param1=val1&parma2=val2…¶mn=valn

  • 用户发出请求xxxx执行api.eu-west-1.amazonaws.com/prod/******/a/b/。/n?param1=val1&parma2=val2…¶mn=valn请求应转到api3.back.end/a/b/。/n?param1=val1&parma2=val2…¶mn=valn…¶mn=valn

路由应该在stage之后基于第一个路径索引完成,之后的所有内容都应该传递到http后端(比如透明代理)

换句话说,如果路径索引1是api1,则将请求转发到api1。back.end在路径索引1之后使用完整URI;如果路径索引1是api2,则将请求转发到api2。back.end在路径索引1之后使用完整URI;如果路径索引1小于或等于显式值api1或api2,则将请求转发到api3.back.end,并在路径索引1后添加完整URI

如何在不添加任何额外层(lambda、cloudfront、ec2等)的情况下实现这一点


谢谢大家!

API网关目前不支持此用例;每个方法和路径都必须在API定义中明确定义

支持这样的通过代理是我们从其他客户那里听到的请求,我们可以考虑在将来的服务更新中支持它。


更新日期:2016年9月20日:我很高兴地宣布,我们已经推出了一系列功能,允许如上所述的代理请求。有关更多详细信息,请参阅我们的。

虽然不理想,但您可以在Lambda中执行此路由/重定向,不是吗?通过返回重定向或代理对目标服务器的调用,也许?@ericpeters0n API网关仍需要支持变量或“贪婪”资源路径,但它不支持。当前,您需要在API网关定义中定义每个资源/方法,并将其映射到集成(例如Lambda).Gist(对于单级路径):
create resource--path part'{proxy+}--parent id{id of/root resource}
put方法——请求参数method.request.path.proxy=true
<代码>放置集成--键入HTTP_代理--uri'http://downstream.domain/{basefile}'--请求参数integration.request.path.basefile=method.request.path.proxy<代码>创建部署