API 网关在 Amazon ECS 中部署的微服务前面调用 Application Load Balancer 端点
API Gateway making calls to Application Load Balancer endpoint in front of a micro service deployed in 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 网关中抛出此错误的原因?
谢谢,
兰吉斯
我唯一一次看到带有 ALB 的 504 是当 ALB 部署在只有一个可用区的集群前面时。 ALB 需要多个 AZ,当 ALB 尝试在其他 AZ 中搜索路由时,您将遇到随机超时。
如果您排除了 ALB,那么您的 API 网关代码中可能有问题。我会在那里简化事情,你有自定义验证器吗?如果是这样,则在调试时关闭凭据缓存。如果您还没有使用新的直通映射,也可以更轻松地进行测试。
对我来说,这个非常神秘的 AWS 错误 ("Execution failed due to an internal error") 是通过不将任何响应 header 设置为空来解决的(即使当前文档声明它是允许的)
我在 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 网关中抛出此错误的原因?
谢谢,
兰吉斯
我唯一一次看到带有 ALB 的 504 是当 ALB 部署在只有一个可用区的集群前面时。 ALB 需要多个 AZ,当 ALB 尝试在其他 AZ 中搜索路由时,您将遇到随机超时。
如果您排除了 ALB,那么您的 API 网关代码中可能有问题。我会在那里简化事情,你有自定义验证器吗?如果是这样,则在调试时关闭凭据缓存。如果您还没有使用新的直通映射,也可以更轻松地进行测试。
对我来说,这个非常神秘的 AWS 错误 ("Execution failed due to an internal error") 是通过不将任何响应 header 设置为空来解决的(即使当前文档声明它是允许的)