

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
<a name="tutorial-lifecycle-hook-instance-metadata"></a>

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](retrieving-target-lifecycle-state-through-imds.md) 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.\]](http://docs.aws.amazon.com/fr_fr/autoscaling/ec2/userguide/images/lifecycle-hook-user-data-script.png)


**Topics**
+ [Étape 1 : créer un rôle IAM doté des autorisations nécessaires pour utiliser des actions de cycle de vie](#instance-metadata-create-iam-role)
+ [Étape 2 : créer un modèle de lancement et inclure le rôle IAM et un script de données utilisateur](#instance-metadata-create-hello-world-function)
+ [Étape 3 : créer un groupe Auto Scaling](#instance-metadata-create-auto-scaling-group)
+ [Étape 4 : ajouter un hook de cycle de vie](#instance-metadata-add-lifecycle-hook)
+ [Étape 5 : tester et vérifier la fonctionnalité](#instance-metadata-testing-hook)
+ [Étape 6 : Nettoyer](#instance-metadata-lifecycle-hooks-tutorial-cleanup)
+ [Ressources connexes](#instance-metadata-lifecycle-hooks-tutorial-related-resources)

## Étape 1 : créer un rôle IAM doté des autorisations nécessaires pour utiliser des actions de cycle de vie
<a name="instance-metadata-create-iam-role"></a>

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](https://console.aws.amazon.com/iam/home?#/policies) (Politiques) de la console IAM et sélectionnez **Create policy** (Créer une politique).

1. Choisissez l’onglet **JSON**.

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

------
#### [ JSON ]

****  

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

------

1. Choisissez **Suivant**. 

1. 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).

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

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

1. Pour votre cas d'utilisation, sélectionnez **EC2**, puis **Next** (Suivant). 

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

1. 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
<a name="instance-metadata-create-hello-world-function"></a>

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](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) de la console Amazon EC2.

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

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

1. Sous **Guide Auto Scaling**, activez la case à cocher. 

1. 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). 

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

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

1. **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.

1. 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 token {
       echo "X-aws-ec2-metadata-token: $(curl -X PUT 'http://169.254.169.254/latest/api/token' -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')"
   }
   
   function get_target_state {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state)
   }
   
   function get_instance_id {
       echo $(curl -H "$(token)" -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

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

1. 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](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) Amazon EC2 Auto Scaling.

## Étape 3 : créer un groupe Auto Scaling
<a name="instance-metadata-create-auto-scaling-group"></a>

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**).

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

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

1. 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é.

1. 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. 

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

1. 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
<a name="instance-metadata-add-lifecycle-hook"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) de la console Amazon EC2.

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

1. 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**.

1. 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**.

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

   1. 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.

   1. 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.

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

1. Choisissez **Créer**.

## Étape 5 : tester et vérifier la fonctionnalité
<a name="instance-metadata-testing-hook"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) de la console Amazon EC2.

1. 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. 

1. Dans le volet inférieur, sous l'onglet **Details** (Détails), choisissez **Group details** (Détails du groupe) puis **Edit** (Modifier).

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

1. 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.

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

1. 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
<a name="instance-metadata-lifecycle-hooks-tutorial-cleanup"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) de la console Amazon EC2.

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

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

1. Sélectionnez **Actions**, **Delete** (Supprimer).

1. Pour confirmer, choisissez de nouveau **Delete** (Supprimer).

**Pour supprimer le modèle de lancement**

1. Ouvrez la [page des modèles de lancement](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) de la console Amazon EC2.

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

1. 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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) de la console Amazon EC2.

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

1. 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](https://console.aws.amazon.com/iam/home?#/roles) (Rôles) de la console IAM.

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

1. Sélectionnez **Delete (Supprimer)**.

1. 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](https://console.aws.amazon.com/iam/home?#/policies) (Politiques) de la console IAM.

1. Sélectionnez la politique que vous avez créée (`TestAutoScalingEvent-policy`).

1. Sélectionnez **Actions**, **Supprimer**.

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

## Ressources connexes
<a name="instance-metadata-lifecycle-hooks-tutorial-related-resources"></a>

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.
+ [Récupérer l'état du cycle de vie cible via des métadonnées d'instance](retrieving-target-lifecycle-state-through-imds.md). Cette section décrit l’état du cycle de vie pour d’autres cas d’utilisation, tels que la résiliation d’une instance.
+ [Ajouter des hooks de cycle de vie (console)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Cette procédure explique comment ajouter des hooks de cycle de vie pour la montée en puissance (lancement des instances) et la mise à l’échelle horizontale (instances résiliées ou revenant à un groupe chaud).
+ [Catégories de métadonnées d'instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories) dans le guide de l'*utilisateur Amazon EC2*. Cette rubrique répertorie toutes les catégories de métadonnées d'instance que vous pouvez utiliser pour appeler des actions sur les instances EC2.

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](tutorial-lifecycle-hook-lambda.md)