Vous préparer à ajouter un hook de cycle de vie à un groupe Auto Scaling - 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.

Vous préparer à ajouter un hook de cycle de vie à un groupe Auto Scaling

Avant d'ajouter un hook de cycle de vie à votre groupe Auto Scaling, assurez-vous que votre cible de notification ou votre script de données utilisateur est correctement configuré.

  • Pour exécuter un script de données utilisateur afin d'effectuer des actions personnalisées sur vos instances lors de leur lancement, vous n'avez pas besoin de configurer de cible de notification. Cependant, vous devez déjà avoir créé le modèle de lancement ou la configuration de lancement qui spécifie votre script de données utilisateur et les avoir associés à votre groupe Auto Scaling. Pour plus d'informations sur les scripts de données utilisateur, consultez la section Exécuter des commandes sur votre instance Linux au lancement dans le guide de l'utilisateur Amazon EC2.

  • Pour signaler à Amazon EC2 Auto Scaling que l'action du cycle de vie est terminée, vous devez ajouter l'appel d'CompleteLifecycleActionAPI au script, et vous devez créer manuellement un rôle IAM avec une politique qui autorise les instances Auto Scaling à appeler cette API. Votre modèle de lancement ou votre configuration de lancement doit spécifier ce rôle à l'aide d'un profil d'instance IAM qui est attaché à vos instances Amazon EC2 lors du lancement. Pour plus d’informations, consultez Réaliser une action du cycle de vie dans un groupe Auto Scaling et Rôle IAM pour les applications qui s'exécutent sur des instances Amazon EC2.

  • Pour utiliser un service tel que Lambda pour effectuer une action personnalisée, vous devez déjà avoir créé une EventBridge règle et spécifié une fonction Lambda comme cible. Pour plus d’informations, consultez Configurer une cible de notification pour les notifications de cycle de vie.

  • Pour permettre à Lambda de signaler à Amazon EC2 Auto Scaling une fois l'action du cycle de vie terminée, vous devez CompleteLifecycleActionajouter l'appel d'API au code de fonction. Vous devez également avoir attaché une politique IAM au rôle d'exécution de la fonction pour accorder à Lambda l'autorisation de terminer les actions de cycle de vie. Pour plus d’informations, consultez Didacticiel : configurer un hook de cycle de vie qui appelle une fonction Lambda.

  • Pour utiliser un service tel qu'Amazon SNS ou Amazon SQS pour effectuer une action personnalisée, vous devez déjà avoir créé la rubrique SNS ou la file d'attente SQS et disposer de son Amazon Resource Name (ARN). Vous devez également avoir déjà créé le rôle IAM qui donne à Amazon EC2 Auto Scaling l'accès à votre rubrique SNS ou cible SQS et avoir prêt son ARN. Pour plus d’informations, consultez Configurer une cible de notification pour les notifications de cycle de vie.

    Note

    Par défaut, lorsque vous ajoutez un hook de cycle de vie dans la console, Amazon EC2 Auto Scaling envoie des notifications d'événements liés au cycle de vie à Amazon. EventBridge L'utilisation EventBridge d'un script de données utilisateur est une bonne pratique recommandée. Pour créer un hook de cycle de vie qui envoie des notifications directement à Amazon SNS ou Amazon SQS, utilisez AWS CLI le AWS CloudFormation, ou un SDK pour ajouter le hook de cycle de vie.

Configurer une cible de notification pour les notifications de cycle de vie

Vous pouvez ajouter des hooks de cycle de vie à un groupe Auto Scaling pour exécuter des actions personnalisées lorsqu'une instance entre en état d'attente. Vous pouvez choisir un service cible pour effectuer ces actions en fonction de votre approche de développement préférée.

