Comment puis-je exécuter mes tâches Amazon ECS à l'aide du type de lancement Amazon EC2 pour la réussite de la surveillance de l'état d'Application Load Balancer dans Amazon ECS ?

Dernière mise à jour : 17/03/2022

Une surveillance de l'état d'Application Load Balancer pour une instance Amazon Elastic Compute Cloud (Amazon EC2) dans Amazon Elastic Container Service (Amazon ECS) renvoie un état de non conformité. Je souhaite que mon instance EC2 réussisse la vérification de l'état.

Brève description

Lorsque la surveillance de l’état de l'équilibreur de charge échoue pour votre tâche Amazon ECS, vous recevez l'une des erreurs suivantes dans votre message d'événement de service Amazon ECS :

  • (service AWS-service) (port 8080) n'est pas sain (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) du fait de (raison de l'échec des surveillances de l'état avec ces codes : [502 ou 504]) ou (expiration de la demande)
  • (service AWS-Service) (port 8080) n'est pas sain dans le groupe cible tf-20190411170 du fait de (raison de l'échec des surveillances de l'état)
  • (service AWS-Service) (instance i-1234567890abcdefg) (port 443) n'est pas sain dans (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) du fait de (raison de l'échec des surveillances de l'état)

Vous pouvez également recevoir l'erreur suivante de votre console des tâches Amazon ECS :

Échec des surveillances de l'état ELB de la tâche (target-group arn: aws:elasticloadbalancing:us-east- 1:1111111111:targetgroup/aws-targetgroup/123456789)

Si vous obtenez l'erreur (service AWS-Service) (les surveillances de l'état de conteneur ont échoué pour la tâche c13b4cb40f1f4fe4a2971f76ae5a47ad), consultez Comment résoudre les échecs de la surveillance de l'état du conteneur pour les tâches Amazon ECS ?

Remarque : une tâche Amazon ECS peut renvoyer un état de non conformité pour de nombreuses raisons. Si les étapes suivantes ne permettent pas de résoudre votre problème, consultez Dépannage des équilibreurs de charge du service.

Conseil : pour savoir ce qui a arrêté votre tâche ECS, consultez Recherche d'erreurs dans les tâches arrêtées.

Solution

Pour résoudre les problèmes de vérification de l'état de votre équilibreur de charge sur votre tâche Amazon ECS et pour que la surveillance de l'état Application Load Balancer aboutisse, vérifiez les points suivants :

  • Connectivité entre votre équilibreur de charge et la tâche Amazon ECS
  • Paramètres de surveillance de l'état du groupe cible
  • État et configuration de l'application dans votre conteneur ECS
  • État de l'instance de conteneur

Vérifiez la connectivité entre votre équilibreur de charge et la tâche Amazon ECS

Pour vous assurer que votre équilibreur de charge est autorisé à effectuer des surveillances de l'état sur vos tâches Amazon ECS, vérifiez les points suivants.

Les groupes de sécurité attachés à votre équilibreur de charge et à votre instance de conteneur ou à l'interface réseau Elastic de la tâche ECS pour le mode réseau awsvpc sont correctement configurés.

La bonne pratique recommande de configurer différents groupes de sécurité pour votre équilibreur de charge et votre instance de conteneur ou votre interface réseau Elastic de la tâche. Avec cette approche, vous autorisez tout le trafic entre vos équilibreurs de charge et les instances de conteneur ou l'interface réseau Elastic de la tâche. En outre, activez vos instances de conteneur pour accepter le trafic sur le port hôte spécifié pour la tâche.

  • Vérifiez que le groupe de sécurité associé à votre équilibreur de charge autorise le trafic sortant vers vos instances de conteneur ou l'interface réseau Elastic de la tâche sur le port enregistré. Vérifiez-le également pour le port de surveillance de l'état associé à votre instance de conteneur, le cas échéant.
  • Vérifiez que le groupe de sécurité associé à votre instance de conteneur ou interface réseau Elastic autorise la totalité du trafic entrant sur la plage de ports hôte de la tâche à partir du groupe de sécurité associé à votre équilibreur de charge. Pour contrôler le groupe de sécurité associé à votre équilibreur de charge, consultez Groupe de sécurité pour votre Application Load Balancer.

Important : lorsque vous utilisez le mappage de port dynamique, le service est exposé sur le port dynamique (généralement les ports 32768 - 65535) plutôt que sur le port hôte. Dans ce cas, vérifiez que le groupe de sécurité de votre instance de conteneur reflète la plage de ports éphémères dans les règles entrantes de l'équilibreur de charge en tant que source.

Votre équilibreur de charge est configuré dans la même zone de disponibilité que votre instance de conteneur ou votre interface réseau Elastic de tâche ECS pour le mode réseau awsvpc.

