Comment utiliser les fournisseurs de capacité Fargate Spot pour Amazon ECS ?

Date de la dernière mise à jour : 05/04/2022

Je souhaite utiliser les fournisseurs de capacité AWS Fargate Spot pour Amazon Elastic Container Service (Amazon ECS).

Brève description

Avant de commencer, gardez à l'esprit les points suivants :

  • Vous n’avez pas besoin de créer des fournisseurs de capacité Fargate et Fargate Spot. Ils sont disponibles pour tous les comptes et ont seulement besoin d'être associés à un cluster pour pouvoir être utilisés.
  • Le fournisseur de capacité Fargate Spot peut être associé à un cluster existant à l'aide de l'API ECS PutClusterCapacityProviders et de la référence de commande CLI ECS put-cluster-capacity providers. L'ajout d'un fournisseur de capacité Fargate Spot à un cluster existant n'est pas pris en charge à l'aide d'AWS Management Console (console de gestion AWS).
  • Les fournisseurs de capacité Fargate et Fargate Spot sont réservés et ne peuvent être supprimés. Vous pouvez les dissocier d'un cluster à l'aide de l'API PutClusterCapacityProviders.
  • Fargate Spot nécessite que votre tâche utilise la plateforme version 1.3.0 ou ultérieure (pour Linux) et le fournisseur de capacité Fargate Spot n'est pas pris en charge pour les conteneurs Windows sur Fargate.

Résolution

Remarque : si vous constatez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez bien la dernière version d'AWS CLI.

Créer, associer et dissocier le fournisseur de capacité Fargate Spot de votre cluster

Les fournisseurs de capacité Fargate Spot sont automatiquement associés au cluster lorsqu'ils sont créés à partir de la console Amazon ECS avec le modèle de cluster Réseaux uniquement. Pour plus d'informations, voir Création d'un cluster pour le type de lancement Fargate avec la nouvelle console.

Associer votre cluster à un fournisseur de capacités Fargate Spot

Si le fournisseur de capacité Fargate Spot n'est pas déjà associé, vous pouvez associer le fournisseur de capacité à votre cluster à l'aide de l'API PutClusterCapacityProviders ou de la commande AWS CLI suivante :

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE FARGATE_SPOT \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --region <Region>

Important : pour éviter de remplacer vos fournisseurs de capacité, incluez tous vos fournisseurs de capacité existants et la stratégie de fournisseur de capacité dans la commande précédente. Les fournisseurs de capacité qui ne sont pas inclus dans la commande sont dissociés du cluster.

Dissocier votre cluster d’un fournisseur de capacités Fargate Spot

Tout fournisseur de capacité existant associé au cluster et qui est omis dans un appel d'API PutClusterCapacityProviders sera dissocié du cluster. Pour dissocier le fournisseur de capacité Fargate Spot de votre cluster Amazon ECS, exécutez la commande AWS CLI suivante :

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 \
        --region <Region>

Vérifier que votre fournisseur de capacité Fargate Spot est associé à votre cluster Amazon ECS

Pour vérifier que le fournisseur de capacité Fargate Spot est associé à votre cluster Amazon ECS, exécutez la commande suivante :

aws ecs describe-clusters \
        --cluster <Cluster_name> \
        --region <Region>

Le résultat doit être similaire à ce qui suit :

Output:
      "capacityProviders": [
           "FARGATE",
           "FARGATE_SPOT"
      ]

Remarque : Le résultat de la commande précédente inclut la section CapacityProviders qui contient les fournisseurs de capacité associés à votre cluster Amazon ECS.

Exécuter une tâche ou créer un service avec le fournisseur de capacité Fargate Spot

Pour exécuter une tâche à l'aide d'un fournisseur de capacité Fargate Spot, exécutez la commande suivante :

aws ecs run-task \
        --cluster <Cluster_name> \
        --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_definition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --count <Number_of_Tasks> \
        --region <Region>

Pour créer un Amazon ECS service qui utilise des fournisseurs de capacité Fargate Spot, exécutez la commande suivante :

