我试图按照此页面上的示例,使用AWS API网关配置简单的http代理: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-http.html 我遇到的问题是,如果我的端点URL是另一个AWS API网关,它似乎可以工作,但是我无法使它适用于任何其他URL。
我正在使用资源路径/ {proxy +}创建一个代理资源,并启用API网关CORS,然后创建ANY方法作为HTTP代理和内容处理传递(就像上述示例中的petshop示例一样)。如果我将端点设置为另一个AWS API网关,则它可以工作。
但是,如果我将端点设置为非AWS网址,则会返回500响应,并在API网关Cloudwatch日志中看到:
由于配置错误,执行失败:无效的端点地址
我的端点位于我的公司内部网络上,但是作为测试,我也尝试代理到Internet地址,但失败并出现相同的错误。 (我应该注意,在两种情况下,我都尝试代理到一个https地址,而不仅仅是http。)
为了排除网络路由或防火墙问题,我登录了同一区域的一个AWS EC2实例,并测试了通过curl对端点URL的访问,这是成功的。
是否有人成功将API网关简单https代理用于除其他AWS API网关以外的任何其他内容?
答案 0 :(得分:1)
我假设从EC2实例进行测试将验证没有路由,防火墙或DNS问题。这是一个错误的假设,因为事实证明API网关不一定与同一区域中的EC2处于同一网络中或具有相同的访问权限。感谢@Michael-sqlbot的帮助,我能够确定这实际上是网络访问问题,但是由于API网关不在正确的网络中,DevOps团队无法解决这个问题。>
相反,解决方案原来是我必须编写一个小的lambda函数(以具有lambda代理集成的API网关资源为首),类似于我在应用程序中为RESTful API编写其他lambda的方式。在lambda中,我可以更灵活地访问内部资源,包括配置VPC的能力,因此我能够在lambda中使用标准的HTTP客户端API来将调用代理到后端资源。