Pourquoi mes instances de conteneur Amazon ECS avec des AMI Amazon Linux 1 sont-elles déconnectées ?

Dernière mise à jour : 16/10/2020

Mes instances de conteneur Amazon Elastic Container Service (Amazon ECS) sont déconnectées.

Brève description

Votre agent de conteneur Amazon ECS peut se connecter et se reconnecter plusieurs fois par heure. Ces événements de modification sont normaux et ne doivent pas vous inquiéter.

Toutefois, si l'agent de conteneur reste déconnecté, il est possible que l'instance de conteneur cesse de fonctionner dans le cadre de votre cluster ECS. L'agent est déconnecté lorsque agentConnected renvoie la valeur false. Le problème peut avoir les origines suivantes :

  • Des problèmes de mise en réseau empêchent la communication entre l'instance et Amazon ECS.
  • L'agent de conteneur n'a pas les autorisations AWS Identity and Access Management (IAM) nécessaires pour communiquer avec les points de terminaison Amazon ECS.
  • Il existe des problèmes liés à l'hôte ou au service Docker dans l'instance de conteneur.

Procédez comme suit pour identifier la cause de la déconnexion.

Résolution

Remarque : la résolution suivante s'applique aux AMI Amazon Linux 1 optimisées pour Amazon ECS. Pour une résolution qui s'applique aux AMI Amazon Linux 2 optimisées pour Amazon ECS, consultez Pourquoi mes instances de conteneur Amazon ECS avec les AMI Amazon Linux 2 sont-elles déconnectées ?

Vérifiez que le service Docker est en cours d'exécution sur l'instance de conteneur

1.    Pour vérifier que le service Docker est en cours d'exécution sur l'instance de conteneur affectée, exécutez la commande suivante :

sudo service docker status

La sortie de la commande doit être semblable à celle ci-dessous :

docker (pid 23013) is running...

Si le service Docker n'est pas en cours d'exécution ou qu'il est nécessaire de le redémarrer, exécutez la commande suivante :

sudo service docker restart

La sortie de la commande doit contenir les lignes suivantes :

Stopping docker: [  OK  ]
Starting docker: [  OK  ]

Remarque : pour vérifier que le service Docker est en cours d'exécution après la commande de redémarrage, exécutez la commande sudo service docker status.

2.    Pour démarrer l'agent ECS, exécutez la commande suivante :

sudo start ecs

Vérifier que l'agent de conteneur est en cours d'exécution sur l'instance de conteneur

Pour vérifier que l'agent de conteneur est exécuté sur l'instance de conteneur affectée, exécutez la commande suivante :

sudo status ecs

Si l'agent de conteneur n'est pas en cours d'exécution sur votre instance de conteneur, exécutez la commande suivante pour le démarrer :

sudo start ecs

La sortie de la commande doit être semblable à celle ci-dessous :

ecs start/running, process 23403

Examiner les fichiers journaux de l'agent de conteneur et de Docker

Si vos instances de conteneur sont toujours déconnectées, consultez les fichiers journaux de l'hôte du conteneur pour l'agent de conteneur et Docker.

Pour générer les fichiers journaux de l'agent de conteneur et de Docker, exécutez les commandes suivantes :

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

Remarque : pour collecter des informations de journal à partir de l'instance de conteneur, exécutez le collecteur de journaux Amazon ECS.

Vérifier que le profil d'instance IAM possède les autorisations nécessaires

Si l'agent de conteneur est toujours déconnecté, vérifiez que le profil d'instance IAM associé à l'instance de conteneur dispose des autorisations IAM nécessaires.

1.    Connectez-vous à l'instance en utilisant SSH.

2.    Pour afficher les métadonnées de l'instance dans le profil d'instance associé à l'instance, exécutez la commande suivante :

curl http://169.254.169.254/latest/meta-data/iam/info

La sortie de la commande doit être semblable à celle ci-dessous :

{
  "Code" : "Success",
  "LastUpdated" : "2019-06-29T15:47:03Z",
  "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
  "InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"
}

3.    Vérifiez que le rôle IAM contient les autorisations appropriées pour vos instances de conteneur.

4.    Pour vérifier des erreurs d'informations d'identification spécifiques avec l'agent de conteneur, exécutez la commande suivante pour vérifier le journal de l'agent de conteneur ECS pour obtenir une liste de journaux ECS :

cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**

Remarque : le journal de l'agent de conteneur change toutes les heures, et le suffixe change automatiquement pour refléter la date et l'heure actuelles. Mettez à jour la commande pour inclure la plage de dates et l'ID de journal pour lesquels le problème s'est produit.

Si l'agent de conteneur ne dispose pas des informations d'identification nécessaires, vous recevez une erreur similaire à la suivante dans les journaux :

2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f
2019-06-29T16:10:09Z [ERROR] Error re-registering: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f