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

Dernière mise à jour : 05-04-2021

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 pouvez associer des fournisseurs de capacité Fargate Spot à des clusters Amazon ECS à l'aide de l'interface de ligne de commande AWS (AWS CLI) ou de l'API Amazon ECS uniquement.
  • Vous ne pouvez pas supprimer les fournisseurs de capacité Fargate ou Fargate Spot.
  • Vous pouvez dissocier les fournisseurs de capacités Fargate ou Fargate Spot des clusters.

Remarque : la capacité Fargate Spot convient à l'exécution de tâches tolérantes aux pannes, car elle s'exécute sur une capacité de réserve. AWS peut reprendre cette capacité de réserve en cas de besoin. Dans ce scénario, vous recevez un avertissement et vos tâches sont interrompues au bout de deux minutes. Pour plus d'informations, consultez Fournisseurs de capacités AWS Fargate.

Résolution

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

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

1.    Créez un nouveau cluster Fargate et associez un fournisseur de capacité Fargate Spot à votre cluster à l'aide de la console de gestion AWS ou de la commande AWS CLI suivante :

$ aws ecs create-cluster --cluster-name your_Fargate_cluster_name --capacity-providers FARGATE_SPOT --region your_region

Remarque : si vous utilisez la console de gestion AWS avec le modèle de cluster Networking only (Mise en réseau uniquement), vous pouvez créer un cluster Fargate auquel un fournisseur de capacité Fargate Spot est associé automatiquement.

2.    (Facultatif) Pour dissocier le fournisseur de capacité Fargate Spot créé automatiquement de votre cluster Amazon ECS, exécutez la commande suivante :

$ aws ecs put-cluster-capacity-providers --cluster your_FargateCluster_name --capacity-providers FARGATE_SPOT --default-capacity-provider-strategy your_existing_default_capacity_provider --region your_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 your_cluster_name --region your_region

Remarque : la sortie de la commande précédente inclut la section Fournisseurs de capacité. Cette section contient les fournisseurs de capacité associés à votre cluster Amazon ECS.

Ajouter ou associer un cluster Amazon ECS existant à un fournisseur de capacité Fargate Spot

Remarque : vous ne pouvez pas ajouter ou associer un fournisseur de capacité Fargate Spot à un cluster existant à l'aide de la console de gestion AWS. Il vous faut à la place utiliser la ligne de commande AWS CLI.

Pour ajouter ou associer un cluster existant à un fournisseur de capacité Fargate Spot, exécutez la commande suivante :

$ aws ecs put-cluster-capacity-providers --cluster your_Fargate_cluster_name --capacity-providers FARGATE_SPOT your_existing_capacity_provider1 --default-capacity-provider-strategy your_existing_default_capacity_provider_strategy --region your_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.

Gérer les avis de résiliation de capacité Fargate Spot

Lorsqu'une tâche exécutée sur un fournisseur de capacité Fargate Spot est arrêtée en raison d'une interruption spot, vous recevez un avertissement deux minutes avant que la tâche ne soit arrêtée de force par Amazon ECS. L'avertissement est envoyé en tant qu'événement de modification de tâche à Amazon EventBridge et comme signal SIGTERM à la tâche en cours d'exécution. Si la tâche fait partie d'un service, le planificateur de services tente en permanence de lancer des tâches supplémentaires sur le fournisseur de capacité Fargate Spot. Le planificateur de service tente ces lancements supplémentaires pour voir si la capacité est disponible après réception d'un signal d'interruption.

1.    Utilisez un modèle d'événement pour créer une règle EventBridge pour les événements de modification de l'état des tâches Amazon ECS.

2.    Pour donner à un conteneur le temps de s'arrêter sans causer de problèmes, définissez la valeur StopTimeout sur 120 secondes ou moins dans la section Containers Definitions (Définitions de conteneurs) de votre définition de tâche.

Remarque : la valeur StopTimeout est définie par défaut sur 30 secondes. Le signal SIGTERM doit être reçu de l'intérieur du conteneur pour que des actions de nettoyage puissent être réalisées. Si le traitement du signal échoue, la tâche reçoit un signal SIGKILL passé le délai configuré via la valeur StopTimeout. Une défaillance du signal peut entraîner une perte ou une corruption de données.

Voici un exemple d'événement de modification d'état de tâche TerminationNotice :

{
  "version": "0",
  "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab",
  "detail-type": "ECS Task State Change",
  "source": "aws.ecs",
  "account": "111122223333",
  "resources": [
    "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
  ],
  "detail": {
    "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default",
    "createdAt": "2016-12-06T16:41:05.702Z",
    "desiredStatus": "STOPPED",
    "lastStatus": "RUNNING",
    "stoppedReason": "Your Spot Task was interrupted.",
    "stopCode": "TerminationNotice",
    "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE",
    ...
  }
}

Exécuter une tâche ou créer un service à l'aide du fournisseur de capacité Fargate Spot

Important : le fournisseur de capacité Fargate Spot nécessite la version 1.3.0 de la plate-forme AWS Fargate.

Astuce : si vous souhaitez quitter une tâche autonome sans causer de problème lors de la réception d'un signal SIGTERM, il est recommandé de définir StopTimeout sur 120 secondes.

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

aws ecs run-task \
   --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --task-definition your_task-def-family:revision \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --count your_integer \
   --region your_region

Créer un service à l'aide du fournisseur de capacité Fargate Spot

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

aws ecs create-service \ 
   --service-name your_FargateService_name \
   --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --service-name your_FargateService \
   --task-definition your_task-def-family:revisio> \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --desired-count your_integer \
   --region your_region

Vérifier que vos tâches sont en cours d'exécution 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 your_cluster_name --tasks your_task_ID --region your_region

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


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