Tutoriel : utilisation de scripts de données et de métadonnées d'instance pour récupérer l'état du cycle de vie - 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.

Tutoriel : utilisation de scripts de données et de métadonnées d'instance pour récupérer l'état du cycle de vie

Une méthode courante pour créer des actions personnalisées pour les hooks du cycle de vie consiste à utiliser les notifications qu'Amazon EC2 Auto Scaling envoie à d'autres services, tels qu'Amazon. EventBridge Toutefois, vous pouvez éviter de devoir créer une infrastructure supplémentaire en utilisant plutôt un script de données utilisateur pour déplacer le code qui configure les instances et effectue l'action du cycle de vie dans les instances elles-mêmes.

Le tutoriel suivant vous montre comment commencer à utiliser un script de données utilisateur et des métadonnées d'instance. Vous créez une configuration de groupe Auto Scaling de base avec un script de données utilisateur qui lit l'état du cycle de vie cible des instances de votre groupe et effectue une action de rappel à une phase spécifique du cycle de vie d'une instance pour poursuivre le processus de lancement.

L'illustration suivante résume le flux d'un événement de scale-out lorsque vous utilisez un script de données utilisateur pour effectuer une action personnalisée. Après le lancement d'une instance, le cycle de vie de l'instance est suspendu jusqu'à ce que le cycle de vie soit terminé, soit en expirant, soit en recevant un signal indiquant à Amazon EC2 Auto Scaling de continuer.

Le flux d'un événement de scale-out lorsque vous utilisez un script de données utilisateur pour effectuer une action personnalisée.

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

Lorsque vous utilisez le AWS CLI ou un AWS SDK pour envoyer un rappel pour effectuer des actions du cycle de vie, vous devez utiliser un rôle IAM avec des autorisations pour effectuer les actions du 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. Sélectionnez l’onglet JSON.

  3. Dans la case Policy Document (Document de politique), copiez et collez le document de politique suivant dans la case. Remplacez le sample text avec votre numéro de compte et le nom du groupe Auto Scaling que vous souhaitez créer (TestAutoScalingEvent-group).

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

  5. Pour Policy name (Nom de la politique), saisissez TestAutoScalingEvent-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 EC2, puis Next (Suivant).

  5. Sous Ajouter des autorisations, choisissez la politique que vous avez créée (TestAutoScalingEvent-policy). Ensuite, choisissez Next (Suivant).

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

Étape 2 : créer un modèle de lancement et inclure le rôle IAM et un script de données utilisateur

Créer un modèle de lancement à utiliser avec un groupe Auto Scaling. Incluez le rôle IAM que vous avez créé et l'exemple de script de données utilisateur fourni.