La première approche utilise Amazon EventBridge pour appeler une fonction Lambda qui exécute l'action souhaitée. La deuxième approche consiste à créer une rubrique Amazon Simple Notification Service (Amazon SNS) dans laquelle les notifications sont publiées. Les clients peuvent s'abonner à la rubrique SNS et recevoir les messages publiés à l'aide d'un protocole pris en charge. La dernière approche consiste à utiliser Amazon Simple Queue Service (Amazon SQS), un système de messagerie utilisé par les applications distribuées pour échanger des messages via un modèle d'interrogation.

À titre de bonne pratique, nous vous recommandons d'utiliser EventBridge. Les notifications envoyées à Amazon SNS et Amazon SQS contiennent les mêmes informations que celles auxquelles Amazon EC2 Auto Scaling envoie. EventBridge Auparavant EventBridge, la pratique standard consistait à envoyer une notification à SNS ou SQS et à intégrer un autre service à SNS ou SQS pour effectuer des actions programmatiques. Aujourd'hui, vous EventBridge offre davantage d'options pour les services que vous pouvez cibler et facilite la gestion des événements à l'aide d'une architecture sans serveur.

Les procédures suivantes expliquent comment configurer votre cible de notification.

N'oubliez pas que si vous avez un script de données utilisateur dans votre modèle de lancement ou configuration de lancement qui configure vos instances lors de leur lancement, vous n'avez pas besoin de notification pour effectuer des actions personnalisées sur vos instances.

Important

La EventBridge règle, la fonction Lambda, la rubrique Amazon SNS et la file d'attente Amazon SQS que vous utilisez avec les hooks du cycle de vie doivent toujours se trouver dans la même région que celle dans laquelle vous avez créé votre groupe Auto Scaling.

Acheminez les notifications vers Lambda à l'aide de EventBridge

Vous pouvez configurer une EventBridge règle pour appeler une fonction Lambda lorsqu'une instance entre en état d'attente. Amazon EC2 Auto Scaling envoie une notification d'événement EventBridge concernant le cycle de vie de l'instance en cours de lancement ou d'arrêt, ainsi qu'un jeton que vous pouvez utiliser pour contrôler l'action du cycle de vie. Pour obtenir des exemples de ces événements, consultez Référence de l'événement Amazon EC2 Auto Scaling.

Note

Lorsque vous utilisez la règle AWS Management Console pour créer un événement, la console ajoute automatiquement les autorisations IAM nécessaires pour EventBridge autoriser l'appel de votre fonction Lambda. Si vous créez une règle d'événement à l'aide de l' AWS CLI, vous devez explicitement accorder cette autorisation.

Pour plus d'informations sur la création de règles d'événements dans la EventBridge console, consultez la section Création de EventBridge règles Amazon qui réagissent aux événements dans le guide de EventBridge l'utilisateur Amazon.

– ou –

Pour obtenir un tutoriel d'introduction destiné aux utilisateurs de la console, consultez la rubrique Didacticiel : configurer un hook de cycle de vie qui appelle une fonction Lambda. Ce didacticiel explique comment créer une fonction Lambda simple qui écoute les événements de lancement et les enregistre dans un CloudWatch journal des journaux.