aws ecs create-service \ 
        --cluster <Cluster_name> \
        --service-name <Service_name> \
        --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_defintition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --desired-count <Number_of_tasks> \
        --region <Region>

Vérifier que vos tâches sont en train d’être exécutées sur le fournisseur de capacité Fargate Spot

Pour confirmer que vos tâches utilisent des fournisseurs de capacité Fargate, exécutez la commande suivante :

aws ecs describe-tasks 
        --cluster <Cluster_name> \
        --tasks <TaskID> \
        --region <Region>

Suivi de l'utilisation de Fargate OnDemand et Fargate Spot par service depuis Amazon CloudWatch n'est actuellement pas pris en charge. Cependant, vous pouvez consulter la métrique pour voir l'utilisation totale de Fargate OnDemand et Spot à l'aide de CloudWatch. Pour en savoir plus, voirMétriques d’utilisation d'AWS Fargate.

Questions fréquentes (FAQ)

Quelles sont les bonnes pratiques pour Fargate Spot ?

  • Fargate Spot est idéal pour les charges de travail sans état et tolérantes aux erreurs, mais ne vous fiez pas uniquement à Spot Task pour les charges de travail critiques. À la place, configurez un mélange de tâches Fargate habituelles.
  • Gérez les interruptions de manière appropriée en capturant les signaux SIGTERM. Lors de la réception d'un signal SIGTERM, il est recommandé de définir StopTimeOut sur 120 secondes. Pour plus d'informations, voirArrêts appropriés avec ECS.
  • Les applications exécutées sur Fargate Spot doivent être tolérantes aux erreurs.

Qu'advient-il des tâches lorsque la capacité FARGATE_SPOT n'est pas disponible ?

Lorsque le planificateur ECS ne parvient pas à lancer une tâche dans le cas où une capacité n’est pas disponible, l'événement SERVICE_TASK_PLACEMENT_FAILURE est émis. La tâche n'atteindra pas la première étape PROVISIONING et aucun avertissement ne s'affichera dans les événements ECS. Le planificateur ECS continuera d'essayer de lancer la tâche. Si la capacité devient disponible, l'événement SERVICE_STEADY_STATE sera émis.

Y a-t-il un basculement vers Fargate quand aucune capacité Fargate Spot n'est disponible ?

Il n'est pas possible d'avoir un mécanisme de failback pour FARGATE quand aucune capacité FARGATE_SPOT n'est disponible.

Quel est un exemple de la manière dont les tâches sont placées lors de l'utilisation des fournisseurs de capacité dans un service ECS ?

Pour cet exemple, considérons une stratégie de fournisseur de capacité contenant les deux fournisseurs de capacité suivants :

Provider 1: FARGATE      |  Base:2   Weight:1
Provider 2: FARGATE_SPOT |  Base:0   Weight:3

Selon cette stratégie, une fois la valeur de base satisfaite, pour chaque tâche exécutée à l'aide de FARGATE, trois tâches utilisent FARGATE_SPOT. Lorsque le service ECS est créé avec le nombre souhaité de 5, voici ce qui se produit :

  • 2 tâches sont lancées à l'aide de FARGATE pour satisfaire la valeur de base et les 3 autres sont réparties entre FARGATE et FARGATE_SPOT dans une proportion de 1:3.
  • 3 tâches sont exécutées avec FARGATE et 2 tâches dans FARGATE_SPOT.

En utilisant la même stratégie, avec un événement de scale-out parallèle qui s'est produit et le nombre souhaité est porté à 9. Le planificateur ECS verra que 3 tâches ont déjà été exécutées avec FARGATE dont la base est satisfaite. De plus, il constatera que les 4 nouvelles tâches qui sont dans l'état PROVISIONING sont réparties entre FARGATE et FARGATE_SPOT dans une proportion de 1:3. Les 4 dernières tâches sont exécutées à l'aide de FARGATE et les 5 tâches dans FARGATE_SPOT.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?