Mon instance Amazon EC2 est marquée comme défectueuse, est déplacée vers l'état Auto Scaling Terminating et est finalement arrêtée avant que je puisse identifier la cause du problème.

L'état des instances qui sont en cours de détachement du groupe Auto Scaling et d'arrêt est Terminating. Les instances dans cet état sont par la suite arrêtées et ne sont plus disponibles.

Vous pouvez ajouter un hook de cycle de vie à votre groupe Auto Scaling pour faire passer les instances dans l'état Terminating à un état Terminating:Wait. Cet état vous permet d'accéder aux instances avant qu'elles soient arrêtées, afin de pouvoir déterminer pourquoi elles sont marquées comme défectueuses.

Il est important de noter que les actions de dimensionnement sont suspendues quand une instance est dans un état Terminating:Wait. Par défaut, une instance demeure dans un état Terminating:Wait pendant 3 600 secondes (1 heure) sauf spécification contraire du paramètre put-lifecycle-hook heartbeat-timeout d'Auto Scaling qui accepte une valeur maximum de 172 800 secondes (48 heures).

Les hooks de cycle de vie ne peuvent être configurés qu'en utilisant la ligne de commande AWS et API. Les étapes suivantes décrivent le processus de configuration d'un hook de cycle de vie, y compris en créant la rubrique SNS nécessaire et les autorisations IAM en utilisant la ligne de commande AWS. Si vous préférez gérer IAM et SNS via la console, consultez Créer un rôle pour IAM et Créer une rubrique pour SNS.

  1. Créez une rubrique SNS à laquelle Auto Scaling peut envoyer des notifications de cycle de vie. L'exemple de CLI suivant appelle la commande SNS create-topic pour créer les ASNotifications de rubrique SNS :
         $ aws sns create-topic --name ASNotifications
  2. Enregistrez l'Amazon Resource Name (ARN) qui est renvoyé. L'ARN renvoyé doit ressembler à ce qui suit :
         arn:aws:sns:us-west-2:123456789012:ASNotifications
  3. Créez un abonnement à la rubrique SNS. L'exemple suivant appelle la commande subscribe pour créer un abonnement qui envoie un e-mail à user@amazon.com.
         $ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
            --e-mail protocole --notification-endpoint user@amazon.com

Les autorisations IAM sont configurées en créant un rôle IAM qui permet à Auto Scaling d'envoyer des messages à la rubrique SNS. Cela peut être effectué en créant un fichier texte contenant la stratégie adéquate, puis en référençant le fichier dans la commande create-role.

  1. Utilisez un éditeur de texte pour créer le fichier texte nommé assume-role.txt.
  2. Collez le contenu suivant dans votre fichier texte puis enregistrez le fichier.
         {
            "Version":"2012-10-17",
            "Statement": [{
               "Sid": "",
               "Effect":"Allow",
               "Principal": {"Service": "autoscaling.amazonaws.com"},
               "Action": "sts:AssumeRole"
             }]
         }
  3. L'exemple suivant exécute la commande create-role pour créer le rôle IAM AS-Lifecycle-Hook-Role à partir de la stratégie enregistrée dans le fichier assume-role.txt :
         $ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt
    Le résultat de la commande contient l'ARN pour le rôle. Assurez-vous d'enregistrer l'ARN à la fois du rôle IAM et de la rubrique SNS.
  4. Ajoutez des autorisations au rôle pour autoriser Auto Scaling à envoyer des notifications SNS lorsqu'un événement de hook de cycle de vie se produit. L'exemple suivant exécute la commande attach-role-policy pour attacher la stratégie opérée AutoScalingNotificationAccessRole au rôle IAM AS-Lifecycle-Hook-Role :
         $ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role
            --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole
    Cette stratégie opérée accorde les autorisations suivantes :
         {
            "Version":"2012-10-17",
            "Statement": [{
               "Effect":"Allow",
               "Resource": "*",
               "Action": [
                  "sqs:SendMessage",
                  "sqs:GetQueueUrl",
                  "sns:Publish"
               ]
            }]
         }

Un hook de cycle de vie peut être configuré après que des notifications et des autorisations ont été configurées. L'exemple suivant exécute la commande put-lifecycle-hook pour configurer le hook de cycle de vie :

     $ aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroublshoot --auto-scaling-group-name MyASGroup
        --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
        --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
        --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role

Cette commande effectue les tâches suivantes :

  • Nomme le hook de cycle de vie (AStroubleshoot).
  • Identifie le groupe Auto Scaling auquel le hook de cycle de vie est associé (MyASGroup).
  • Configure le hook pour l'étape du cycle de vie d'arrêt de l'instance (EC2_INSTANCE_TERMINATING).
  • Spécifie l'ARN de la rubrique SNS (arn:aws:sns:us-west-2:123456789012:ASNotifications).
  • Spécifie l'ARN du rôle IAM (arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role).

Assurez-vous de remplacer vos propres nom de groupe Auto Scaling, ARN cible SNS et ARN rôle IAM le cas échéant avant d'exécuter cette commande.

Pour tester le hook de cycle de vie, choisissez une instance et arrêtez le service Web pour qu'il fasse échouer la vérification de l'état de l'ELB configuré. Vous devez voir l'instance passer à l'état Terminating:Wait et recevoir une notification SNS à l'adresse e-mail spécifiée lorsque vous créez un abonnement à la rubrique SNS. Cette notification doit inclure un LifecycleActionToken. Vous pouvez utiliser ce jeton pour que votre instance demeure dans un état en attente en exécutant la commande record-lifecycle-action-heartbeat, ou bien vous pouvez autoriser la poursuite de l'arrêt en exécutant la commande complete-lifecycle-action. L'exemple suivant appelle la commande complete-lifecycle-action pour autoriser la poursuite de l'arrêt de l'instance :

     $ aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook
        --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE
        --lifecycle-action-token a0b1c23d-45e6-7f89-dcba-1234ab56c7d8

Pour plus d'informations sur le maintien des instances dans un état d'attente, consultez Maintien des instances dans un état d'attente.

Auto Scaling, dépannage, report d'arrêt, défectueux, état d'attente, hooks de cycle de vie


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.