Comment résoudre les problèmes liés à Service Connect dans Amazon ECS ?
Mes services Amazon Elastic Container Service (Amazon ECS) ne peuvent pas se connecter à un autre service.
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 section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Une erreur de configuration ou des problèmes de réseau entraînent des problèmes de communication d’un service à un autre. Pour résoudre ces problèmes, effectuez les actions de dépannage suivantes.
Vérifier la configuration de Service Connect
Vérifiez que vous avez activé Service Connect
Prérequis : Pour utiliser Amazon ECS Service Connect, assurez-vous que vous répondez aux exigences de Service Connect.
Pour vérifier si vous avez activé Service Connect pour vos services Amazon ECS, exécutez la commande describe-services de l'interface de ligne de commande AWS suivante :
aws ecs describe-services --cluster cluster-name --services service-name
Remarque : Remplacez cluster-name par le nom de votre cluster et service-name par le nom de votre service.
Exemple de sortie :
"serviceConnectConfiguration": { "enabled": true,
Remarque : Si le service Amazon ECS doit autoriser le trafic réseau en provenance d'autres services, assurez-vous de définir la configuration de Service Connect en tant que service client-serveur. Pour vérifier cette configuration, vérifiez la sortie de commande pour « services » sous « serviceConnectionConfiguration ».
Vérifiez l'espace de noms de vos services
Pour utiliser Service Connect, vous devez configurer vos services Amazon ECS dans le même espace de noms. Assurez-vous également que votre service client et votre service client-serveur se trouvent dans le même espace de noms. Pour vérifier l'espace de noms de vos services, exécutez la commande describe-services suivante :
aws ecs describe-services --cluster cluster-name --services service-name | grep namespace
Remarque : Remplacez cluster-name par le nom de votre cluster et service-name par le nom de votre service.
Dans la sortie, vérifiez la valeur de l'espace de noms. Pour mettre à jour l'espace de noms d'un service, utilisez la console Amazon ECS pour mettre à jour le paramètre de configuration de Service Connect. Ou, exécutez la commande update-service suivante :
aws ecs update-service --cluster cluster-name --service service-name --service-connect-configuration enabled=true,namespace=Namespace-name --force-new-deployment
Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et Namespace-name par votre espace de noms.
Si le service client ne parvient pas à résoudre le DNS du service client-serveur, l'un des messages d'erreur suivants s'affiche :
- « server can't find DNS: (le serveur ne trouve pas le DNS) NXDOMAIN »
- « server can't find example.core.staging.local : (le serveur ne trouve pas example.core.staging.local) NXDOMAIN »
Pour résoudre ce problème, exécutez la commande get-namespace suivante pour vérifier que vous avez enregistré l'espace de noms dans AWS Cloud Map :
aws servicediscovery get-namespace --id namespace
Remarque : Remplacez namespace par l’ID de votre espace de noms.
Vérifiez la sortie de la commande pour afficher les espaces de noms disponibles dans votre compte AWS et votre région AWS.
Pour confirmer que vous avez enregistré vos tâches dans l'espace de noms de l'instance, procédez comme suit :
-
Pour obtenir l'ID de l'espace de noms, exécutez la commande list-namespaces suivante :
aws servicediscovery list-namespaces -
Utilisez la console AWS Cloud Map ou l'AWS CLI pour répertorier les services dans l'espace de noms.
-
Pour afficher les instances enregistrées du service, exécutez la commande list-instances suivante :
aws servicediscovery list-instances --service-id srv-serviceIDRemarque : Remplacez serviceID par votre ID de service.
-
Si vous n'avez pas enregistré votre instance, exécutez la commande update-service suivante pour redéployer les tâches :
aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deploymentRemarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et region-name par votre région.
Vous pouvez également utiliser la console Amazon ECS pour mettre à jour le service et choisir Forcer un nouveau déploiement.
Vérifiez les noms de mappage de vos ports
Si vous ne définissez pas le nom de votre mappage de ports dans la définition de tâche, le message d'erreur suivant s'affiche :
« No port aliases found. Select a different task definition family and revision that has port mappings configured to use client and server mode. » (Aucun alias de port trouvé. Sélectionnez une autre famille de définitions de tâches et une révision dont les mappages de ports sont configurés pour utiliser le mode client et le mode serveur.)
Pour résoudre ce problème, mettez à jour la définition de tâche et ajoutez une valeur pour le paramètre nom sous portMappings.
Exemple de définition de tâche :
"portMappings": [ { "name": "portmappingnameexample", "containerPort": 3000, "hostPort": 3000, "protocol": "tcp" }
Vérifier les paramètres de votre ACL réseau et de votre groupe de sécurité
Assurez-vous que votre liste de contrôle d'accès réseau (ACL réseau) et vos groupes de sécurité utilisent les configurations suivantes :
- Le service client autorise le trafic sortant vers le port du groupe de sécurité du service client-serveur.
- Le groupe de sécurité du service client-serveur autorise le trafic entrant sur le port du service client.
- Les ACL du réseau privé virtuel (VPC) autorisent le trafic sur les ports containerPort et ingressPortOverride.
- Si les tâches de service s'exécutent dans différents VPC, votre connexion d'appairage de VPC ou la passerelle de transit doit autoriser le trafic entre les VPC.
Vérifier la connectivité entre vos tâches de services
Procédez comme suit :
-
Si vous exécutez des tâches sur AWS Fargate, activez ECS Exec. Si vous exécutez des tâches sur Amazon Elastic Compute Cloud (Amazon EC2), passez à l'étape 3.
-
Exécutez la commande execute-command suivante pour vous connecter à distance au conteneur :
aws ecs execute-command --cluster cluster-name \ --task task-id \ --container container-name \ --interactive \ --command "/bin/sh"Remarque : Remplacez cluster-name par le nom de votre cluster, task-id par votre ID de tâche et container-name par votre instance de conteneur.
-
Pour vous assurer que votre connexion utilise le proxy Service Connect, exécutez la commande suivante :
curl -I http://$IPaddress:portnumber/healthcheckRemarque : Remplacez IPaddress par l'adresse IP privée de la tâche, portnumber par le port de l'instance de conteneur et healthcheck par le chemin de vérification de l’état du conteneur.
Vérifiez la sortie de la commande pour l'en-tête server: envoy pour confirmer que la connexion utilise le proxy. Si votre connexion n'utilise pas le proxy, assurez-vous que la configuration de Service Connect est correcte.
-
Pour ouvrir le fichier /etc/hosts, exécutez la commande suivante :
cat /etc/hostsVérifiez la sortie de la commande pour vous assurer que vous pouvez voir les points de terminaison des autres services. Si vous ne voyez pas les points de terminaison du service, assurez-vous que la configuration de Service Connect est correcte.
-
Si vous modifiez la configuration de Service Connect, exécutez la commande update-service suivante pour redéployer les tâches :
aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deploymentRemarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et region-name par votre région.
Vous pouvez également utiliser la console Amazon ECS pour mettre à jour le service et choisir Forcer un nouveau déploiement.
Redéployer vos tâches de service client
Si le message d'erreur « Could not resolve host » (Impossible de résoudre l'hôte) s'affiche, cela signifie que vos tâches ne peuvent pas résoudre les points de terminaison du service. À la place, vous pourriez recevoir le message d'erreur « ping: bad address 'DNS' » (ping : mauvaise adresse 'DNS’).
Pour résoudre ces problèmes, redéployez les tâches de service client existantes.
Examiner vos journaux d’application
Consultez vos journaux d’application pour détecter les erreurs de connectivité ou d'exécution. Amazon ECS exporte les journaux vers différentes destinations en fonction de votre pilote de journal. Si vous utilisez le pilote awslogs, Amazon ECS exporte les journaux vers Amazon CloudWatch.
Informations connexes
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
demandé il y a un an
demandé il y a un an
demandé il y a 2 ans
AWS OFFICIELA mis à jour il y a 2 ans
AWS OFFICIELA mis à jour il y a 2 ans
AWS OFFICIELA mis à jour il y a 2 ans