0

我的应用程序在端口 3000 上运行,Web 上下文是 /app,因此“ http://host:3000/app/index.html ”成功返回在本地运行应用程序的 index.html 页面。

负载均衡器(公共)侦听端口 80 并将流量转发到端口 3000 上的目标。

AWS Fargate - 任务定义将主机和容器端口映射到端口 3000。 - 任务显示为 RUNNING 和状态 HEALTHY 但最终由于 ELB 运行状况检查失败而停止。而且我可以在云手表中看到我的应用程序启动日志(任务-> 日志)。- 集群服务的安全组正在自定义 tcp 端口 3000 上接收入站流量。

我尝试通过更新 TargetGroup 运行状况检查以使用路径作为“/”、“/app”和“/app/index.html”,但这也不起作用。

4

2 回答 2

2

首先验证:

  • 您的应用程序在容器中的错误中启动。
  • 您的安全配置允许 ECS 和 ELB 之间的流量。
  • 您的健康检查指向正确的道路。

是时候看看 ELB 日志了,您可以按照本教程启用它们。

通过 ECS 服务日志、ECS 任务日志和 ELB 日志,您可以确定应用程序启动和运行所需的时间,一旦您知道,将 ECS 服务宽限期配置为该值。

一旦您的宽限期足够大以允许前面解释的情况发生,您的应用程序将通过健康检查。

例如,在我们的案例中,一个 Spring Boot 应用程序在 EC2 实例中启动大约需要 20 秒,在 ECS Fargate 服务上可能需要超过 3 分钟才能到达,因此我们将宽限期设置为 240 秒,这样就解决了问题。

于 2020-06-30T13:36:15.617 回答
0

您需要将 TargetGroup 健康检查配置为使用 3000 端口,因为在您的应用程序正在侦听 3000 端口并且 ALB 将请求发送到在该端口中运行的任务,您可以转到 TargetGroup 健康检查选项卡并在选项端口选择覆盖。如果您创建了 ECS 服务,请验证健康检查宽限期,在某些情况下,该任务可能需要很长时间才能正确启动。

于 2020-04-12T22:17:36.063 回答