Lorsque vous activez une zone de disponibilité pour votre équilibreur de charge, Elastic Load Balancing crée un nœud de répartition de charge dans la zone de disponibilité. Si vous enregistrez des cibles dans une zone de disponibilité et n'activez pas la zone de disponibilité, ces cibles enregistrées ne reçoivent pas de trafic. Pour plus d'informations, consultezZones de disponibilité et nœuds d'équilibreur de charge.

Pour obtenir les zones de disponibilité pour lesquelles votre équilibreur de charge est configuré, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le panneau de navigation, sous Load Balancing (Répartition de charge), choisissez Load Balancers (Équilibreurs de charge).
  3. Sélectionnez l'équilibreur de charge que vous utilisez avec le service Amazon ECS.
  4. Dans l'onglet Description, vous pouvez afficher les zones de disponibilité sous le champ Zones de disponibilité.

Remarque : Pour un Application Load Balancer, vous pouvez activer ou désactiver les zones de disponibilité à tout moment. Pour un Network Load Balancer, vous ne pouvez pas désactiver les zones de disponibilité après l'avoir activé, mais vous pouvez activer des zones de disponibilité supplémentaires.

Si vous utilisez des Application Load Balancers, la répartition de charge entre zones est toujours activée. Si vous utilisez des Network Load Balancers, la répartition de charge entre zones est désactivée par défaut. Après avoir créé le Network Load Balancer, vous pouvez activer ou désactiver la répartition de charge entre zones à tout moment. Pour en savoir plus, consultez Fonctionnement de la répartition de charge Elastic.

Pour trouver les zones de disponibilité pour lesquelles vos instances de conteneur sont configurées, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le panneau de navigation, sous Auto Scaling (Scalabilité automatique), choisissez Auto Scaling Groups (Groupes Auto Scaling).
  3. Sélectionnez le groupe Auto Scaling d'instance de conteneur associé à votre cluster.
  4. Sous l'onglet Details (Détails), dans la section Network, vérifiez que les zones de disponibilité répertoriées correspondent aux zones de disponibilité de votre équilibreur de charge.

Pour modifier les zones de disponibilité de votre cluster, ouvrez la console AWS CloudFormation, choisissez la pile CloudFormation de votre cluster et mettez à jour la configuration des sous-réseaux.

Pour connaître les zones de disponibilité pour lesquelles votre interface réseau Elastic pour awsvpc est configurée, procédez comme suit :

  1. Ouvrez la console Amazon ECS.
  2. Dans le panneau de navigation, sélectionnez Clusters, puis le cluster qui contient votre service.
  3. Dans l'onglet Services de la page de votre cluster, dans la colonne Service Name (Nom de service), sélectionnez le service à vérifier.
  4. Choisissez Details (Détails), puis Sous-réseaux autorisés pour afficher les sous-réseaux activés pour le service.
  5. Vous pouvez afficher les sous-réseaux dans la console Amazon VPC.
  6. Vérifiez que les zones de disponibilité des sous-réseaux correspondent aux zones de disponibilité répertoriées pour votre équilibreur de charge.

Remarque : vous ne pouvez pas modifier la configuration du sous-réseau d'un Amazon ECS service à partir de la console Amazon ECS. Vous pouvez le faire à l'aide de la commande AWS Command Line Interface (AWS CLI) update-service.

Remarque : en cas d'erreurs lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

La liste de contrôle d'accès (ACL) réseau associée aux sous-réseaux de votre équilibreur de charge et aux instances de conteneur ECS ou à l'interface réseau Elastic de tâche ECS pour le mode réseau awsvpc sont correctement configurées

Les sous-réseaux de votre équilibreur de charge et de votre instance de conteneur ou de votre interface réseau Elastic de tâche peuvent être différents. Pour vous assurer que le trafic est autorisé entre ces sous-réseaux, vérifiez les points suivants :

  • Vérifiez que la liste ACL réseau associée aux sous-réseaux de vos nœuds d'équilibreur de charge autorise le trafic entrant sur les ports éphémères (1024 - 65535) et le port d'écoute. Vérifiez que l'ACL réseau autorise également le trafic sortant sur les ports de surveillance de l'état et éphémères.
  • Assurez-vous que la liste ACL associée aux sous-réseaux de votre instance de conteneur ou à l'interface réseau Elastic de tâche pour le mode awsvpc autorise le trafic entrant sur le port de surveillance de l'état. Vérifiez que l'ACL réseau autorise le trafic sortant sur les ports éphémères.

Pour plus d'informations sur les listes ACL, consultez Utilisation des listes ACL réseau.

Vérifiez les paramètres de la surveillance de l'état de votre groupe cible

