Comment mettre fin à l'échec de stabilisation d'Amazon ECS service dans AWS CloudFormation ?

Dernière mise à jour : 18/02/2021

Mon Amazon Elastic Container Service (Amazon ECS) ne parvient pas à se stabiliser dans AWS CloudFormation. J'obtiens l'erreur : « Service arn:aws:ecs:us-east-accountID:service/ServiceName did not stabilize ». (Le service arn:aws:ecs:us-east-accountID:service/ServiceName ne s'est pas stabilisé).

Brève description

Un service créé dans Amazon ECS ne parvient pas à stabiliser s'il se trouve dans l'état spécifié par le modèle AWS CloudFormation. Pour vérifier que le service a lancé le nombre souhaité de tâches avec la définition de tâche souhaitée AWS CloudFormation exécute des appels API DescribeService répétés. Ces appels vérifient le statut du service jusqu'à ce que l'état souhaité soit atteint. Le processus appelant peut prendre jusqu'à trois heures. Ensuite, AWS CloudFormation expire et renvoie le message « Service ARN did not stabilize » (Le nom ARN du service ne s'est pas stabilisé). Même si AWS CloudFormation vérifie le statut du service, la pile qui contient le service reste dans l'état CREATE_IN_PROGRESS ou UPDATE_IN_PROGRESS et ne peut pas être mise à jour.

Si vous ne pouvez pas résoudre le problème sous-jacent associé aux tâches de service Amazon ECS et que vous ne souhaitez pas attendre que les appels API DescribeService expirent, vous pouvez forcer manuellement l'état CREATE_COMPLETE de la ressource de service Amazon ECS dans AWS CloudFormation. Pour ce faire, définissez manuellement 0 (zéro) pour le nombre souhaité du service dans la console Amazon ECS pour arrêter les tâches en cours. Ainsi, AWS CloudFormation considère que la mise à jour a abouti, car le nombre de tâches est égal au nombre souhaité, à sa savoir zéro.

Important : il est recommandé de ne pas forcer AWS CloudFormation à définir l'état CREATE_COMPLETE pour les services de production, car toutes les tâches sont arrêtées, et cela peut entraîner une interruption en production.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes à partir de l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Résolution

Vérifier la création de ressource

1.    Dans votre modèle AWS CloudFormation, créez une ressource AWS::ECS::Service. Par exemple :

Resources:
ECSServiceA:
 Type: AWS::ECS::Service
Properties:
  DesiredCount: 1
  Cluster: awsExampleECSCluster
  LaunchType: EC2
  ServiceName: "MyNginxService2"
  TaskDefinition: NginxTask:1

2.    Ouvrez la console AWS CloudFormation, puis sélectionnez votre pile.

3.    Choisissez l'onglet Events (Événements) puis vérifiez que votre ressource est en cours de création.

Mettre à jour le nombre souhaité du service

Vous pouvez rétablir le nom de services d'origine en utilisant l'interface de ligne de commande AWS (CLI AWS) ou la console Amazon ECS.

Depuis l'interface de ligne de commande AWS :

1.    Pour décrire le service et répertorier les événements du service, exécutez la commande suivante :

aws ecs describe-services --cluster awsExampleECSCluster --services MyNginxService2

2.    Pour mettre à jour le nombre souhaité du service, exécutez la commande suivante :

aws ecs update-service --cluster awsExampleECSCluster --service MyNginxService2 --desired-count 0

3.    Remplacez --desired-count par votre valeur d'origine.

Dans la console Amazon ECS :

1.    Ouvrez la console Amazon ECS.

2.    Dans le volet de navigation, choisissez Clusters, puis sélectionnez le cluster qui contient l'Amazon ECS service que vous avez créé.

3.    Sur la page Clusters, choisissez le cluster qui contient l'Amazon ECS service que vous avez créé.

4.    Sur la page du cluster que vous avez sélectionné, dans la colonne Service Name (Nom du service), choisissez votre service.

5.    Choisissez l'onglet Events (Événements), puis Update (Mettre à jour).

6.    Dans la page Configure service (Configurer le service), dans Number of tasks (Nombre de tâches), entrez 0.

7.    Choisissez Next Step (Étape suivante) pour passer à la fin de l'assistant Update service (Mettre à jour le service), puis choisissez Update Service (Mettre à jour le service).

Le service entre maintenant dans un état stable et remplace l'état CREATE_COMPLETE de la ressource Amazon ECS service par UPDATE_COMPLETE dans AWS CloudFormation.

Important : pour que votre pile AWS CloudFormation se synchronise avec les propriétés de l'Amazon ECS service après avoir résolu le problème avec les tâches sous-jacentes, vous devez remplacer manuellement le nombre souhaité (DesiredCount) par la valeur d'origine depuis votre modèle.


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


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