Pour créer une EventBridge règle qui invoque une fonction Lambda
  1. Créez une fonction Lambda à l'aide de la console Lambda et notez son Amazon Resource Name (ARN). Par exemple, arn:aws:lambda:region:123456789012:function:my-function. Vous avez besoin de l'ARN pour créer une EventBridge cible. Pour plus d'informations, consultez Prise en main de Lambda dans le Guide du développeur AWS Lambda .

  2. Pour créer une règle qui correspond aux événements de lancement d'une instance, utilisez la commande put-rule suivante.

    aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED

    L'exemple suivant illustre le fichier pattern.json correspondant à une action de cycle de vie de lancement d'instance. Remplacez le texte en italique par le nom de votre groupe Auto Scaling.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-launch Lifecycle Action" ], "detail": { "AutoScalingGroupName": [ "my-asg" ] } }

    Si la commande s'exécute correctement, elle EventBridge répond avec l'ARN de la règle. Notez cet ARN. Vous devrez le saisir au cours de l'étape 4.

    Pour créer une règle qui correspond à d'autres événements, modifiez le modèle d'événement. Pour plus d’informations, consultez EventBridge À utiliser pour gérer les événements Auto Scaling.

  3. Pour spécifier la fonction Lambda à utiliser comme cible pour la règle, utilisez la commande put-targets suivante :

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function

    Dans la commande précédente, my-rule est le nom que vous avez spécifié pour la règle lors de l'étape 2, et la valeur du paramètre Arn est l'ARN de la fonction que vous avez créé à l'étape 1.

  4. Pour ajouter des autorisations permettant à la règle d'invoquer votre fonction Lambda cible, utilisez la commande add-permission Lambda suivante. Cette commande fait confiance au principal de EventBridge service (events.amazonaws.com) et étend les autorisations à la règle spécifiée.

    aws lambda add-permission --function-name my-function --statement-id my-unique-id \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule

    Dans la commande précédente :

    • my-function est le nom de la fonction Lambda que vous souhaitez que la règle utilise comme cible.

    • my-unique-idest un identifiant unique que vous définissez pour décrire l'instruction dans la politique de fonction Lambda.

    • source-arnest l'ARN de la EventBridge règle.

    Si la commande s'exécute correctement, vous recevez une sortie similaire à ce qui suit.

    { "Statement": "{\"Sid\":\"my-unique-id\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}" }

    La valeur Statement est une version de la chaîne JSON correspondant à l'instruction ajoutée à la politique de la fonction Lambda.

  5. Une fois que vous avez suivi ces instructions, passez à Ajoutez des hooks de cycle de vie à votre groupe Auto Scaling qui est l'étape suivante.

Recevoir des notifications à l'aide d'Amazon SNS

Vous pouvez utiliser Amazon SNS pour configurer une cible de notification (une rubrique SNS) permettant de recevoir des notifications lorsqu'une action de cycle de vie se produit. Amazon SNS envoie ensuite les notifications aux destinataires abonnés. Aucune notification publiée dans la rubrique n'est envoyée aux destinataires tant que l'abonnement n'est pas confirmé.

