Concevez vos applications pour gérer avec élégance la résiliation des instances - Amazon EC2 Auto Scaling

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 Auto Scaling de mettre fin à des instances qui ne sont pas encore prêtes à être mises hors service ou de mettre fin à des instances trop rapidement pour qu'ils puissent terminer les tâches qui leur sont assignées. Vous pouvez utiliser ces trois fonctionnalités en combinaison ou séparément pour concevoir vos applications de manière à gérer efficacement la terminaison d'instance.

Supposons, par exemple, que vous disposiez d'une SQS file d'attente Amazon qui collecte les messages entrants pour des tâches de longue durée. Lorsqu’un nouveau message arrive, une instance du groupe Auto Scaling récupère le message et commence à le traiter. Le traitement de chaque message prend 3 heures. À mesure que le nombre de messages augmente, de nouvelles instances sont automatiquement ajoutées au groupe Auto Scaling. À mesure que le nombre de messages diminue, les instances existantes sont automatiquement supprimées. Dans ce cas, Amazon EC2 Auto Scaling doit décider de l'instance à mettre hors service. Par défaut, il est possible qu'Amazon EC2 Auto Scaling mette fin à une instance après 2,9 heures de traitement d'une tâche de 3 heures, plutôt qu'une instance actuellement inactive. Pour éviter les problèmes liés à des interruptions inattendues lors de l'utilisation d'Amazon EC2 Auto Scaling, vous devez concevoir votre application de manière à répondre à ce scénario.

Important

Lorsque vous concevez vos applications sur Amazon EC2 Auto Scaling afin de gérer facilement la résiliation des instances, gardez ces points à l'esprit.

  • Si une instance est défectueuse, Amazon EC2 Auto Scaling la remplacera quelle que soit la fonctionnalité que vous utilisez (sauf si vous suspendez le ReplaceUnhealthy processus). Vous pouvez utiliser un hook de cycle de vie pour permettre à l’application de s’arrêter de manière optimale ou pour copier les données que vous devez récupérer avant de résilier l’instance.

  • Il n’est pas garanti qu’un hook de cycle de vie de résiliation s’exécute ou se termine avant la résiliation d’une instance. En cas d'échec, Amazon EC2 Auto Scaling met tout de même fin à l'instance.

Protection contre la mise à l’échelle horizontale d’instance

Vous pouvez utiliser la protection contre la mise à l’échelle horizontale des instances dans de nombreuses situations où la résiliation d’instances est une action critique qui doit être refusée par défaut et autorisée de manière explicite uniquement pour des instances spécifiques. 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. Des services tels qu'Amazon ECS ont intégré à leurs produits des intégrations avec protection évolutive des instances.

Vous pouvez activer la protection contre la mise à l’échelle horizontale dans le groupe Auto Scaling pour appliquer la protection contre la mise à l’échelle horizontale aux instances lors de leur création et l’activer pour les instances existantes. Lorsqu’une instance n’a plus de travail à effectuer, elle peut désactiver la protection. L’instance peut continuer à rechercher de nouvelles tâches et réactiver la protection lorsque de nouvelles tâches sont attribuées.

Les applications peuvent définir la protection soit à partir d’un plan de contrôle centralisé qui détermine si une instance est résiliable ou non, soit à partir des instances elles-mêmes. Toutefois, une flotte importante peut rencontrer des problèmes de limitation si un grand nombre d’instances activent continuellement leur protection contre la mise à l’échelle horizontale.

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 contre la mise à l’échelle horizontale d’instance, une politique de résiliation personnalisée vous aide à empêcher votre groupe Auto Scaling de résilier des instances spécifiques.

Par défaut, votre groupe Auto Scaling utilise une politique de résiliation par défaut pour déterminer quelles instances il résilie en premier. Si vous souhaitez mieux contrôler quelles instances sont résiliées en premier, vous pouvez implémenter votre propre politique de résiliation personnalisée à l’aide d’une fonction Lambda. Amazon EC2 Auto Scaling appelle la fonction chaque fois qu'elle doit décider de l'instance à arrêter. Cela ne met fin qu’à une instance renvoyée par la fonction. Si la fonction est erronée, expire ou produit une liste vide, Amazon EC2 Auto Scaling ne met pas fin aux instances.

Une politique de résiliation personnalisée est utile si l’on sait qu’une instance est suffisamment redondante ou sous-utilisée pour pouvoir être résiliée. Pour ce faire, vous devez mettre en œuvre votre application avec un plan de contrôle qui surveille la charge de travail au sein du groupe. Ainsi, si une instance traite encore des tâches, la fonction Lambda sait qu’il ne faut pas l’inclure.

Pour de plus amples informations, veuillez consulter Créer une politique de résiliation personnalisée avec Lambda.

Hooks de cycle de vie de résiliation

Un hook de cycle de vie de résiliation prolonge la durée de vie d’une instance déjà sélectionnée pour être résiliée. Cela permet de disposer de plus de temps pour traiter tous les messages ou demandes actuellement affectés à l’instance, ou pour enregistrer la progression et transférer le travail vers une autre instance.

Pour de nombreuses charges de travail, un hook de cycle de vie peut être suffisant pour arrêter de manière optimale 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 en cas de panne.

Pour utiliser un hook de cycle de vie, 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 demander le statut d'une instance directement à partir de 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 EventBridgeSQS, Amazon ou Amazon SNS pour capturer ces événements et appeler une réponse, par exemple avec une fonction Lambda. Applications qui doivent agir en dehors de l’instance. Configurer 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 demandera pas EC2 à Amazon de mettre fin à l'instance tant qu'elle n'aura pas reçu un CompleteLifecycleActionappel ou que le délai expirera, 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 réellement en cours, vous pouvez prolonger le délai d'expiration par des RecordLifecycleActionHeartbeatAPIappels.

Pour de plus amples informations, veuillez consulter Hooks de cycle de vie Amazon EC2 Auto Scaling.