View a markdown version of this page

Didacticiel : configurer un hook de cycle de vie qui appelle une fonction Lambda - 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.

Didacticiel : configurer un hook de cycle de vie qui appelle une fonction Lambda

Dans cet exercice, vous allez créer un Amazon EventBridge règle qui inclut un modèle de filtre qui, lorsqu'il est mis en correspondance, invoque un AWS Lambda fonctionne comme cible de la règle. Nous fournissons le modèle de filtre et l'exemple de code de fonction à utiliser.

Si tout est correctement configuré, à la fin de ce didacticiel, la fonction Lambda exécutera une action personnalisée lors du lancement des instances. L'action personnalisée enregistre simplement l'événement dans le CloudWatch Enregistre le flux de journaux associé à la fonction Lambda.

La fonction Lambda procède également à un rappel pour laisser le cycle de vie de l'instance se poursuivre si cette action est réussie, mais laisse l'instance abandonner le lancement et se résilier si l'action échoue.

L'illustration suivante résume le flux d'un événement de scale-out lorsque vous utilisez une fonction Lambda pour effectuer une action personnalisée. Après le lancement d'une instance, son cycle de vie est suspendu jusqu'à ce que le hook du cycle de vie soit terminé, soit en cas d'expiration du délai, soit parce qu'Amazon EC2 Auto Scaling reçoit un signal lui demandant de continuer.

Le flux d'un événement de scale-out lorsque vous utilisez une fonction Lambda pour effectuer une action personnalisée.
Note

Selon votre cas d'utilisation, vous pouvez configurer un hook de cycle de vie en suivant les étapes ci-dessous et en créant un EventBridge règle. Vous pouvez également utiliser une fonction Lambda pour configurer directement un hook de cycle de vie sans créer de EventBridge règle.

Conditions préalables

Avant d'entamer ce didacticiel, si vous n'avez pas de groupe Auto Scaling, créez-en un. Pour créer un groupe Auto Scaling, ouvrez la page Groupes Auto Scaling de la console Amazon EC2 et choisissez Créer un groupe Auto Scaling.

Étape 1 : Créer un rôle IAM doté des autorisations nécessaires pour utiliser des actions de cycle de vie

Avant de créer une fonction Lambda, vous devez créer un rôle d'exécution et une politique d'autorisations pour permettre à Lambda d'utiliser des hooks de cycle de vie.

Pour créer la politique
  1. Ouvrez la page Policies (Politiques) de la console IAM et sélectionnez Create policy (Créer une politique).

  2. Choisissez l’onglet JSON.

  3. Dans le Document de politique , collez le document de politique suivant dans la zone, en remplaçant le texte italics avec votre numéro de compte et le nom de votre groupe Auto Scaling.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/my-asg" } ] }
  4. Choisissez Suivant.

  5. Pour Policy name (Nom de la politique), saisissez LogAutoScalingEvent-policy. Sélectionnez Create policy (Créer une politique).

Lorsque vous avez créé la politique, vous pouvez créer un rôle qui l'utilise.

Pour créer le rôle
  1. Dans le panneau de navigation de gauche, sélectionnez Roles (Rôles).

  2. Sélectionnez Create role (Créer un rôle).

  3. Pour Select trusted entity (Sélectionner une entité de confiance), choisissez service AWS .

  4. Pour votre cas d'utilisation, sélectionnez Lambda, puis Next (Suivant).

  5. En dessous Ajouter des autorisations, choisissez la politique que vous avez créée (LogAutoScalingEvent-policy) et la politique nommée AWSLambdaBasicExecutionRole. Ensuite, choisissez Suivant.

    Note

    Le AWSLambdaBasicExecutionRole la politique possède les autorisations dont la fonction a besoin pour écrire des journaux CloudWatch Journaux.

  6. Sur la page Name, review, and create (Nommer, vérifier et créer), pour Role name (Nom du rôle), saisissez LogAutoScalingEvent-role, puis choisissez Create role (Créer un rôle).

Étape 2 : créer une fonction Lambda

Créez une fonction Lambda qui servira de cible pour les événements. L'exemple de fonction Lambda, écrit en Node.js, est invoqué par EventBridge lorsqu'un événement correspondant est émis par Amazon EC2 Auto Scaling.