Pour configurer des notifications à l'aide d'Amazon SNS
  1. Créez une rubrique Amazon SNS à l'aide de la console Amazon SNS ou de la commande create-topic suivante. Assurez-vous que la rubrique se trouve dans la même région que le groupe Auto Scaling que vous utilisez. Pour plus d'informations, consultez Prise en main d'Amazon SNS dans le Guide du développeur Amazon Simple Notification Service.

    aws sns create-topic --name my-sns-topic
  2. Notez l'Amazon Resource Name (ARN) de la rubrique, par exemple arn:aws:sns:region:123456789012:my-sns-topic. Celui-ci est nécessaire pour créer le hook de cycle de vie.

  3. Créez un rôle de service IAM pour accorder à Amazon EC2 Auto Scaling l'autorisation d'accès à votre cible de notification Amazon SNS.

    Pour accorder à Amazon EC2 Auto Scaling l'autorisation d'accès à votre rubrique SNS

    1. Ouvrez la console IAM à l’adresse https://console.aws.amazon.com/iam/.

    2. Dans le panneau de navigation de gauche, sélectionnez Roles (Rôles).

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

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

    5. Pour votre cas d'utilisation, sous Use cases for other AWS services (Cas d'utilisation sez EC2 Auto Scaling puis EC2 Auto Scaling Notification Access (Notification d'accès EC2 Auto Scaling).

    6. Cliquez deux fois sur Next (Suivant) pour aller à la page Name, review, and create (Nommer, vérifier et créer).

    7. Pour Role Name (Nom du rôle), saisissez un nom pour votre rôle (par exemple my-notification-role), puis sélectionnez Create Role (Créer un rôle).

    8. Sur la page Roles (Rôles), choisissez le rôle que vous venez de créer pour ouvrir la page Summary (Récapitulatif). Notez l'ARN du rôle. Par exemple, arn:aws:iam::123456789012:role/my-notification-role. Celui-ci est nécessaire pour créer le hook de cycle de vie.

  4. Une fois que vous avez suivi ces instructions, passez à Ajouter des hooks de cycle de vie (AWS CLI) qui est l'étape suivante.

Recevoir des notifications à l'aide d'Amazon SQS

Vous pouvez utiliser Amazon SQS pour configurer une cible de notification permettant de recevoir des messages lorsqu'une action de cycle de vie se produit. Un consommateur de file d'attente doit alors interroger une file d'attente SQS pour agir sur ces notifications.

Important

Les files d'attente FIFO ne sont pas compatibles avec des hooks de cycle de vie.

Pour configurer des notifications à l'aide d'Amazon SQS
  1. Créez une file d'attente Amazon SQS à l'aide de la console Amazon SQS. Assurez-vous que la file d'attente se trouve dans la même région que le groupe Auto Scaling que vous utilisez. Pour plus d'informations, consultez Prise en main d'Amazon SQS dans le Guide du développeur Amazon Simple Queue Service.

  2. Notez l'ARN de la file d'attente, par exemple arn:aws:sqs:us-west-2:123456789012:my-sqs-queue. Celui-ci est nécessaire pour créer le hook de cycle de vie.

  3. Créez un rôle de service IAM pour accorder à Amazon EC2 Auto Scaling l'autorisation d'accès à votre cible de notification Amazon SQS.

    Pour accorder à Amazon EC2 Auto Scaling l'autorisation d'accès à votre file d'attente SQS

    1. Ouvrez la console IAM à l’adresse https://console.aws.amazon.com/iam/.

    2. Dans le panneau de navigation de gauche, sélectionnez Roles (Rôles).

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

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

    5. Pour votre cas d'utilisation, sous Use cases for other AWS services (Cas d'utilisation sez EC2 Auto Scaling puis EC2 Auto Scaling Notification Access (Notification d'accès EC2 Auto Scaling).

    6. Cliquez deux fois sur Next (Suivant) pour aller à la page Name, review, and create (Nommer, vérifier et créer).

    7. Pour Role Name (Nom du rôle), saisissez un nom pour votre rôle (par exemple my-notification-role), puis sélectionnez Create Role (Créer un rôle).

    8. Sur la page Roles (Rôles), choisissez le rôle que vous venez de créer pour ouvrir la page Summary (Récapitulatif). Notez l'ARN du rôle. Par exemple, arn:aws:iam::123456789012:role/my-notification-role. Celui-ci est nécessaire pour créer le hook de cycle de vie.

  4. Une fois que vous avez suivi ces instructions, passez à Ajouter des hooks de cycle de vie (AWS CLI) qui est l'étape suivante.

Exemple de message de notification pour Amazon SNS et Amazon SQS

Pendant que l'instance est en attente, un message est publié sur la cible de notification Amazon SNS ou Amazon SQS. Le message comprend les informations suivantes :

  • LifecycleActionToken : jeton de l'action de cycle de vie.

  • AccountId— L' Compte AWS identifiant.

  • AutoScalingGroupName : nom du groupe Auto Scaling.

  • LifecycleHookName : nom du hook de cycle de vie.

  • EC2InstanceId : ID de l'instance EC2.

  • LifecycleTransition : type du hook de cycle de vie.

  • NotificationMetadata : métadonnées de notification.

Voici un exemple de message de notification.

Service: AWS Auto Scaling Time: 2021-01-19T00:36:26.533Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: hook message metadata

Exemple de message de notification de test

Lorsque vous ajoutez pour la première fois un hook de cycle de vie, un message de notification de test est publié sur la cible de notification. Voici un exemple de message de notification de test.

Service: AWS Auto Scaling Time: 2021-01-19T00:35:52.359Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Event: autoscaling:TEST_NOTIFICATION AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
Note

Pour des exemples d'événements diffusés par Amazon EC2 Auto Scaling à EventBridge, consultez. Référence de l'événement Amazon EC2 Auto Scaling