API网关在Amazon ECS中部署的微服务前调用Application Load Balancer端点

时间:2017-02-06 22:07:54

标签: aws-api-gateway amazon-ecs

我在ECS群集中部署了微服务,其中应用程序负载均衡器和目标组配置为它的前端。

现在,我在应用程序负载均衡器中遇到的一个问题是,有时响应时间超过3秒。我正在尝试调查它发生了什么。

现在,当我在API网关中创建资源和POST方法并将HTTP端点配置为服务的应用程序负载均衡器时,我看到的是在某些情况下它会出现以下错误:

Status: 504
Latency: 3026 ms
Response Body
{
  "message": "Network error communicating with endpoint"
}


Execution log for request test-request
Mon Feb 06 21:47:00 UTC 2017 : Starting execution for request: test-invoke-request
Mon Feb 06 21:47:00 UTC 2017 : HTTP Method: POST, Resource Path: /find
Mon Feb 06 21:47:00 UTC 2017 : Method request path: {}
Mon Feb 06 21:47:00 UTC 2017 : Method request query string: {}
Mon Feb 06 21:47:00 UTC 2017 : Method request headers: {}
Mon Feb 06 21:47:00 UTC 2017 : Method request body before transformations: 
Mon Feb 06 21:47:00 UTC 2017 : Endpoint request URI: http://microservice-alb-xxxxxxx.us-east-1.elb.amazonaws.com/find
Mon Feb 06 21:47:00 UTC 2017 : Endpoint request headers: {x-amzn-apigateway-api-id=hw4gf0e5ui, Accept=application/json, User-Agent=AmazonAPIGateway_hxyf0t7ui, X-Amzn-Trace-Id=Root=1-456twed4-97d26555a0abcd123413ad35}
Mon Feb 06 21:47:00 UTC 2017 : Endpoint request body after transformations: 
Mon Feb 06 21:47:03 UTC 2017 : Execution failed due to an internal error
Mon Feb 06 21:47:03 UTC 2017 : Method completed with status: 504

有几次它工作正常并给出正确的响应,状态代码为200,并且很少次它给出了上述响应。在API网关中执行测试时以及将资源部署到阶段并通过阶段访问时的行为也是如此。

我已经转换了应用程序负载均衡器的访问日志,并通过覆盖API网关中的阶段设置来启用云监视日志。但我没有得到关于此错误的任何详细信息。

如何解决为什么在API网关中抛出此错误?

谢谢,

兰芝斯

2 个答案:

答案 0 :(得分:2)

我唯一一次看到带有ALB的504s是指ALB部署在只有一个可用区的群集前面。 ALB需要多个AZ,当ALB尝试搜索其他AZ中的路由时,您将获得随机超时。

如果您排除了ALB,那么您的API网关代码可能会发生一些事情。我在那里简化了一些事情,你有自定义验证器吗?如果是这样,在调试时转换凭据的缓存。如果您还没有使用新的passthrough映射,也可以更容易地进行测试。

答案 1 :(得分:0)

对我来说,这个非常神秘的AWS错误(“由于内部错误导致执行失败”)是通过不将任何响应头设置为null来解决的(即使当前文档规定允许它也很难)