Comment puis-je empêcher l'échec de la stabilisation de mon service Amazon ECS dans CloudFormation ?

Lecture de 4 minute(s)
0

Mon service Amazon Elastic Container Service (Amazon ECS) ne parvient pas à se stabiliser dans AWS CloudFormation. L'erreur suivante s'affiche : « Service arn:aws:ecs:us-east-accountID:service/ServiceName did not stabilize. »

Brève description

Un service créé dans Amazon ECS ne parvient pas à se stabiliser s'il ne se trouve pas dans l'état spécifié par le modèle AWS CloudFormation. Pour vérifier qu'un service a lancé le nombre de tâches souhaité avec la définition de tâche souhaitée, AWS CloudFormation effectue des appels d'API DescribeServices répétés. Ces appels vérifient le statut du service jusqu'à ce que l'état souhaité soit atteint. Le processus d'appel peut prendre jusqu'à trois heures. Puis, AWS CloudFormation expire et renvoie le message « Service ARN did not stabilize ». Pendant qu'AWS CloudFormation vérifie le statut du service, la pile contenant le service demeure à l'état CREATE_IN_PROGRESS ou à l'état UPDATE_IN_PROGRESS et ne peut pas être mise à jour.

Pour éviter l'expiration d'un délai d'appel d'API DescribeServices, forcez manuellement l'état de la ressource de service Amazon ECS dans AWS CloudFormation à l'état CREATE_COMPLETE. Définissez le nombre de services souhaité à zéro dans la console Amazon ECS pour arrêter l'exécution des tâches. AWS CloudFormation considère ensuite la mise à jour comme réussie, car le nombre de tâches est égal au nombre souhaité de zéro.

Important : Il est recommandé de ne pas forcer manuellement AWS CloudFormation à passer à l'état CREATE_COMPLETE, car un arrêt forcé peut provoquer une interruption de la production.

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 Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l'interface AWS CLI.

Résolution

Vérifier la création de ressources

Procédez comme suit :

  1. Dans votre modèle AWS CloudFormation, créez une ressource AWS::ECS::Service. 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 Événements, puis vérifiez que votre ressource est en cours de création.

Mettre à jour le nombre souhaité du service

Vous pouvez mettre à jour le nombre souhaité du service à votre valeur d'origine à l'aide de l'AWS CLI ou de la console Amazon ECS.

AWS CLI

Procédez comme suit :

  1. Pour décrire le service et répertorier les événements de service, exécutez la commande describe-services de l'interface de ligne de commande AWS :

    aws ecs describe-services --cluster awsExampleECSCluster --services MyNginxService2
  2. Pour mettre à jour le nombre souhaité du service, exécutez la commande update-service de l'interface de ligne de commande AWS :

    aws ecs update-service --cluster awsExampleECSCluster --service MyNginxService2 --desired-count 0
  3. Mettez à jour --desired-count avec votre valeur d'origine.

Console Amazon ECS

Procédez comme suit :

  1. Ouvrez la console Amazon ECS.

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

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

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

  5. Choisissez l'onglet Événements, puis sélectionnez Mettre à jour.

  6. Sur la page Configurer le service, pour Nombre de tâches, saisissez 0.

  7. Sélectionnez Étape suivante pour accéder à la fin de l'assistant Mise à jour du service, puis sélectionnez Mettre à jour le service.

    Le service atteint maintenant un état stable et fait passer la ressource de service Amazon ECS dans AWS CloudFormation à CREATE_COMPLETE or UPDATE_COMPLETE.

    Important : Synchronisez votre pile AWS CloudFormation avec les propriétés du service Amazon ECS après avoir résolu le problème lié aux tâches sous-jacentes. Pour effectuer une synchronisation, rétablissez manuellement le nombre souhaité (DesiredCount) à la valeur d'origine de votre modèle.

Informations connexes

Qu’est-ce qu’Amazon Elastic Container Service (Amazon ECS) ?

services-stable

DescribeServices

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois