Comment résoudre les erreurs de fournisseur de capacité dans Amazon ECS ?

Dernière mise à jour : 17/12/2020

Une erreur se produit lorsque j'utilise l’interface de ligne de commande (AWS CLI) ou une API pour supprimer un fournisseur de capacité pour mon cluster Amazon Elastic Container Service (Amazon ECS).

Brève description

Si vous essayez de supprimer un fournisseur de capacité pour votre cluster en utilisant l'interface de ligne de commande AWS ou une API, l'une des erreurs suivantes peut s’afficher :

  • « updateStatus » (mise à jour du statut) : « DELETE_FAILED » (échec de la suppression)
  • « UpdateStatusReason »(motif du statut de mise à jour) : « Le fournisseur de capacité ne peut pas être supprimé car il est associé au cluster : votre-nom-de cluster. Supprimez le fournisseur de capacité du cluster, puis réessayez. »

Ces erreurs peuvent se produire pour les raisons suivantes :

  • Le fournisseur de capacité que vous tentez de supprimer est utilisé par un service Amazon ECS service dans le cadre de la stratégie de fournisseur de capacité. L’AWS Management Console ne vous permet pas de supprimer un fournisseur de capacité utilisé par un service Amazon ECS service. Dans ce scénario, vous recevez ce message d'erreur : « Le fournisseur de capacité indiqué est en cours d'utilisation et ne peut pas être supprimé » dans la console. Vous ne pouvez dissocier un fournisseur de capacité existant d'un cluster que s'il n'est pas utilisé par des tâches existantes. Si vous exécutez la commande DeleteCapacityProvider (supprimer un fournisseur de capacité) d’AWS CLI, le fournisseur de capacité passe à l'état DELETE_FAILED (échec de la suppression). Pour résoudre ce problème, suivez les étapes de la section Vérifier si votre fournisseur de capacité est utilisé par un service Amazon ECS service dans la stratégie de fournisseur de capacité.
  • Votre fournisseur de capacité est utilisé par la stratégie par défaut. Si vous ne choisissez pas de stratégie de fournisseur de capacité ou de type de lancement lorsque vous exécutez une tâche ou créez un service, une stratégie de fournisseur de capacité est alors associée à votre cluster par défaut. Toutefois, l'association se produit uniquement si le fournisseur de capacité est défini comme stratégie de fournisseur de capacité par défaut pour le cluster. Vous pouvez supprimer uniquement les fournisseurs de capacité qui ne sont pas associés à un cluster. Pour résoudre ce problème, suivez les étapes de la section Vérifier si votre fournisseur de capacité est défini dans la stratégie de fournisseur de capacité par défaut pour le cluster.

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

Résolution

Vérifier si votre fournisseur de capacité est utilisé par un service Amazon ECS service dans le cadre de la stratégie de fournisseur de capacité

1.    Si vous avez plusieurs services dans un cluster, utilisez le script suivant pour vérifier les services qui utilisent le fournisseur de capacité.

Avant d'exécuter le script, procédez comme suit :

Définissez les paramètres du cluster et du fournisseur de capacité sur vos valeurs.
Définissez vos informations d'identification de l'interface de ligne de commande AWS sur votre région AWS.
Installez jq depuis le site jq.

#! /bin/bash
cluster=clustername 
capacityprovider=capacityprovidername
services=$(aws ecs list-services --cluster ${cluster} | jq --raw-output '.serviceArns[]')
aws ecs describe-services \
    --cluster ${cluster} \
    --services ${services} \
    | jq -r --arg capacityprovider "${capacityprovider}" \
    '.services[] | select(.capacityProviderStrategy[]?.capacityProvider == $capacityprovider) | .serviceName'

Remarque : si le script renvoie une sortie vide, aucun des services du cluster n'utilise le fournisseur de capacité. Passez à la section Vérifier si votre fournisseur de capacité est défini dans la stratégie de fournisseur de capacité par défaut pour le cluster.

2.    Mettez à jour les services renvoyés dans la sortie du script avec un nouveau fournisseur de capacité.

3.    Supprimez l'ancien fournisseur de capacité.

Important : vous ne pouvez pas mettre à jour un service à l'aide d'une stratégie de fournisseur de capacité ou d'un type de lancement. Vous devez mettre à jour le service avec un autre fournisseur de capacité.

Vérifier si votre fournisseur de capacité est défini dans la stratégie de fournisseur de capacité par défaut pour le cluster

1.    Pour trouver le fournisseur de capacité par défaut pour votre cluster, exécutez la commande suivante :

$ aws ecs describe-clusters --cluster mycluster | jq '.clusters[].defaultCapacityProviderStrategy'
[
  {
    "capacityProvider": "oldCP",
    "weight": 0,
    "base": 0
  }
]

2.    Pour supprimer le fournisseur de capacité, vous devez modifier la stratégie de fournisseur de capacité par défaut pour votre cluster à l'aide de la console Amazon ECS ou de l'interface de ligne de commande AWS.

Dans la console Amazon ECS :

1.    Ouvrez la console Amazon ECS.

2.    Dans le panneau de navigation, sélectionnez Clusters, puis votre cluster.

3.    Choisissez Mettre à jour le cluster.

Depuis l'interface de ligne de commande AWS :

$ aws ecs put-cluster-capacity-providers \
     --cluster mycluster \
     --capacity-providers newCP \
     --default-capacity-provider-strategy capacityProvider=newCP \
     --region us-east-1

$ aws ecs delete-capacity-provider --capacity-provider oldCP

$ aws ecs describe-capacity-providers --capacity-provider oldCP

Remarque : dans l'exemple de code précédent, remplacez mycluster par votre cluster. Remplacez NewCP par le nouveau fournisseur de capacité que vous souhaitez ajouter. Remplacez OldCP par le fournisseur de capacité que vous souhaitez supprimer.

4.    Supprimez l'ancien fournisseur de capacité.

Tous les fournisseurs de capacité existants associés à un cluster qui sont omis de l'appel d'API PutClusterCapacityProviders sont dissociés du cluster. Les mêmes règles s'appliquent à la stratégie de fournisseur de capacité par défaut du cluster.</p


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


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