Pour vous assurer que les paramètres de la surveillance de l'état de votre groupe cible sont correctement configurés, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le panneau de navigation, sous Load Balancing (Répartition de charge), choisissez Target Groups (Groupes cibles).
  3. Sélectionnez votre groupe cible.
    Important : utilisez un nouveau groupe cible. Évitez d'ajouter manuellement des cibles au groupe, car Amazon ECS enregistre et annule automatiquement l'enregistrement des conteneurs dans le groupe cible.
  4. Dans l'onglet Health checks (Surveillances de l'état), procédez comme suit :
    Vérifiez que les champs Port et Path (Chemin) sont correctement configurés. Si le champ Port n'est pas configuré correctement, votre équilibreur de charge peut annuler l'enregistrement du conteneur.
    Pour Port, assurez-vous que vous avez choisi le port de trafic.
    Remarque : si vous choisissez Override (Remplacer), vérifiez que le port spécifié correspond au port hôte de la tâche.
    Pour Timeout (Délai), assurez-vous que le délai de réponse est correctement défini.
    Remarque : le délai de réponse est le délai pendant lequel votre conteneur doit renvoyer une réponse au ping de surveillance de l'état. Si cette valeur est inférieure au délai requis pour une réponse, la vérification de la surveillance de l'état échoue.

Vérifiez l'état et la configuration de l'application dans votre conteneur ECS

Vérifiez que l'application dans votre conteneur ECS répond à la surveillance de l'état de votre équilibreur de charge

Pour vous assurer que l'application dans votre conteneur ECS répond correctement à la surveillance de l'état de votre équilibreur de charge, procédez comme suit :

  • Vérifiez que le port ping et le chemin de surveillance de l'état de votre groupe cible sont correctement configurés.
  • Surveillez les métriques d'utilisation du processeur et de la mémoire pour le service ECS. Par exemple, un niveau élevée d'utilisation du processeur peut empêcher votre application de répondre et entraîner une erreur 502 ou une expiration.
  • Définissez une période de grâce minimale pour la surveillance de l'état. Ce paramètre demande au planificateur de service d'ignorer les surveillances de l'état Elastic Load Balancing pendant une période prédéfinie après l'instanciation d'une tâche. Votre tâche Amazon ECS peut nécessiter une période de grâce de surveillance de l'état plus longue pour enregistrer le Network Load Balancer.
  • Vérifiez les erreurs d'application dans vos journaux d'application. Pour plus d'informations, consultez Affichage des journaux de conteneur awslogs dans CloudWatch Logs.

Vérification du code de réponse renvoyé par l'application de votre conteneur ECS

Lorsque l'équilibreur de charge envoie une demande GET HTTP dans le chemin de surveillance de l'état, l'application dans votre conteneur ECS doit renvoyer le code de réponse 200 OK par défaut.

Remarque : si vous utilisez un Application Load Balancer, vous pouvez modifier le paramètre Matcher (Concordance), afin de spécifier un code de réponse autre que 200. Pour plus d'informations, consultez la rubrique Vérification de l'état de vos groupes cibles.

1.    Connectez-vous à votre instance de conteneur avec SSH.

2.    (En option) Installez curl en utilisant la commande appropriée pour votre système.

Pour Amazon Linux et d'autres distributions basées sur RPM, exécutez la commande :

sudo yum –y install curl

Pour les systèmes basés sur Debian tels que Ubuntu exécutez la commande suivante :

sudo apt-get install curl

3.    Pour obtenir l'ID de conteneur, exécutez la commande suivante :

docker ps

Remarque : le port de l'écouteur local est indiqué dans le résultat de la commande, sous PORTS, à la fin de la séquence.

4.    Pour obtenir l'adresse IP du conteneur, utilisez la commande docker inspect :

Remplacez 112233445566 par le numéro d'identification du conteneur.

$ IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' 112233445566)

Remarque : l'adresse IP du conteneur est enregistrée dans IPADDR. Utilisez cette commande uniquement si vous utilisez le mode réseau BRIDGE.

Si vous utilisez le mode réseau AWSVPC, utilisez l'adresse IP de la tâche affectée à son interface réseau Elastic. Si vous utilisez le mode réseau HOST, utilisez l'adresse IP de l'hôte via lequel la tâche est exposée.

5.    Pour obtenir le code de statut, exécutez une commande curl contenant IPADDR et le port de l'écouteur local. Par exemple, si vous exécutez la commande curl sur un conteneur à l'écoute sur le port 8080 avec le chemin de surveillance de l'état /health, la commande doit renvoyer le code de réponse 200 OK :

curl -I http://${IPADDR}:8080/health

Si vous recevez un message d'erreur non HTTP, cela implique que votre application n'écoute pas le trafic HTTP. Si vous recevez un code de statut HTTP autre que celui que vous avez spécifié dans le paramètre Matcher (Correspondance), cela implique que votre application écoute, mais ne renvoie pas de code de statut d'une cible fonctionnant correctement.

Vérification du statut de votre instance de conteneur

Supposons que vous recevez le message suivant de votre événement de service AWS ECS :

(service AWS-Service) (instance i-1234567890abcdefg) (port 443) n'est pas sain dans (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) du fait de (raison de l'échec des surveillances de l'état)

Vérifiez le statut de votre instance de conteneur en consultant la surveillance de statut sur la console Amazon EC2. Si les surveillances du statut système de votre instance échouent, essayez d'arrêter et de redémarrer votre instance.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?