Pour créer un modèle de lancement
  1. Ouvrez la page des modèles de lancement de la console Amazon EC2.

  2. Choisissez Create launch template (Créer un modèle de lancement).

  3. Pour Launch template name (Nom du modèle de lancement), saisissez TestAutoScalingEvent-template.

  4. Sous Guide Auto Scaling, activez la case à cocher.

  5. Pour Application and OS Images (Amazon Machine Image) (Amazon machine image [AMI]), choisissez Amazon Linux 2 (HVM), Type de volume SSD, 64 bits (x86) dans la liste Quick Start (Démarrage rapide).

  6. Pour Instance type (Type d'instance), choisissez un type d'instance Amazon EC2 (par exemple, « t2.micro »).

  7. Pour Advanced details (Détails avancés), développez la section afin d'afficher les champs.

  8. Pour le profil d'instance IAM, choisissez le nom du profil d'instance IAM de votre rôle IAM (-role)TestAutoScalingEvent. Un profil d'instance est un conteneur pour un rôle IAM qui permet à Amazon EC2 de transmettre le rôle IAM à une instance lors du lancement de l'instance.

    Lorsque vous avez utilisé la console IAM pour créer un rôle IAM, la console a automatiquement créé un profil d'instance portant le même nom que le rôle correspondant.

  9. Pour User data (Données utilisateur), copiez et collez l'exemple de script de données utilisateur suivant dans le champ. Remplacez le texte d'exemple group_name par le nom du groupe Auto Scaling que vous souhaitez créer et region par le nom que Région AWS vous souhaitez que votre groupe Auto Scaling utilise.

    #!/bin/bash function get_target_state { echo $(curl -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state) } function get_instance_id { echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) } function complete_lifecycle_action { instance_id=$(get_instance_id) group_name='TestAutoScalingEvent-group' region='us-west-2' echo $instance_id echo $region echo $(aws autoscaling complete-lifecycle-action \ --lifecycle-hook-name TestAutoScalingEvent-hook \ --auto-scaling-group-name $group_name \ --lifecycle-action-result CONTINUE \ --instance-id $instance_id \ --region $region) } function main { while true do target_state=$(get_target_state) if [ \"$target_state\" = \"InService\" ]; then # Change hostname export new_hostname="${group_name}-$instance_id" hostname $new_hostname # Send callback complete_lifecycle_action break fi echo $target_state sleep 5 done } main

    Ce simple script de données utilisateur effectue les opérations suivantes :

    • Appelle les métadonnées de l'instance pour récupérer l'état du cycle de vie cible et l'ID d'instance à partir des métadonnées de l'instance

    • Récupère l'état du cycle de vie cible à plusieurs reprises jusqu'à ce qu'il passe à InService

    • Modifie le nom d'hôte de l'instance par l'ID d'instance précédé du nom du groupe Auto Scaling, si l'état du cycle de vie cible est InService

    • Envoie un rappel en appelant la commande CLI complete-lifecycle-action pour signaler à Amazon EC2 Auto Scaling de CONTINUE le processus de lancement de l'EC2

  10. Choisissez Create launch template (Créer un modèle de lancement).

  11. Sur la page de confirmation, choisissez Create Auto Scaling group (Créer un groupe Auto Scaling).

Note

Pour d'autres exemples que vous pouvez utiliser comme référence pour développer votre script de données utilisateur, consultez le GitHub référentiel Amazon EC2 Auto Scaling.

Étape 3 : créer un groupe Auto Scaling

Une fois le modèle de lancement créé, créez un groupe Auto Scaling.

Pour créer un groupe Auto Scaling
  1. Dans la page Choose launch template or configuration (Choisir un modèle de lancement ou une configuration), dans Auto Scaling group name (Nom du groupe Auto Scaling), saisissez un nom pour le groupe Auto Scaling (TestAutoScalingEvent-group).

  2. Choisissez Next (Suivant) pour accéder à la page Choose instance launch options (Choisir les options de lancement d'instance).

  3. Dans Network (Réseau), choisissez un VPC.

  4. Pour Availability Zones and subnets (Zones de disponibilité et sous-réseaux), choisissez un ou plusieurs sous-réseaux dans une ou plusieurs zones de disponibilité.

  5. Dans la section Instance type requirements (Exigences relatives au type d'instance), utilisez le paramètre par défaut pour simplifier cette étape. (Ne remplacez pas le modèle de lancement.) Pour ce didacticiel, vous lancerez une seule instance à la demande en utilisant le type d'instance spécifié dans votre modèle de lancement.

  6. Choisissez Skip to review (Passez à la révision) en bas de l'écran.

  7. Sur la page Review (Vérifier), consultez les paramètres du groupe Auto Scaling, puis choisissez Create Auto Scaling group (Créer un groupe Auto Scaling).

Étape 4 : ajouter un hook de cycle de vie

Ajoutez un hook de cycle de vie pour maintenir l'instance en attente jusqu'à ce que votre action de cycle de vie soit terminée.

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 TestAutoScalingEvent-hook.

    2. Dans le champ Lifecycle transition (Transition du cycle de vie), choisissez Instance launch (Lancement d'instance).

    3. Pour Heartbeat timeout (Délai de pulsation), saisissez 300 pour le nombre de secondes d'attente d'un rappel de votre script de données utilisateur.

    4. Dans le champ Default result (Résultat par défaut), choisissez ABANDON (ABANDONNER). Si le hook expire sans recevoir de rappel de votre script de données utilisateur, le groupe Auto Scaling résilie la nouvelle instance.

    5. (Facultatif) Conserver Notification metadata (Métadonnées de notification) vide.

  5. Choisissez Créer.

Étape 5 : tester et vérifier la fonctionnalité

Pour tester la fonctionnalité, mettez à jour le groupe Auto Scaling en augmentant de 1 la capacité souhaitée du groupe Auto Scaling. Le script de données utilisateur s'exécute et commence à vérifier l'état du cycle de vie cible de l'instance peu après le lancement de l'instance. Le script modifie le nom d'hôte et envoie une action de rappel lorsque l'état du cycle de vie cible est InService. Cette opération ne prend généralement que quelques secondes.

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. Affichez les détails dans un volet inférieur tout en continuant à voir les premières lignes du volet supérieur.

  3. Dans le volet inférieur, sous l'onglet Details (Détails), choisissez Group details (Détails du groupe) puis Edit (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 Status (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 instance a été lancée avec succès et qu'elle n'est pas résiliée à 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.

  3. Si le script de données utilisateur échoue, une fois le délai d'expiration écoulé, vous voyez une activité de mise à l'échelle dont le statut est égal à Canceled et un message de statut de Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result.

Étape 6 : Nettoyer

Si vous n'avez plus besoin des ressources que vous avez créées pour ce tutoriel, 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 (TestAutoScalingEvent-hook).

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

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

Pour supprimer le modèle de lancement
  1. Ouvrez la page des modèles de lancement de la console Amazon EC2.

  2. Sélectionnez le modèle de lancement (TestAutoScalingEvent-template), puis choisissez Actions, Delete template (Supprimer le modèle).

  3. Lorsque vous êtes invité à confirmer l'opération, saisissez Delete pour confirmer la suppression du modèle de lancement spécifié, puis choisissez Delete (Supprimer).

Si vous avez terminé d'utiliser l'exemple de groupe Auto Scaling, supprimez-le. Vous pouvez également supprimer et la politique d'autorisations et le rôle IAM que vous avez créés.

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

  2. Cochez la case en regard de votre groupe Auto Scaling (TestAutoScalingEvent-group) et choisissez Delete (Supprimer).

  3. Lorsque vous êtes invité à confirmer l'opération, saisissez delete pour confirmer la suppression du groupe Auto Scaling spécifié, puis choisissez Delete (Supprimer).

    Une icône de chargement dans la colonne Name (Nom) indique que le groupe Auto Scaling est en cours de suppression. Quelques minutes sont nécessaires pour résilier les instances et supprimer le groupe.

Suppression du rôle IAM
  1. Ouvrez la page Roles (Rôles) de la console IAM.

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

  3. Sélectionnez Delete (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 (TestAutoScalingEvent-policy).

  3. Sélectionnez Actions, Supprimer.

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

Les rubriques connexes suivantes peuvent être utiles lorsque vous développez du code qui invoque des actions sur les instances en fonction des données disponibles dans les métadonnées de l’instance.

Pour consulter un didacticiel expliquant comment utiliser Amazon EventBridge pour créer des règles qui invoquent des fonctions Lambda en fonction d'événements survenant dans les instances de votre groupe Auto Scaling, consultez. Didacticiel : configurer un hook de cycle de vie qui appelle une fonction Lambda