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

Lecture de 12 minute(s)
0

Une surveillance de l’état d’Application Load Balancer réalisée pour une instance Amazon Elastic Compute Cloud (Amazon EC2) dans Amazon Elastic Container Service (Amazon ECS) fait apparaître un état défectueux. Je souhaite que mon instance EC2 passe avec succès la surveillance de l’état.

Brève description

Lorsque votre tâche Amazon ECS échoue la surveillance de l’état de l’équilibreur de charge, vous recevez l’un des messages d’erreur suivants dans le message d’événement de votre service Amazon ECS :

  • « (service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502 or 504]) or (request timeout) »
  • « (service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed) »
  • « (service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed) »

Vous pouvez également recevoir le message d’erreur suivant depuis votre console de tâches Amazon ECS :

« Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) »

Si vous recevez le message d’erreur « (service AWS-Service) (task c13b4cb40f1f4fe4a2971f76ae5a47ad) failed container health checks », consultez la page Comment résoudre les problèmes liés aux échecs de surveillance de l’état des conteneurs pour les tâches Amazon ECS ?

Remarque : une tâche Amazon ECS peut renvoyer un état défectueux pour de nombreuses raisons. Si les étapes suivantes ne permettent pas de résoudre votre problème, consultez la page Résolution des problèmes liés aux équilibreurs de charge de service. Pour savoir pourquoi votre tâche ECS a été arrêtée, consultez la page Vérification des erreurs de tâches arrêtées.

Résolution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Corriger des erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente d’AWS CLI.

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

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

Vérifier 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 suivantes.

Les groupes de sécurité liés à votre équilibreur de charge et à votre instance de conteneur ou l’interface réseau Elastic de tâches ECS pour le mode réseau awsvpc sont configurés correctement

Il est recommandé 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 tâches. Cette approche vous permet d’autoriser tout le trafic entre vos équilibreurs de charge et les instances de conteneurs ou l’interface réseau Elastic de tâches. Vous pouvez également activer vos instances de conteneurs pour qu’elles acceptent le trafic sur le port 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 conteneurs ou votre interface réseau Elastic de tâches sur le port enregistré. Vérifiez qu’il en va de même 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é lié à votre instance de conteneur ou à votre interface réseau Elastic de tâches autorise tout le trafic entrant sur la plage de ports de l’hôte de la tâche en provenance du groupe de sécurité associé à votre équilibreur de charge. Pour savoir comment vérifier le groupe de sécurité associé à votre équilibreur de charge, consultez la page Groupes de sécurité pour votre Application Load Balancer.

Important : lorsque vous utilisez le mappage dynamique des ports, 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 spécifiée dans les règles d’entrée 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 que l’interface réseau Elastic de tâches ECS pour le mode réseau awsvpc

Lorsque vous activez une zone de disponibilité pour votre équilibreur de charge, l’équilibreur de charge Elastic Load Balancing crée un nœud d’équilibrage de charge dans la zone de disponibilité. Si vous enregistrez des cibles dans une zone de disponibilité, mais que vous ne l’activez pas, les cibles enregistrées ne reçoivent pas de trafic. Pour en savoir plus, consultez la page Zones de disponibilité et nœuds d’équilibreur de charge.

Afin de connaître 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 volet de navigation, sous Équilibrage de charge, choisissez Équilibreurs de charge.
  3. Sélectionnez l’équilibreur de charge que vous utilisez pour votre service Amazon ECS.
  4. Depuis l’onglet Description, vous pouvez afficher les zones de disponibilité dans le champ Zones de disponibilité.

Remarque : vous pouvez activer ou désactiver les zones de disponibilité à tout moment pour un Application Load Balancer. Pour un Network Load Balancer, vous ne pouvez pas désactiver les zones de disponibilité une fois qu’il a été activé, mais vous pouvez activer des zones de disponibilité supplémentaires.

Si vous utilisez des Application Load Balancers, l’équilibrage de charge entre zones est toujours activé. Si vous utilisez des Network Load Balancers, l’équilibrage de charge entre zones est désactivé par défaut. Après avoir créé le Network Load Balancer, vous pouvez activer ou désactiver l’équilibrage de charge entre zones à tout moment. Pour en savoir plus, consultez la page Comment fonctionne Elastic Load Balancing.

Afin de connaître les zones de disponibilité pour lesquelles vos instances de conteneurs sont configurées, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le volet de navigation, sous Autoscaling, choisissez Groupes Auto Scaling.
  3. Sélectionnez le groupe Auto Scaling de l’instance de conteneur associé à votre cluster.
  4. Dans l’onglet Détails, vérifiez que les zones de disponibilité répertoriées sous Réseau correspondent aux zones de disponibilité répertoriées pour votre équilibreur de charge.

