AWS Fargate-应用程序负载平衡器(ELB)显示不健康的目标,错误为“运行状况检查失败,并出现以下代码:[502]”

时间:2020-04-12 17:01:44

标签: amazon-web-services aws-fargate aws-elb

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

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

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

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

2 个答案:

答案 0 :(得分:2)

首先验证:

  • 您的应用程序在容器错误内启动。
  • 您的安全配置允许ECS与ELB之间进行通信。
  • 您的健康检查指向正确的道路。

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

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

一旦您的宽限期足够大以至于可以进行前面解释的操作,您的应用程序将通过运行状况检查。

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

答案 1 :(得分:0)

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