web-dev-qa-db-fra.com

Erreur AWS ECS: la tâche a échoué aux vérifications de l'intégrité ELB dans le groupe cible

J'utilise un modèle de formation cloud pour construire l'infrastructure (cluster ECS Fargate). Le modèle a été exécuté avec succès et la pile a été créée avec succès. Cependant, la tâche a échoué avec l'erreur suivante:

Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:eu-central-1:890543041640:targetgroup/prc-service-devTargetGroup/97e3566c8b307abf)

Je n'obtiens pas quoi et où chercher pour résoudre le problème. comme il s'agit d'un cluster Fargate, je ne sais pas comment me connecter au conteneur et exécuter certaines requêtes de vérification de l'état pour déboguer davantage.

Quelqu'un peut-il m'aider s'il vous plaît à me guider davantage à ce sujet et m'aider? En raison de cette erreur, je ne suis même pas en mesure d'accéder à mon application Web. Comme ALB n'acheminera pas le trafic s'il est malsain.

Ce que j'ai fait

Après quelques recherches sur Google, j'ai trouvé ce message: https://aws.Amazon.com/premiumsupport/knowledge-center/troubleshoot-unhealthy-checks-ecs/

Cependant, je suppose que cela est lié à la compatibilité EC2 dans Fargate. Mais dans mon cas, EC2 n'est pas là.

Si vous le sentez, je peux également coller le modèle entier.

s'il vous plaît aider

13
user2315104

J'ai reçu ce message d'erreur car le groupe de sécurité entre le service ECS et le groupe cible de l'équilibreur de charge autorisait uniquement le trafic HTTP et HTTPS.

Apparemment, le contrôle d'intégrité se produit sur un autre port et/ou protocole en mettant à jour le groupe de sécurité pour autoriser tout le trafic sur tous les ports (comme suggéré à https://docs.aws.Amazon.com/AmazonECS/latest/userguide/ create-application-load-balancer.html ) a fait fonctionner le bilan de santé.

1
tschumann

Comme mentionné par tschumann ci-dessus, vérifiez le groupe de sécurité autour du cluster ECS. Si vous utilisez Terraform, autorisez l'entrée à tous les ports éphémères de docker avec quelque chose comme ci-dessous:

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}"
}
0
bruce szalwinski

J'ai eu exactement le même problème. J'ai pu contourner le problème en:

  1. accédez au service EC2
  2. puis sélectionnez Groupe cible dans le panneau latéral
  3. sélectionnez votre groupe cible pour votre équilibreur de charge
  4. sélectionnez l'onglet bilan de santé
  5. assurez-vous que le bilan de santé de votre instance EC2 est le même que le bilan de santé du groupe cible. Cela indiquera à votre ELB d'acheminer son trafic vers ce point de terminaison lors de son contrôle de santé. Dans mon cas, mon chemin de contrôle de santé était/health.
0
Ryan Forte

Il y a plusieurs différentes raisons possibles de ce problème, pas seulement les ports ouverts:

  • Autorisations IAM incorrectes pour le rôle IAM ecsServiceRole
  • Instance de conteneur groupe de sécurité Elastic Load Balancing load
  • équilibreur non configuré pour tous Zones de disponibilité Charge élastique
  • Équilibrage de l'équilibreur de charge bilan de santé mal configuré
  • Impossible de mettre à jour le nom de service du service: le nom ou le port du conteneur d'équilibreur de charge a été modifié dans la définition de la tâche

Par conséquent, AWS a créé son propre site Web afin de répondre aux possibilités de cette erreur:

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

Edit: dans mon cas, le code de contrôle de santé de mon application était différent. La valeur par défaut est 200, mais vous pouvez également ajouter une plage telle que 200-499.

0
Rene B.