Pour modifier les zones de disponibilité de votre cluster, ouvrez la console AWS CloudFormation, choisissez la pile CloudFormation correspondant à votre cluster et mettez à jour la configuration des sous-réseaux. Afin de connaître les zones de disponibilité pour lesquelles votre interface de réseau Elastic de tâches est configurée, procédez comme suit :

  1. Ouvrez la console Amazon ECS.
  2. Dans le volet de navigation, choisissez Clusters, puis sélectionnez le cluster qui contient votre service.
  3. Dans la colonne Nom du service de l’onglet Services de la page de votre cluster, sélectionnez le service à vérifier.
  4. Choisissez Détails, puis sélectionnez Sous-réseaux autorisés afin d’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 des sous-réseaux d’un service Amazon ECS à partir de la console Amazon ECS. Vous pouvez utiliser la commande AWS CLI update-service pour modifier la configuration du sous-réseau.

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

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

  • Vérifiez que l’ACL réseau associée aux sous-réseaux de votre é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 la surveillance de l’état et les ports éphémères.
  • Vérifiez que l’ACL réseau associée aux sous-réseaux de votre instance de conteneur ou à l’interface réseau Elastic de tâches pour le mode awsvpc autorise le trafic entrant sur le port de surveillance de l’état. Vérifiez que l’ACL réseau autorise bien le trafic sortant sur les ports éphémères.

Pour en savoir plus sur les listes de contrôle d’accès réseau, consultez la page Utilisation des listes de contrôle d’accès réseau.

Vérifier les paramètres de surveillance de l’état de votre groupe cible

Pour vous assurer que les paramètres de 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 volet de navigation, sous Équilibrage de charge, choisissez Groupes cibles.
  3. Sélectionnez votre groupe cible.
    Important : utilisez un nouveau groupe cible. Évitez d’ajouter manuellement des cibles au groupe cible, car Amazon ECS agit automatiquement pour enregistrer les conteneurs au sein du groupe cible et annuler leur enregistrement.
  4. Dans l’onglet Surveillances de l’état, saisissez les informations suivantes :
    Vérifiez que les champs Port et Chemin sont configurés correctement. Si le champ Port n’est pas configuré correctement, votre équilibreur de charge peut annuler l’enregistrement du conteneur.
    Dans le champ Port, choisissez le port du trafic.
    Remarque : si vous choisissez Remplacer, vérifiez que le port spécifié correspond au port de l’hôte de la tâche.
    Dans le champ Expiration, vérifiez que la valeur du délai de réponse avant expiration est définie correctement.
    Remarque : le délai de réponse avant expiration correspond au délai dont dispose votre conteneur pour envoyer une réponse au ping de surveillance de l’état. Si cette valeur est inférieure au temps requis pour fournir une réponse, la surveillance de l’état échoue.

Vérifier l’état et la configuration de l’application dans votre conteneur ECS

Vérifier que l’application de votre conteneur ECS répond à la surveillance de l’état de votre équilibreur de charge

Pour vous assurer que l’application de 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 configurés correctement.
  • Surveillez les métriques d’utilisation du processeur et de la mémoire pour le service ECS. Par exemple, une utilisation élevée du processeur peut empêcher votre application de répondre et provoquer une erreur 502 ou une expiration.
  • Définissez une période de grâce minimale pour la surveillance de l’état. Ce paramètre indique au planificateur de services d’ignorer les surveillances de l’état d’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 un délai de grâce plus long pour l’enregistrement du Network Load Balancer.
  • Vérifiez les journaux de vos applications pour repérer les erreurs d’application. Pour en savoir plus, consultez la page Affichage des journaux de conteneurs awslogs dans CloudWatch Logs.

Vérifier que l’application de votre conteneur ECS renvoie bien le code de réponse approprié

Lorsque l’équilibreur de charge envoie une demande HTTP GET au chemin de surveillance de l’état, l’application de votre conteneur ECS est censée renvoyer le code de réponse 200 OK par défaut.

Remarque : si vous utilisez un Application Load Balancer, vous pouvez mettre à jour le paramètre Comparateur avec un code de réponse autre que 200. Pour en savoir plus, consultez la page Surveillance de l’état de vos groupes cibles.

  1. Utilisez le protocole SSH pour vous connecter à votre instance de conteneur.

  2. (Facultatif) Installez une curl à l’aide de la commande adaptée à votre système.
    Pour Amazon Linux et les autres distributions basées sur RPM, exécutez la commande suivante :

    sudo yum -y install curl

    Pour les systèmes basés sur Debian (comme Ubuntu), exécutez la commande suivante :

    sudo apt-get install curl
  3. Pour obtenir le numéro d’identification du conteneur, exécutez la commande suivante :

    docker ps

    Remarque : le port d’écoute local s’affiche dans la sortie de commande sous PORTS à la fin de la séquence.

  4. Pour obtenir l’adresse IP du conteneur, exécutez la commande inspecter docker :

    $ 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. Remplacez 112233445566 par le numéro d’identification du conteneur.
    Si vous utilisez le mode réseau awsvpc, utilisez l’adresse IP de tâche attribuée à l’interface réseau Elastic de tâches. 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 d’état, exécutez une commande curl incluant IPADDR et le port d’écoute local. Par exemple, si vous exécutez la commande curl sur un conteneur écoutant 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 signifie que votre application n’écoute pas le trafic HTTP. Si vous recevez un code d’état HTTP différent de celui que vous avez spécifié dans le paramètre Comparateur, cela signifie que votre application écoute le trafic HTTP, mais ne renvoie pas de code d’état pour une cible saine.

Vérifier l’état de votre instance de conteneur

Si vous recevez le message d’événement suivant à partir de votre événement de service AWS ECS :

« (service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed) »

Vérifiez l’état de votre instance de conteneur en consultant la surveillance de l’état sur la console Amazon EC2. Si votre instance échoue aux surveillances de l’état du système, essayez de l’arrêter et de la démarrer.

Informations connexes

Configurer un groupe cible pour le routage

Équilibrage de charge de service

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans