Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Concevez vos applications pour gérer avec élégance la résiliation des instances
Cette rubrique décrit les fonctionnalités que vous pouvez utiliser pour empêcher votre groupe Amazon EC2 Auto Scaling de mettre fin aux instances Amazon EC2 qui ne sont pas encore prêtes à être résiliées. Par défaut, Auto Scaling n'a aucune visibilité sur les applications exécutées sur vos instances. Il peut mettre fin à des instances avant que votre application ne soit en mesure de s'arrêter correctement ou de terminer les tâches qui lui ont été assignées. Ces fonctionnalités donnent à votre application le temps de terminer les travaux en cours, de transférer l'état ou d'effectuer un nettoyage avant la fermeture de l'instance. Vous pouvez les utiliser individuellement ou en combinaison selon les exigences de votre application.
Ces fonctionnalités sont particulièrement utiles pour les charges de travail avec état, où chaque instance de votre parc contient des données, des tâches ou un état différents des autres instances. L'arrêt des instances avec état sans arrêt progressif peut entraîner le redémarrage des tâches de longue durée depuis le début, une réduction de la redondance ou de la perte de données et l'interruption des transactions ou des calculs en cours. Pour arrêter correctement une instance avec état, sa charge de travail doit être soit épuisée (achèvement de toutes les tâches actuellement attribuées) soit transférée (déplacement des tâches, des données ou de la configuration vers une autre instance active).
Table des matières
Hooks de cycle de vie de résiliation
Un hook de cycle de terminaison prolonge la durée de vie de votre instance Amazon EC2 déjà sélectionnée pour la résiliation. Cela permet de disposer de plus de temps pour terminer le travail en cours actuellement attribué à l'instance, ou pour enregistrer l'avancement et transférer le travail vers une autre instance.
Pour de nombreuses charges de travail, un hook du cycle de vie de terminaison peut suffire à arrêter correctement une application sur une instance sélectionnée pour la résiliation. Il s'agit d'une approche optimale qui ne peut pas être utilisée pour empêcher la résiliation si une action du cycle de vie de résiliation est abandonnée. Si votre charge de travail présente une faible tolérance aux échecs liés aux actions liées au cycle de vie de terminaison, configurez les politiques de cycle de vie des instances en combinaison avec vos hooks de cycle de terminaison afin de conserver les instances.
Pour utiliser un hook de cycle de vie de terminaison, vous devez savoir quand une instance est sélectionnée pour être résiliée. Vous pouvez le savoir de deux manières :
| Option | Description | Utiliser en priorité pour | Lien vers la documentation |
|---|---|---|---|
| À l’intérieur de l’instance | Le service de métadonnées d’instance (IMDS) est un point de terminaison sécurisé dans lequel vous pouvez interroger le statut d’une instance directement depuis celle-ci. Si les métadonnées sont renvoyées avec Terminated, il est prévu de mettre fin à votre instance. |
Applications dans lesquelles vous devez effectuer une action sur l’instance avant qu’elle ne soit résiliée. | Récupérer l'état du cycle de vie cible |
| En dehors de l’instance | Lorsqu’une instance est résiliée, une notification d’événement est générée. Vous pouvez créer des règles à l'aide d'Amazon EventBridge, Amazon SQS, Amazon SNS ou AWS Lambda pour capturer ces événements, et invoquer une réponse, par exemple à l'aide d'une fonction Lambda. | Applications qui doivent agir en dehors de l’instance. | Configuration d'une cible de notification |
Pour utiliser un hook de cycle de vie, vous devez aussi savoir quand une instance est prête à être entièrement résiliée. Amazon EC2 Auto Scaling ne mettra pas fin à l'instance tant qu'elle n'aura pas reçu un appel d' CompleteLifecycleActionAPI ou que le délai d'attente n'aura pas expiré, selon la première éventualité.
Par défaut, une instance peut continuer à fonctionner pendant une heure (délai d’attente des pulsations) en raison d’un hook de cycle de vie. Vous pouvez configurer le délai d’expiration par défaut si une heure n’est pas suffisante pour terminer l’action du cycle de vie. Lorsqu'une action du cycle de vie est en cours, vous pouvez prolonger le délai à l'aide d'appels RecordLifecycleActionHeartbeat d'API.
Pour de plus amples informations, veuillez consulter Hooks de cycle de vie Amazon EC2 Auto Scaling.
Protection contre la mise à l’échelle horizontale d’instance
Vous pouvez utiliser la protection évolutive des instances pour contrôler quelles instances sont sélectionnées pour être résiliées lors d'événements de scale-in, en particulier pour empêcher la résiliation d'une instance qui traite activement une tâche de longue durée. Par exemple, lors de l'exécution de charges de travail conteneurisées, il est courant de vouloir protéger toutes les instances et de supprimer la protection uniquement pour les instances sans tâches en cours ou planifiées. Les instances peuvent continuer à rechercher de nouvelles tâches et réactiver la protection lorsque de nouvelles tâches sont attribuées.
Vous pouvez activer la protection évolutive au niveau du groupe Auto Scaling et au niveau de l'instance. Lorsque vous activez la protection évolutive au niveau du groupe Auto Scaling, seules les nouvelles instances sont protégées lors de leur création. Pour les instances existantes, vous pouvez activer la protection individuellement.
Les applications peuvent définir la protection soit à partir des instances elles-mêmes, soit à partir d'un plan de contrôle centralisé qui gère si chaque instance peut être résiliée. Nous recommandons l'approche centralisée pour les grandes flottes ou lorsque la protection doit être fréquemment modifiée, car elle vous permet d'effectuer des appels par lots SetInstanceProtection et d'éviter les problèmes de limitation des API.
Pour de plus amples informations, veuillez consulter Utilisez la protection évolutive des instances pour contrôler la résiliation des instances.
Politique de résiliation personnalisée
Tout comme la protection évolutive des instances, une politique de résiliation personnalisée vous aide à empêcher votre groupe Amazon EC2 Auto Scaling de mettre fin à des instances EC2 spécifiques. Les instances défectueuses peuvent toujours être résiliées, quelle que soit votre politique de résiliation personnalisée.
Votre groupe Auto Scaling utilise une politique de résiliation par défaut pour déterminer les instances Amazon EC2 qu'il met fin en premier. Si vous souhaitez mieux contrôler les instances qui se terminent en premier, vous pouvez implémenter une politique de terminaison personnalisée à l'aide d'une fonction Lambda. Auto Scaling appelle cette fonction chaque fois qu'il doit sélectionner une instance à arrêter et ne met fin qu'aux instances renvoyées par la fonction. Si la fonction commet une erreur, expire ou renvoie une liste vide, Auto Scaling ne met fin à aucune instance à moins que celle-ci ne soit défectueuse.
Une politique de résiliation personnalisée est utile lorsque votre application peut identifier les instances inactives ou celles qui peuvent être fermées en toute sécurité. Cela nécessite généralement un plan de contrôle qui suit la charge de travail dans l'ensemble du groupe.
Pour de plus amples informations, veuillez consulter Créer une politique de résiliation personnalisée avec Lambda.
Politique de cycle de vie des instances
Les politiques de cycle de vie des instances fournissent une protection contre les interruptions d'Amazon EC2 Auto Scaling lorsqu'une action du cycle de vie de résiliation est abandonnée. Contrairement aux hooks de cycle de vie seuls, les politiques de cycle de vie des instances sont conçues pour garantir que les instances passent à un état conservé lorsque les procédures d'arrêt progressif ne se terminent pas correctement.
Lorsque Auto Scaling sélectionne une instance à arrêter, les hooks de cycle de vie de terminaison que vous avez configurés sont invoqués et votre application entame des procédures d'arrêt progressives. Si les actions du cycle de vie de terminaison sont menées à bienCONTINUE, l'instance s'arrête normalement. Toutefois, si une action du cycle de vie de résiliation est abandonnée pour une raison quelconque, la politique de cycle de vie de l'instance déplace l'instance vers un état conservé au lieu de l'arrêter. Les instances conservées ne sont pas prises en compte dans la capacité souhaitée de votre groupe Auto Scaling. Les instances de remplacement sont donc lancées automatiquement. Vous devrez payer les frais Amazon EC2 standard pour l'instance conservée et son remplacement jusqu'à ce que vous résiliez manuellement l'instance conservée à l'aide de l' TerminateInstanceInAutoScalingGroupAPI.
Pour utiliser cette fonctionnalité, vous devez configurer à la fois une politique de cycle de vie de l'instance avec le déclencheur de TerminateHookAbandon rétention défini surretain, ainsi qu'au moins un hook de terminaison du cycle de vie. Étant donné que les instances conservées entraînent des coûts permanents liés à Amazon EC2 et nécessitent une action manuelle, la surveillance est essentielle. Vous devez activer CloudWatch des métriques telles que GroupTerminatingRetainedInstances et créer des CloudWatch alarmes pour vous avertir lorsque des instances entrent dans des états conservés.
Pour de plus amples informations, veuillez consulter Contrôlez la rétention des instances grâce aux politiques de cycle de vie des instances.
Suspendre complètement les licenciements
Si vous avez besoin d'un contrôle total sur toutes les terminaisons d'instance EC2 au sein de votre groupe Amazon EC2 Auto Scaling, suspendez le processus. Terminate Nous vous recommandons d'utiliser cette option uniquement si les options ci-dessus ne vous offrent pas le contrôle dont vous avez besoin pour votre service. En appelant SuspendProcesses pour suspendre le Terminate processus, vous empêchez Auto Scaling de tenter d'y mettre fin pour quelque raison que ce soit, à l'exception de celles initiées par une demande utilisateur à l' TerminateInstanceInAutoScalingGroupAPI.
Pour de plus amples informations, veuillez consulter Suspendre et reprendre les processus Amazon EC2 Auto Scaling.
Limitations
Important
Lorsque vous concevez votre application sur Amazon EC2 Auto Scaling pour gérer correctement les terminaisons d'instance, tenez compte des limites suivantes.
Les instances défectueuses contournent certaines protections
Si une instance est défectueuse, Amazon EC2 Auto Scaling commencera à y mettre fin, même si vous avez mis en place des politiques de résiliation personnalisées ou une protection évolutive. Le seul moyen d'empêcher le remplacement des instances défectueuses par Auto Scaling est de suspendre le Terminate processus HealthCheckReplaceUnhealthy, ou. Vous pouvez utiliser des hooks de cycle de vie et une politique de cycle de vie des instances pour permettre à l'application de s'arrêter correctement ou de copier toutes les données dont vous avez besoin pour les restaurer avant la fermeture de l'instance défectueuse.
| Fonctionnalité | Contrôle les instances saines | Contrôle les instances défectueuses |
|---|---|---|
| Politiques de résiliation personnalisées | ||
| Scale-in protection | ||
ReplaceUnhealthySuspendre HealthCheck ou Terminate traiter |
||
| Hooks de cycle de vie | ||
| Politique de cycle de vie des instances |
Les hooks Lifecycle à eux seuls ne garantissent pas un arrêt progressif
Par défaut, les hooks du cycle de vie de terminaison fonctionnent dans la mesure du possible. Si une action du cycle de vie de résiliation est abandonnée, Amazon EC2 Auto Scaling met immédiatement fin à l'instance. Vous pouvez combiner les hooks du cycle de terminaison avec une politique de cycle de vie des instances afin de conserver les instances lorsque les actions du cycle de terminaison sont abandonnées. Avec cette combinaison :
-
Vos hooks du cycle de vie de terminaison tentent de fermer progressivement votre application une fois qu'Auto Scaling a déclenché la fermeture d'une instance et que le drainage de tous les équilibreurs de charge Elastic Load Balancing configurés est terminé.
-
Si une action du cycle de vie de résiliation est abandonnée pour une raison quelconque, l'instance passe à un état conservé au lieu d'être résiliée.
-
L'instance conservée reste dans son état Amazon EC2 actuel, ce qui vous permet de terminer manuellement vos procédures d'arrêt ou d'enquêter sur la panne.
-
Vous pouvez mettre fin manuellement aux instances conservées en appelant l' TerminateInstanceInAutoScalingGroupAPI après avoir effectué les actions nécessaires.
Pour de plus amples informations, veuillez consulter Contrôlez la rétention des instances grâce aux politiques de cycle de vie des instances.
Certaines options de marché peuvent être interrompues avec un préavis limité.
Si vous utilisez des options de marché d'instances telles que les instances ponctuelles et les réservations de capacité interruptible dans votre groupe Auto Scaling, Amazon EC2 peut interrompre et récupérer vos instances à tout moment. Ces interruptions contournent tous les mécanismes de protection Amazon EC2 Auto Scaling, notamment :
-
Hooks de cycle de vie de résiliation
-
Protection contre la mise à l’échelle horizontale d’instance
-
Politiques de résiliation personnalisées
-
Règles de cycle de vie des instances
-
Procédés suspendus
Lorsqu'une instance Spot reçoit un avis d'interruption, vous disposez d'environ deux minutes pour effectuer des tâches d'arrêt progressif. Vous pouvez utiliser des hooks de terminaison du cycle de vie pour répondre aux interruptions de l'instance Spot, mais l'instance sera résiliée de force à la fin de la fenêtre de deux minutes, même si le hook du cycle de vie est toujours en cours. Les politiques de cycle de vie des instances ne peuvent pas non plus empêcher les interruptions des instances Spot.
Pour plus d'informations sur la gestion des interruptions des instances Spot, consultez la section Interruptions des instances Spot et meilleures pratiques pour Amazon EC2 Spot dans le guide de l'utilisateur Amazon EC2.
Les terminaisons directes d'Amazon EC2 contournent toutes les protections
Si vous résiliez une instance de votre groupe Auto Scaling directement TerminateInstances via l'API Amazon EC2, la résiliation contourne tous les mécanismes de protection Amazon EC2 Auto Scaling.
Pour mettre fin aux instances de votre groupe Auto Scaling tout en respectant les protections que vous avez configurées, utilisez plutôt l' TerminateInstanceInAutoScalingGroupAPI.
Exemples de scénarios
Lorsque vous utilisez Amazon EC2 Auto Scaling, vous pouvez choisir le niveau de gestion de flotte qu'Auto Scaling gère en votre nom par rapport au niveau de contrôle direct que vous conservez sur les décisions de résiliation des instances EC2. Plus votre charge de travail est sensible aux terminaisons d'instances, plus vous souhaiterez peut-être conserver le contrôle. Les exemples suivants décrivent les charges de travail présentant différents niveaux de tolérance et les configurations recommandées :
Exemple 1 : nœuds de base de données distribués (faible tolérance)
Vous exécutez une base de données distribuée dans laquelle chaque instance EC2 contient une partition de vos données avec un facteur de réplication de 3. La perte de plusieurs instances contenant des répliques de la même partition peut entraîner une perte de données ou rendre cette partition indisponible.
Défi : Auto Scaling peut mettre fin aux instances plus rapidement que les données ne peuvent être répliquées vers d'autres nœuds, et les terminaisons peuvent réduire votre capacité en deçà de ce qui est nécessaire pour maintenir votre facteur de réplication.
Tenez compte des configurations suivantes :
-
Activez la protection évolutive sur toutes les instances de base de données ; supprimez-la par programmation uniquement après avoir vérifié que les données sont répliquées en toute sécurité ailleurs.
-
Configurez les hooks du cycle de vie de terminaison avec des délais d'expiration prolongés en combinaison avec une politique de cycle de vie des instances pour permettre la fin du transfert des données.
-
Définissez une politique de maintenance des instances avec un pourcentage sain minimum de 100 % pour maintenir la capacité requise.
Exemple 2 : traitement des Long-running tâches (tolérance moyenne)
Vous disposez d'une file d'attente Amazon SQS qui collecte les messages entrants pour les tâches de longue durée. Lorsqu'un nouveau message arrive, une instance EC2 le récupère et démarre une tâche dont le traitement prend 3 heures. À mesure que la file d'attente augmente, Auto Scaling ajoute des instances en fonction de vos politiques de dimensionnement. À mesure que la file d'attente se réduit, Auto Scaling met fin aux instances.
Défi : Auto Scaling peut mettre fin à une instance après 3 heures de traitement d'une tâche au lieu d'une instance inactive. La tâche peut être redémarrée sur une autre instance, mais vous perdez une partie de votre progression.
Tenez compte des configurations suivantes :
-
Configurez une politique de résiliation personnalisée qui donne la priorité à la résiliation des instances inactives.
-
Utilisez des crochets de fin de cycle de vie pour permettre aux tâches en cours de se terminer.
-
Activez la protection évolutive de l'instance par programmation lorsqu'une instance démarre une tâche, et supprimez-la une fois la tâche terminée.
Exemple 3 : parc de travailleurs pour les environnements de test (tolérance élevée)
Vous gérez un parc d'instances EC2 qui exécutent des tests automatisés, des tâches de CI/CD pipeline ou des charges de travail de développement. Ces instances de travail extraient les tâches d'une file d'attente et les résultats des tests peuvent être régénérés en cas d'échec d'une tâche.
Défi : les tâches de test peuvent être interrompues lors d'événements d'évolutivité, mais comme les tests peuvent être réessayés sans impact, vous souhaitez optimiser les coûts et la simplicité plutôt que la disponibilité sans interruption.
Tenez compte des configurations suivantes :
-
Utilisez les crochets du cycle de vie de terminaison pour permettre aux demandes en cours de traitement.
-
Envisagez d'utiliser des instances Spot avec une stratégie d'allocation optimisée en termes de capacité afin de réduire davantage les coûts.