AWS ECS错误:任务在目标组中的ELB运行状况检查失败

时间:2019-02-03 13:28:41

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

我正在使用云形成模板来构建基础架构(ECS Fargate集群)。 模板成功执行和堆栈已成功创建。但是,任务失败,出现以下错误:

library(tidyverse)
data(midwest, package="ggplot2")
plot <- ggplot(midwest, aes(x=area, y=poptotal)) +
    geom_bar(aes(fill=state), stat="identity") +
    guides(fill=guide_legend(nrow=2)) + 
    scale_fill_brewer(palette ="Set1" ,labels = str_wrap(c("AAA AAA","BBB    BBB","C","DDD DDD","E"),5)) +
    theme(legend.position = "bottom", legend.text=element_text(margin=margin(t=100,r=100))

我没有找到寻找该问题的内容和地点。 由于它是fargate集群,因此我无法获得如何登录到容器并执行一些运行状况检查查询以进一步调试的信息。

有人可以帮我进一步指导并帮助我吗? 由于此错误,我什至无法访问我的Web应用程序。作为ALB惯于路由通信,如果它是不健康的

我做了什么

经过一番谷歌搜索后,我发现了这篇文章: https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-unhealthy-checks-ecs/

但是,我想这与fargate中的EC2兼容性有关。但就我而言,EC2不存在。

如果你觉得,我可以粘贴整个模板中。

请帮助

7 个答案:

答案 0 :(得分:1)

此问题已解决。 问题在于以下几点:

  • 与主机端口的Docker容器端口映射不正确
  • ALB健康检查间隔时间非常短。因此,ALB立即放弃,而不是等待Docker容器正常运行。

进行这些更改后,它可以正常工作

答案 1 :(得分:1)

我收到此错误消息是因为ECS服务和负载均衡器目标组之间的安全组仅允许HTTP和HTTPS通信。

很明显,通过更新安全组以允许所有端口上的所有流量(如https://docs.aws.amazon.com/AmazonECS/latest/userguide/create-application-load-balancer.html所建议的那样),健康检查是在其他端口和/或协议上进行的。

答案 2 :(得分:0)

我有这个完全相同的问题。我可以通过以下方法解决问题:

  1. 导航到EC2服务
  2. 然后在侧面板中选择目标组
  3. 为您的负载均衡器选择目标组
  4. 选择健康检查标签
  5. 确保EC2实例的运行状况检查与目标组中的运行状况检查相同。这将告诉您的ELB在进行运行状况检查时将其流量路由到此端点。就我而言,我的健康检查路径是/ health。

答案 3 :(得分:0)

如上面tschumann所述,请检查ECS群集周围的安全组。如果使用Terraform,请允许进入所有docker临时端口,如下所示:

resource "aws_security_group" "ecs_sg" {
  name    = "ecs_security_group"
  vpc_id  = "${data.aws_vpc.vpc.id}"

}

resource "aws_security_group_rule" "ingress_docker_ports" {
  type              = "ingress"
  from_port         = 32768
  to_port           = 61000
  protocol          = "-1"
  cidr_blocks       = ["${data.aws_vpc.vpc.cidr_block}"]
  security_group_id = "${aws_security_group.ecs_sg.id}"
}

答案 4 :(得分:0)

此问题有很多不同可能的原因,不仅是开放的端口:

  • ecsServiceRole IAM角色的 IAM权限不正确
  • 容器实例安全组 Elastic Load Balancing负载
  • 没有为所有可用区弹性负载配置
  • 平衡器
  • 平衡负载平衡器健康检查配置错误
  • 无法更新服务服务名称:任务定义中的负载均衡器容器名称或端口已更改

因此,AWS创建了自己的网站来解决此错误的可能性:

https://docs.aws.amazon.com/en_en/AmazonECS/latest/developerguide/troubleshoot-service-load-balancers.html

编辑:就我而言,我的应用程序的运行状况检查代码不同。默认值为200,但是您也可以添加范围,例如200-499。

答案 5 :(得分:0)

可能对某人有帮助。我们的目标群体健康检查路径设置为 /,对于我们的服务,它指向 Swagger 并且运行良好。更新为使用 Springfox 而不是手动生成 swagger.json 后,/ 现在执行 302 重定向到 /swagger-ui.html,这导致运行状况检查失败。由于这是针对 Spring Boot 服务,我们只是将目标组中的健康检查路径指向 /health(OOTB Spring 状态页面)。

答案 6 :(得分:0)

让我分享我的经验。

在我的情况下,一切都是正确的,除了服务器侦听的主机之外,是 localhost 这使得服务器无法从外界访问,并且健康检查分别不起作用。在某些库中它应该是 0.0.0.0 或为空。