建筑
我的设置是这样的
API GW (REST API) -> VPC LINK -> NLB -> 监听器/目标 -> ECS 服务 -> EC2 容器实例。
我的容器实例已启动并正在运行。 我的服务已启动并正在运行。 我的 NLB 已将容器实例注册为目标。
所有健康检查均通过。
我的集成看起来像
vpc_integration = apigateway.Integration(
type=apigateway.IntegrationType.HTTP_PROXY,
integration_http_method=HttpMethods.ANY,
options=apigateway.IntegrationOptions(
connection_type=apigateway.ConnectionType.VPC_LINK, vpc_link=link
),
)
我有 API GW 资源
/my_method/{param}
我可以通过 NLB 直接调用我的 api,例如。
curl -X GET http://mynlb.../my_method/param
直接用curl调用时。我得到了正确的响应,并且还可以看到我预期的容器日志输出。
这都是用CDK部署的。
问题 当我在 API Gateway 控制台中进行测试时。我收到 404
Sun Jul 30 16:34:09 UTC 2023 : Endpoint response headers: {date=Sun, 30 Jul 2023 16:34:08 GMT, server=uvicorn, content-length=22, content-type=application/json}
Sun Jul 30 16:34:09 UTC 2023 : Endpoint response body before transformations: {"detail":"Not Found"}
Sun Jul 30 16:34:09 UTC 2023 : Method response body after transformations: {"detail":"Not Found"}
404 来自我的服务器。您可以从服务器类型“uvicorn”中看到这一点。我还可以看到容器日志。
网关似乎正在将请求路由至
/
。我可以看到以下日志
July 30, 2023 at 12:54 (UTC-4:00) INFO: 192.168.62.160:39839 - "GET / HTTP/1.1" 404 Not Found
为了确保我真正能够一直到达我的服务器,我在我的应用程序上添加了另一个处理程序,网址为
/
。我可以看到请求正在得到正确处理。所以最终看起来 API GW 正在删除路径组件并将所有内容发送到 /
我认为我的问题与代理资源使用有关。我不确定我是否正确设置了资源/方法
似乎与 - AWS API Gateway HTTP 代理模式有关,但尚未得到答复