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 à des 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 ou de terminer correctement les tâches qui lui sont assignées. Ces fonctionnalités donnent à votre application le temps de terminer le travail en cours, de transférer l'état ou d'effectuer un nettoyage avant la fin 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 dynamiques, où chaque instance de votre flotte contient des données, des tâches ou un état différents de ceux des autres instances. La fermeture d'instances dynamiques 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 une interruption des transactions ou des calculs en cours. Pour arrêter correctement une instance dynamique, sa charge de travail doit être soit épuisée (achèvement de toutes les tâches actuellement assigné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 du cycle de vie de résiliation 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 résiliation peut être suffisant pour arrêter correctement une application sur une instance sélectionnée pour être résiliée. Il s'agit d'une approche basée sur le meilleur effort qui ne peut pas être utilisée pour empêcher la résiliation si une action du cycle de vie de la résiliation est abandonnée. Si votre charge de travail tolère peu les échecs liés au cycle de vie de résiliation, configurez des politiques de cycle de vie des instances en combinaison avec vos crochets de cycle de vie de résiliation pour conserver les instances.
Pour utiliser un hook du 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érez 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, AWS Lambda ou pour capturer ces événements, et invoquer une réponse, par exemple avec 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'expiration 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 d'expiration à l'aide d'appels RecordLifecycleActionHeartbeatd'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 intégrée des instances pour contrôler quelles instances sont sélectionnées pour être arrêtées lors d'événements de montée en charge, en particulier pour empêcher l'arrêt d'une instance qui traite activement un travail 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 est résiliable. 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 SetInstanceProtectionet d'éviter les problèmes de limitation des API.
Pour de plus amples informations, veuillez consulter Utiliser la protection évolutive de l'instance pour contrôler la fermeture de l'instance.
Politique de résiliation personnalisée
À l'instar de 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 auxquelles il met fin en premier. Si vous souhaitez mieux contrôler quelles instances se terminent en premier, vous pouvez implémenter une politique de résiliation personnalisée à l'aide d'une fonction Lambda. Auto Scaling appelle cette fonction chaque fois qu'elle doit sélectionner une instance à arrêter et ne met fin qu'aux instances renvoyées par la fonction. Si la fonction émet une erreur, expire ou renvoie une liste vide, Auto Scaling ne met fin à aucune instance sauf si l'instance est défectueuse.
Une politique de résiliation personnalisée est utile lorsque votre application peut identifier les instances inactives ou susceptibles d'être mises hors service en toute sécurité. Cela nécessite généralement un plan de contrôle qui suit la charge de travail au sein 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 seuls crochets relatifs au cycle de vie, 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 progressives ne se terminent pas correctement.
Lorsque Auto Scaling sélectionne une instance à arrêter, les hooks du 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 se terminent correctement avecCONTINUE, 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 le calcul de la capacité souhaitée par votre groupe Auto Scaling. Les instances de remplacement sont donc lancées automatiquement. Vous devrez payer les frais standard d'Amazon EC2 pour l'instance conservée et son remplacement jusqu'à ce que vous mettiez manuellement fin à l'instance conservée à l'aide TerminateInstanceInAutoScalingGroupde l'API.
Pour utiliser cette fonctionnalité, vous devez configurer à la fois une politique de cycle de vie d'instance avec le déclencheur de TerminateHookAbandon rétention défini surretain, ainsi qu'au moins un hook de cycle de vie de résiliation. É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 des alarmes GroupTerminatingRetainedInstances et créer des CloudWatch alarmes pour vous avertir lorsque les instances entrent dans un état conservé.
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'instances EC2 au sein de votre groupe Amazon EC2 Auto Scaling, Terminate suspendez le processus. 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 SuspendProcessespour 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 adressée à 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 afin de gérer facilement les résiliations d'instances, gardez à l'esprit les limites suivantes.
Les instances malsaines 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 d'instances défectueuses par Auto Scaling est de suspendre le HealthCheck Terminate processus ou. ReplaceUnhealthy 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 les données que vous devez récupérer avant que l'instance défectueuse ne soit résiliée.
| Fonctionnalité | Contrôle les instances saines | Contrôle les instances malsaines |
|---|---|---|
| Politiques de résiliation personnalisées | ||
| Protection contre la réduction horizontale | ||
ReplaceUnhealthySuspendre HealthCheck ou Terminate traiter |
||
| Hooks de cycle de vie | ||
| Politique de cycle de vie des instances |
Les crochets liés au cycle de vie ne garantissent pas à eux seuls un arrêt progressif
Par défaut, les hooks du cycle de vie des résiliations fonctionnent au mieux. Si une action de résiliation du cycle de vie est abandonnée, Amazon EC2 Auto Scaling met immédiatement fin à l'instance. Vous pouvez combiner les hooks du cycle de vie de résiliation avec une politique de cycle de vie des instances afin de conserver les instances lorsque les actions du cycle de vie de résiliation sont abandonnées. Avec cette combinaison :
-
Vos hooks du cycle de vie de résiliation tentent de fermer correctement votre application une fois qu'Auto Scaling a déclenché la fermeture d'une instance et que le vidage 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 quelque raison que ce soit, l'instance passe à un état conservé au lieu d'être interrompue.
-
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 du marché des instances peuvent être interrompues avec un préavis limité
Si vous utilisez les options du marché des instances telles que les instances Spot 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 d'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 progressives. Bien que vous puissiez utiliser des hooks du cycle de vie de résiliation pour répondre aux interruptions d'une instance Spot, 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 relatives au 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 bonnes pratiques pour Amazon EC2 Spot dans le guide de l'utilisateur Amazon EC2.
Les résiliations directes d'Amazon EC2 contournent toutes les protections
Si vous mettez fin à une instance de votre groupe Auto Scaling directement avec l' TerminateInstancesAPI Amazon EC2, la résiliation contourne tous les mécanismes de protection d'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 résiliations d'instances, plus vous souhaiterez peut-être conserver le contrôle. Les exemples suivants décrivent des charges de travail avec 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 à des instances plus rapidement que les données ne peuvent être répliquées à nouveau sur d'autres nœuds, et les résiliations 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 des instances sur toutes les instances de base de données ; supprimez-la par programmation uniquement après avoir confirmé que les données sont répliquées en toute sécurité ailleurs.
-
Configurez les hooks du cycle de vie de résiliation avec des délais d'expiration prolongés en combinaison avec une politique de cycle de vie des instances pour permettre le transfert des données.
-
Définissez une politique de maintenance des instances avec un pourcentage de santé minimum de 100 % pour maintenir la capacité requise.
Exemple 2 : traitement de tâches de longue durée (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 lance une tâche dont le traitement prend 3 heures. Au fur et à mesure que la file d'attente augmente, Auto Scaling ajoute des instances en fonction de vos politiques de dimensionnement. Au fur et à mesure que la file d'attente diminue, 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 plutôt qu'une instance inactive. La tâche peut être redémarrée sur une autre instance, mais vous perdez une progression significative.
Tenez compte des configurations suivantes :
-
Configurez une politique de résiliation personnalisée qui donne la priorité à la résiliation des instances inactives en premier.
-
Utilisez les crochets du cycle de vie de résiliation pour permettre aux tâches en cours de terminer.
-
Activez la protection évolutive des instances 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 de montée en puissance, mais comme les tests peuvent être retenté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 des résiliations 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.