Pour créer une fonction Lambda
  1. Ouvrez la page Functions (Fonctions) sur la console Lambda.

  2. Sélectionnez Create function (Créer une fonction), puis Author from scratch (Créer à partir de zéro).

  3. Sous Basic information (Informations de base), pour Function name (Nom de la fonction), entrez LogAutoScalingEvent.

  4. Pour Durée d'exécution, choisissez Node.js 18x.

  5. Faites défiler l’écran vers le bas et choisissez Modifier le rôle d’exécution par défaut, puis dans le champ Rôle d’exécution, choisissez Utiliser un rôle existant.

  6. Pour Rôle existant, choisissez LogAutoScalingEvent-role.

  7. Laissez les autres valeurs par défaut.

  8. Sélectionnez Create function (Créer une fonction). Vous retournez au code et à la configuration de la fonction.

  9. Vérifiez que votre fonction LogAutoScalingEvent est toujours ouverte dans la console, puis sous Code source, dans l’éditeur, copiez l’exemple de code suivant dans le fichier index.mjs.

    import { AutoScalingClient, CompleteLifecycleActionCommand } from "@aws-sdk/client-auto-scaling"; export const handler = async(event) => { console.log('LogAutoScalingEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); var autoscaling = new AutoScalingClient({ region: event.region }); var eventDetail = event.detail; var params = { AutoScalingGroupName: eventDetail['AutoScalingGroupName'], /* required */ LifecycleActionResult: 'CONTINUE', /* required */ LifecycleHookName: eventDetail['LifecycleHookName'], /* required */ InstanceId: eventDetail['EC2InstanceId'], LifecycleActionToken: eventDetail['LifecycleActionToken'] }; var response; const command = new CompleteLifecycleActionCommand(params); try { var data = await autoscaling.send(command); console.log(data); // successful response response = { statusCode: 200, body: JSON.stringify('SUCCESS'), }; } catch (err) { console.log(err, err.stack); // an error occurred response = { statusCode: 500, body: JSON.stringify('ERROR'), }; } return response; };

    Ce code enregistre simplement l'événement afin qu'à la fin de ce didacticiel, vous puissiez voir un événement apparaître dans CloudWatch Enregistre le flux de journaux associé à cette fonction Lambda.

  10. Choisissez Déployer.

Étape 3 : Création d'un EventBridge règle

Créez un EventBridge règle pour exécuter votre fonction Lambda. Pour plus d'informations sur l'utilisation de EventBridge, consultez EventBridge À utiliser pour gérer les événements Auto Scaling.

Pour créer une règle avec la console
  1. Ouvrez la console EventBridge.

  2. Dans le panneau de navigation, choisissez Rules.

  3. Choisissez Créer une règle.

  4. Pour Define rule detail (Définir les détails de la règle), procédez comme suit :

    1. Pour Nom, saisissez LogAutoScalingEvent-rule.

    2. Pour Event bus (Bus d’événement), choisissez default (défaut). Quand un Service AWS si votre compte génère un événement, il est toujours redirigé vers le bus d'événements par défaut de votre compte.

    3. Pour Type de règle, choisissez Règle avec un modèle d’événement.

    4. Choisissez Suivant.

  5. Pour Build event pattern (Créer un modèle d’événement), procédez comme suit :

    1. Pour Source de l'événement, choisissez AWS événements ou EventBridge événements partenaires.

    2. Faites défiler vers le bas jusqu’à Modèle d’événements, puis procédez comme suit :

      1. Pour Event source (Source d’événement), choisissez Services AWS.

      2. Pour Service AWS, choisissez Auto Scaling.

      3. Dans Event type (Type d'événement), choisissez Instance Launch and Terminate (Lancement et résiliation d'une instance).

      4. Par défaut, la règle correspond à tout événement de mise à l'échelle horizontale ou de montée en puissance. Pour créer une règle qui vous avertit lorsqu'un événement de scale-out se produit et qu'une instance est mise en état d'attente en raison d'un hook de cycle de vie, choisissez Événement (s) d'instance spécifique et sélectionnez EC2 Instance-launch Action du cycle de vie.

      5. Par défaut, la règle correspond à tout groupe Auto Scaling de la région. Pour que la règle corresponde à un groupe Auto Scaling spécifique, choisissez Nom(s) de groupe spécifique(s), puis sélectionnez le groupe.

      6. Choisissez Suivant.

  6. Pour Select target(s) (Sélectionner la ou les cibles), procédez comme suit :

    1. Pour Target types (Types de cibles), choisissez Service AWS.

    2. Pour Select a target (Sélectionner une cible), choisissez Lambda Function (Fonction Lambda).

    3. Pour Fonction, choisissez LogAutoScalingEvent.

    4. Choisissez Next (Suivant) deux fois.

  7. Sur la page Vérifier et créer, choisissez Créer une règle.

Étape 4 : ajouter un hook de cycle de vie

Dans cette section, vous allez ajouter un hook de cycle de vie afin que Lambda exécute votre fonction sur les instances au lancement.

Ajouter un hook de cycle de vie
  1. Ouvrez la page des groupes Auto Scaling de la console Amazon EC2.

  2. Cochez la case située en regard de votre groupe Auto Scaling. Un volet fractionné s'ouvre en bas de la page.

  3. Dans le volet inférieur, sous l'onglet Gestion des instances, accédez à Hooks de cycle de vie et choisissez Créer un hook de cycle de vie.

  4. Pour définir un hook de cycle de vie pour la montée en puissance (lancement d’instances), procédez comme suit :

    1. Dans le champ Nom du hook de cycle de vie, saisissez LogAutoScalingEvent-hook.

    2. Dans le champ Transition du cycle de vie, choisissez Lancement d'instance.

    3. Dans Délai de pulsation, saisissez 300 pour définir le nombre de secondes d'attente d'un rappel de votre fonction Lambda.

    4. Dans le champ Résultat par défaut, choisissez ABANDONNER. Cela signifie que le groupe Auto Scaling résiliera une nouvelle instance si le hook expire sans recevoir de rappel de votre fonction Lambda.

    5. (Facultatif) Laissez le champ Métadonnées de notification vide. Les données d'événements que nous transmettons à EventBridge contient toutes les informations nécessaires pour appeler la fonction Lambda.

  5. Cliquez sur Créer.

Étape 5 : tester et vérifier l'événement

Pour tester l'événement, mettez à jour le groupe Auto Scaling en augmentant de 1 la capacité souhaitée du groupe Auto Scaling. Votre fonction Lambda est appelée quelques secondes après l'augmentation de la capacité souhaitée.

Pour augmenter la taille du groupe Auto Scaling
  1. Ouvrez la page des groupes Auto Scaling de la console Amazon EC2.

  2. Cochez la case située en regard de votre groupe Auto Scaling pour afficher les détails dans le volet inférieur tout en continuant à voir les premières lignes du volet supérieur.

  3. Dans le volet inférieur, sous l'onglet Détails, choisissez Détails du groupe puis Modifier.

  4. Pour Desired capacity (Capacité désirée), augmentez la valeur actuelle de 1.

  5. Choisissez Mettre à jour. Pendant le lancement de l'instance, la colonne Statut du volet supérieur affiche le statut Mise à jour de la capacité.

Après avoir augmenté la capacité souhaitée, vous pouvez vérifier que votre fonction Lambda a été appelée.

Pour afficher la sortie de votre fonction Lambda
  1. Ouvrez le Page des groupes de journaux de la CloudWatch console.

  2. Sélectionnez le nom du groupe de journaux pour votre fonction Lambda (/aws/lambda/LogAutoScalingEvent).

  3. Sélectionnez le nom du flux de journaux pour afficher les données fournies par la fonction pour l'action de cycle de vie.

Vous pouvez ensuite vérifier que votre instance a été lancée avec succès à partir de la description des activités de mise à l'échelle.

Pour afficher l'activité de mise à l'échelle
  1. Revenez à la page Groupes Auto Scaling et sélectionnez votre groupe.

  2. Dans l'onglet Activité, sous Historique de l'activité, la colonne Statut indique si votre groupe Auto Scaling a réussi à lancer une instance.

    • Si l'action a abouti, le statut de l'activité de mise à l'échelle indique « Succès ».

    • Si elle a échoué, après quelques minutes d'attente, vous verrez une activité de mise à l'échelle accompagnée du statut « Annulée » et du message de statut « L'instance n'a pas réussi à exécuter l'action de cycle de vie de l'utilisateur : l'action de cycle de vie associée au jeton e85eb647-4fe0-4909-b341-a6c42EXAMPLE a été abandonnée : Action de cycle de vie terminée avec le résultat ABANDONNER ».

Pour réduire la taille du groupe Auto Scaling

Si vous n'avez pas besoin de l'instance supplémentaire que vous avez lancée pour ce test, vous pouvez ouvrir l'onglet Détails et réduire la Capacité souhaitée de 1.

Étape 6 : Nettoyer

Si vous n'avez plus besoin des ressources que vous avez créées pour ce didacticiel, procédez comme suit pour les supprimer.

Pour supprimer le hook de cycle de vie
  1. Ouvrez la page des groupes Auto Scaling de la console Amazon EC2.

  2. Cochez la case située en regard de votre groupe Auto Scaling.

  3. Sous l'onglet Gestion des instances, accédez à Hooks de cycle de vie et choisissez le hook de cycle de vie (LogAutoScalingEvent-hook).

  4. Sélectionnez Actions, Delete (Supprimer).

  5. Pour confirmer, choisissez de nouveau Delete (Supprimer).

Pour supprimer l'Amazon EventBridge règle
  1. Ouvrez le Page des règles en Amazonie EventBridge console.

  2. Sous Bus d'événement, choisissez le bus d'événement associé à la règle (Default).

  3. Ensuite, activez la case à cocher en regard de votre règle (LogAutoScalingEvent-rule).

  4. Sélectionnez Supprimer.

  5. Lorsque vous êtes invité à confirmer, saisissez le nom de la règle et choisissez Delete (Supprimer).

Si vous avez terminé d'utiliser l'exemple de fonction, supprimez-le. Vous pouvez également supprimer le groupe de journaux qui stocke les journaux de la fonction, ainsi que le rôle d'exécution et la politique d'autorisations que vous avez créés.

Pour supprimer une fonction Lambda
  1. Ouvrez la page Functions (Fonctions) sur la console Lambda.

  2. Choisissez la fonction (LogAutoScalingEvent).

  3. Sélectionnez Actions, Supprimer.

  4. Lorsque vous êtes invité à confirmer, saisissez delete pour confirmer la suppression de la fonction spécifiée, puis choisissez Delete (Supprimer).

Pour supprimer le groupe de journaux
  1. Ouvrez le Page des groupes de journaux de la CloudWatch console.

  2. Sélectionnez le groupe de journaux de la fonction (/aws/lambda/LogAutoScalingEvent).

  3. Sélectionnez Actions, Delete log group(s) (Supprimer le ou les groupes de journaux).

  4. Dans la boîte de dialogue Delete log group(s) (Supprimer le ou les groupes de journaux), sélectionnez Delete (Supprimer).

Pour supprimer le rôle d'exécution
  1. Ouvrez la page Roles (Rôles) de la console IAM.

  2. Sélectionnez le rôle de la fonction (LogAutoScalingEvent-role).

  3. Sélectionnez Supprimer.

  4. Lorsque vous êtes invité à confirmer, saisissez le nom du rôle et choisissez Delete (Supprimer).

Pour supprimer la politique IAM
  1. Ouvrez la page Policies (Politiques) de la console IAM.

  2. Sélectionnez la politique que vous avez créée (LogAutoScalingEvent-policy).

  3. Sélectionnez Actions, Supprimer.

  4. Lorsque vous êtes invité à confirmer, saisissez le nom de la politique et choisissez Delete (Supprimer).

Les sujets connexes suivants peuvent vous être utiles lors de la création EventBridge règles basées sur les événements qui surviennent dans les instances de votre groupe Auto Scaling.

Pour suivre un didacticiel qui explique comment utiliser le service de métadonnées d’instance (IMDS) afin d’invoquer une action depuis l’instance elle-même, consultez Tutoriel : Utiliser le script de données et les métadonnées de l'instance pour récupérer l'état du cycle de vie.