Mon cluster Amazon Elastic Container Service (Amazon ECS) utilise des fournisseurs de capacité. Je souhaite que mes instances Amazon Elastic Compute Cloud (Amazon EC2) d'un groupe Auto Scaling restent actives lorsqu'elles ont des tâches en cours d'exécution.
Brève description
Si vous utilisez un fournisseur de capacité, vous devez configurer les paramètres de votre cluster Amazon ECS pour ne pas interrompre les tâches en cours d'exécution lorsqu'il fait l’objet d’une mise à l'échelle verticale descendante. Implémentez une protection d'instance de mise à l'échelle horizontale descendante dans le groupe EC2 Auto Scaling et une protection de mise à l’échelle gérée dans les paramètres du fournisseur de capacité Amazon ECS. Cette configuration garantit qu'Amazon ECS conserve les instances dont les tâches sont en cours d'exécution.
Vous pouvez également configurer Amazon ECS pour vider progressivement les tâches lorsque vous arrêtez des instances et protéger des instances spécifiques contre un arrêt prématuré.
Votre configuration utilise les composants suivants :
- Fournisseurs de capacités : Les fournisseurs de capacité utilisent des groupes Auto Scaling pour provisionner les instances EC2 de façon dynamique.
- Drainage de l'instance : Lorsqu'une instance EC2 d'un groupe Auto Scaling est marquée pour résiliation, elle passe au statut DRAINING et n'accepte plus de nouvelles tâches. Les tâches en cours d'exécution doivent être terminées ou déplacées vers une autre instance.
- Autoscaling de cluster : L’autoscaling de cluster utilise des fournisseurs de capacité pour mettre à l’échelle automatiquement les groupes Auto Scaling en fonction des exigences des tâches.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Assurez-vous qu'Amazon ECS ou le groupe Auto Scaling ne mettent pas fin prématurément à une instance lors de la mise à l'échelle horizontale descendante
Pour utiliser la protection de la résiliation gérée dans le cadre de l’autoscaling de cluster, vous devez activer la protection de mise à l'échelle horizontale descendante de l'instance sur le groupe Auto Scaling. Cette action garantit que le groupe Auto Scaling conserve les instances contenant des tâches en cours d'exécution.
Pour activer la protection de la mise à l'échelle horizontale descendante, exécutez la commande update-auto-scaling-group suivante de l'interface de ligne de commande AWS :
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name my-asg \
--new-instances-protected-from-scale-in
Remarque : Remplacez my-asg par le nom de votre groupe Auto Scaling.
Exécutez ensuite la commande put-cluster-capacity-providers suivante pour activer la protection de la résiliation gérée afin de vous assurer qu'Amazon ECS conserve les instances dont les tâches sont en cours d'exécution :
aws ecs put-cluster-capacity-providers \
--cluster my-cluster \
--capacity-providers my-capacity-provider \
--enable-managed-scaling \
--managed-termination-protection ENABLED
Remarque : Remplacez my-cluster par le nom de votre cluster et my-capacity-provider par le nom de votre fournisseur de capacité.
Configurer Amazon ECS pour vider progressivement les tâches lors de la suppression d’une instance
Il est recommandé de vider progressivement les tâches lorsque vous les supprimez d'une instance. Utilisez le drainage d'instance géré pour permettre à Amazon ECS de replanifier vos tâches sur d'autres instances avant la résiliation.
Pour activer le drainage d’instance géré, exécutez la commande update-capacity-provider suivante :
aws ecs update-capacity-provider \
--name my-cp \
--auto-scaling-group-provider '{
"managedDraining": "ENABLED"
}
Remarque : Remplacez my-cp par le nom de votre fournisseur de capacité.
Amazon ECS déplace les tâches de l'instance vers d'autres instances dans la mesure où la capacité le permet. Amazon ECS accorde toutefois un maximum de 48 heures pour vider les instances. S'il reste des tâches sur l'instance après cette période, Amazon ECS met fin à l'instance et arrête les tâches restantes.
Conserver une tâche critique spécifique
Utilisez la protection de tâche pour vous assurer que les actions de mise à l’échelle ou de déploiement d'Amazon ECS n'interrompent pas les tâches critiques.
Important : Même lorsque vous activez la protection de tâche, Amazon ECS peut toujours mettre fin à l'instance sous-jacente. La protection de tâche protège uniquement les tâches contre leur arrêt.
Pour activer la protection de tâche, exécutez la commande update-task-protection suivante :
aws ecs update-task-protection \
--cluster my-cluster \
--tasks my-task-id \
--protection-enabled
Remarque : Remplacez my-cluster par le nom de votre cluster et my-task-id par votre ID de tâche. Par défaut, la protection dure 2 heures. Pour modifier cette durée, utilisez l'option --expires-in-minutes.
Pour vérifier le statut de la protection de tâche dans votre cluster, exécutez la commande get-task-protection suivante :
aws ecs get-task-protection \
--cluster my-cluster \
--tasks my-task-id
Remarque : Remplacez my-cluster par le nom de votre cluster et my-task-id par votre ID de tâche.
Résoudre d'autres problèmes
Si vous activez la protection pour votre groupe Auto Scaling, votre fournisseur de capacité et vos tâches et que vous rencontrez toujours des problèmes, prenez les mesures suivantes :
Informations connexes
Protéger vos tâches Amazon ECS contre la résiliation due à des événements de mise à l'échelle horizontale descendante
GetTaskProtection
UpdateTaskProtection
Exemples de protection de tâche Amazon Elastic Container Service (Amazon ECS) sur le site Web de GitHub