Intégration CodeDeploy à Amazon EC2 Auto Scaling - AWS CodeDeploy

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.

Intégration CodeDeploy à Amazon EC2 Auto Scaling

CodeDeploy prend en charge Amazon EC2 Auto Scaling, un AWS service qui lance les instances Amazon EC2 automatiquement en fonction des conditions que vous définissez. Ces conditions peuvent inclure le dépassement des limites dans un intervalle de temps spécifié pour l'utilisation du processeur, les lectures ou écritures sur le disque, ou le trafic réseau entrant ou sortant. Amazon EC2 Auto Scaling met fin aux instances lorsqu'elles ne sont plus nécessaires. Pour plus d'informations, consultez Qu'est-ce qu'Amazon EC2 Auto Scaling ? dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.

Lorsque de nouvelles instances Amazon EC2 sont lancées dans le cadre d'un CodeDeploy groupe Amazon EC2 Auto Scaling, vous pouvez déployer automatiquement vos révisions sur les nouvelles instances. Vous pouvez également coordonner les déploiements CodeDeploy avec des instances Amazon EC2 Auto Scaling enregistrées auprès des équilibreurs de charge Elastic Load Balancing. Pour plus d’informations, consultez Integrating CodeDeploy with Elastic Load Balancing et Configuration d'un équilibreur de charge dans Elastic Load Balancing pour les déploiements CodeDeploy Amazon EC2.

Note

Vous pouvez rencontrer des problèmes si vous associez plusieurs groupes de déploiement à un seul groupe Amazon EC2 Auto Scaling. Si un déploiement échoue, par exemple, l'instance va commencer à s'arrêter, mais les autres déploiements en cours d'exécution peuvent mettre une heure avant d'expirer. Pour plus d'informations, consultez Évitez d'associer plusieurs groupes de déploiement à un seul groupe Amazon EC2 Auto Scaling Under the hood : CodeDeploy et Amazon EC2 Auto Scaling integration.

Déploiement CodeDeploy d'applications sur des groupes Amazon EC2 Auto Scaling

Pour déployer une révision d' CodeDeploy application sur un groupe Amazon EC2 Auto Scaling :

  1. Créez ou localisez un profil d'instance IAM qui permet au groupe Amazon EC2 Auto Scaling de travailler avec Amazon S3. Pour plus d’informations, consultez Étape 4 : Création d'un profil d'instance IAM pour vos instances Amazon EC2.

    Note

    Vous pouvez également l'utiliser CodeDeploy pour déployer des révisions depuis des GitHub référentiels vers des groupes Amazon EC2 Auto Scaling. Bien que les instances Amazon EC2 nécessitent toujours un profil d'instance IAM, le profil n'a pas besoin d'autorisations supplémentaires pour être déployé à partir d'un référentiel. GitHub

  2. Créez ou utilisez un groupe Amazon EC2 Auto Scaling, en spécifiant le profil d'instance IAM dans votre configuration ou votre modèle de lancement. Pour plus d'informations, consultez le rôle IAM pour les applications qui s'exécutent sur des instances Amazon EC2.

  3. Créez ou localisez un rôle de service qui permet CodeDeploy de créer un groupe de déploiement contenant le groupe Amazon EC2 Auto Scaling.

  4. Créez un groupe de déploiement avec CodeDeploy, en spécifiant le nom du groupe Amazon EC2 Auto Scaling, le rôle du service et quelques autres options. Pour plus d’informations, consultez Création d'un groupe de déploiement pour un déploiement sur place (console) ou Création d'un groupe de déploiement pour un déploiement sur place (console).

  5. CodeDeploy À utiliser pour déployer votre révision dans le groupe de déploiement qui contient le groupe Amazon EC2 Auto Scaling.

Pour plus d’informations, consultez Tutoriel : CodeDeploy À utiliser pour déployer une application dans un groupe Auto Scaling.

Permettre les déploiements de terminaison lors d'événements de scale-in d'Auto Scaling

Un déploiement de fin est un type de CodeDeploy déploiement qui est activé automatiquement lorsqu'un événement de scale-in Auto Scaling se produit. CodeDeploy effectue le déploiement de terminaison juste avant que le service Auto Scaling ne mette fin à l'instance. Lors d'un déploiement final, CodeDeploy ne déploie rien. Au lieu de cela, il génère des événements du cycle de vie, que vous pouvez associer à vos propres scripts pour activer une fonctionnalité d'arrêt personnalisée. Par exemple, vous pouvez associer l'événement du ApplicationStop cycle de vie à un script qui arrête correctement votre application avant que l'instance ne soit arrêtée.

Pour obtenir la liste des événements du cycle de vie CodeDeploy générés lors de l'arrêt d'un déploiement, consultezDisponibilité du carnet d'événements du cycle de vie.

Si le déploiement de la terminaison échoue pour une raison quelconque, CodeDeploy cela permettra à la résiliation de l'instance de se poursuivre. Cela signifie que l'instance sera arrêtée même si elle CodeDeploy n'a pas exécuté l'ensemble complet (ou aucun) des événements du cycle de vie jusqu'à son terme.

Si vous n'activez pas les déploiements de résiliation, le service Auto Scaling arrêtera tout de même les instances Amazon EC2 lorsqu'un événement de scale-in se produit, CodeDeploy mais ne générera pas d'événements liés au cycle de vie.

Note

Que vous activiez ou non les déploiements de résiliation, si le service Auto Scaling met fin à une instance Amazon EC2 alors qu' CodeDeploy un déploiement est en cours, une course peut se produire entre les événements du cycle de vie générés par Auto Scaling et les services. CodeDeploy Par exemple, l'événement Terminating du cycle de vie (généré par le service Auto Scaling) peut remplacer l'ApplicationStartévénement (généré par le CodeDeploy déploiement). Dans ce scénario, il est possible que vous rencontriez un échec lors de la fermeture ou du déploiement de l' CodeDeploy instance Amazon EC2.

Pour permettre d' CodeDeploy effectuer des déploiements de terminaison

Une fois le crochet de terminaison installé, un événement scale-in (terminaison) se déroule comme suit :

  1. Le service Auto Scaling (ou simplement Auto Scaling) détermine qu'un événement de scale-in doit se produire et contacte le service EC2 pour mettre fin à une instance EC2.

  2. Le service EC2 commence à mettre fin à l'instance EC2. L'instance passe dans l'Terminatingétat, puis dans l'Terminating:Waitétat.

  3. Pendant Terminating:Wait ce temps, Auto Scaling exécute tous les hooks du cycle de vie attachés au groupe Auto Scaling, y compris le crochet de terminaison installé par CodeDeploy.

  4. Le hook de terminaison envoie une notification à la file d'attente Amazon SQS interrogée par. CodeDeploy

  5. Dès réception de la notification, CodeDeploy analyse le message, effectue une certaine validation et effectue un déploiement de terminaison.

  6. Pendant que le déploiement de la terminaison est en cours, CodeDeploy envoie des pulsations toutes les cinq minutes à Auto Scaling pour l'informer que l'instance est toujours en cours d'élaboration.

  7. Jusqu'à présent, l'instance EC2 est toujours dans Terminating:Wait cet état (ou peut-être dans cet Warmed:Pending:Wait état, si vous avez activé les warm pools de groupe Auto Scaling).

  8. Lorsque le déploiement est terminé, CodeDeploy indique à Auto Scaling CONTINUE le processus d'arrêt d'EC2, que le déploiement de l'arrêt ait réussi ou échoué.

Comment fonctionne Amazon EC2 Auto Scaling avec CodeDeploy

Lorsque vous créez ou mettez à jour un groupe de CodeDeploy déploiement pour inclure un groupe Auto Scaling, vous CodeDeploy accédez au groupe Auto Scaling à l'aide du rôle de CodeDeploy service, puis installez les hooks de cycle de vie Auto Scaling dans vos groupes Auto Scaling.

Note

Les hooks du cycle de vie Auto Scaling sont différents des événements du cycle de vie (également appelés crochets d'événements du cycle AppSpec section « crochets » de vie) générés CodeDeploy et décrits dans ce guide.

Les hooks du cycle de vie Auto Scaling qui s' CodeDeploy installent sont les suivants :

  • Un hook de lancement : ce hook indique CodeDeploy qu'un événement de scale-out Auto Scaling est en cours et qu'il CodeDeploy doit démarrer un déploiement de lancement.

    Lors d'un déploiement de lancement, CodeDeploy :

    • Déploie une révision de votre application sur l'instance évolutive.

    • Génère des événements du cycle de vie pour indiquer la progression du déploiement. Vous pouvez associer ces événements du cycle de vie à vos propres scripts pour activer des fonctionnalités de démarrage personnalisées. Pour plus d'informations, consultez le tableau dansDisponibilité du carnet d'événements du cycle de vie.

    Le hook de lancement et le déploiement de lancement associé sont toujours activés et ne peuvent pas être désactivés.

  • Un hook de terminaison : ce hook facultatif indique CodeDeploy qu'un événement de scale-in Auto Scaling est en cours et qu'il CodeDeploy doit démarrer un déploiement de terminaison.

    Lors d'un déploiement d'arrêt, CodeDeploy génère des événements du cycle de vie pour indiquer la progression de l'arrêt de l'instance. Pour plus d’informations, consultez Permettre les déploiements de terminaison lors d'événements de scale-in d'Auto Scaling.

Après avoir CodeDeploy installé les hooks Lifecycle, comment sont-ils utilisés ?

Une fois les hooks du cycle de vie de lancement et de fin installés, ils sont utilisés CodeDeploy lors des événements de scale-out et de scale-in du groupe Auto Scaling, respectivement.

Un événement de scale-out (lancement) se déroule comme suit :

  1. Le service Auto Scaling (ou simplement Auto Scaling) détermine qu'un événement de scale-out doit se produire et contacte le service EC2 pour lancer une nouvelle instance EC2.

  2. Le service EC2 lance une nouvelle instance EC2. L'instance passe dans l'Pendingétat, puis dans l'Pending:Waitétat.

  3. Pendant Pending:Wait ce temps, Auto Scaling exécute tous les hooks du cycle de vie attachés au groupe Auto Scaling, y compris le hook de lancement installé par CodeDeploy.

  4. Le hook de lancement envoie une notification à la file d'attente Amazon SQS interrogée par. CodeDeploy

  5. Dès réception de la notification, CodeDeploy analyse le message, effectue une validation et lance un déploiement de lancement.

  6. Pendant le déploiement de lancement, CodeDeploy envoie des pulsations toutes les cinq minutes à Auto Scaling pour l'informer que l'instance est toujours en cours de développement.

  7. Jusqu'à présent, l'instance EC2 est toujours dans Pending:Wait cet état.

  8. Lorsque le déploiement est terminé, CodeDeploy indique à Auto Scaling l'un CONTINUE ou ABANDON l'autre processus de lancement d'EC2, selon que le déploiement a réussi ou échoué.

    • Si CodeDeploy cela est indiquéCONTINUE, Auto Scaling poursuit le processus de lancement, soit en attendant que les autres hooks soient terminés, soit en plaçant l'instance dans l'InServiceétat « Pending:Proceed et puis ».

    • Si CodeDeploy cela est indiquéABANDON, Auto Scaling met fin à l'instance EC2 et redémarre la procédure de lancement si nécessaire pour atteindre le nombre d'instances souhaité, tel que défini dans le paramètre Auto Scaling Desired Capacity.

Un événement de scale-in (résiliation) se déroule comme suit :

veuillez consulter Permettre les déploiements de terminaison lors d'événements de scale-in d'Auto Scaling.

Comment sont CodeDeploy nommés les groupes Amazon EC2 Auto Scaling

Lors de déploiements bleu/vert sur une plate-forme informatique EC2/sur site, deux options s'offrent à vous pour ajouter des instances à votre environnement de remplacement (vert) :

  • Utilisez des instances qui existent déjà ou créez-en manuellement.

  • Utilisez les paramètres d'un groupe Amazon EC2 Auto Scaling que vous spécifiez pour définir et créer des instances dans un nouveau groupe Amazon EC2 Auto Scaling.

Si vous choisissez la deuxième option, CodeDeploy provisionnez un nouveau groupe Amazon EC2 Auto Scaling pour vous. Il utilise la convention suivante pour nommer le groupe :

CodeDeploy_deployment_group_name_deployment_id

Par exemple, si un déploiement avec ID 10 déploie un groupe de déploiement nomméalpha-deployments, le groupe Amazon EC2 Auto Scaling provisionné est nommé. CodeDeploy_alpha-deployments_10 Pour plus d’informations, consultez Création d'un groupe de déploiement pour un déploiement EC2/local bleu/vert (console) et GreenFleetProvisioningOption.

Ordre d'exécution des événements d'accroche du cycle de vie personnalisés

Vous pouvez ajouter vos propres hooks de cycle de vie aux groupes Amazon EC2 Auto Scaling vers lesquels sont CodeDeploy déployés. Toutefois, l'ordre dans lequel ces événements d'accroche du cycle de vie personnalisés sont exécutés ne peut pas être prédéterminé par rapport aux événements du cycle de vie de déploiement CodeDeploy par défaut. Par exemple, si vous ajoutez un hook de cycle de vie personnalisé nommé ReadyForSoftwareInstall dans un groupe Amazon EC2 Auto Scaling, vous ne pouvez pas savoir à l'avance s'il sera exécuté avant le premier ou après le dernier événement du cycle de vie de déploiement CodeDeploy par défaut.

Pour savoir comment ajouter des hooks de cycle de vie personnalisés à un groupe Amazon EC2 Auto Scaling, consultez la section Ajout de crochets de cycle de vie dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.

Événements de scale-out lors d'un déploiement

Si un événement Auto Scale-out survient alors qu'un déploiement est en cours, les nouvelles instances seront mises à jour avec la version de l'application précédemment déployée, et non avec la version la plus récente de l'application. Si le déploiement aboutit, les anciennes instances et les nouvelles instances évolutives hébergeront différentes révisions de l'application. Pour mettre à jour les instances dotées de l'ancienne révision, lance CodeDeploy automatiquement un déploiement de suivi (immédiatement après la première) afin de mettre à jour les instances obsolètes. Si vous souhaitez modifier ce comportement par défaut afin que les instances EC2 obsolètes soient conservées dans l'ancienne version, consultezAutomatic updates to outdated instances.

Si vous souhaitez suspendre les processus de scale-out d'Amazon EC2 Auto Scaling pendant les déploiements, vous pouvez le faire via un paramètre du common_functions.sh script utilisé pour l'équilibrage de charge avec. CodeDeploy Si HANDLE_PROCS=true les événements Auto Scaling suivants sont automatiquement suspendus pendant le processus de déploiement :

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

Important

Seul le CodeDeployDefault. OneAtLa configuration de déploiement ATime prend en charge cette fonctionnalité.

Pour plus d'informations sur l'utilisation HANDLE_PROCS=true afin d'éviter les problèmes de déploiement lors de l'utilisation d'Amazon EC2 Auto Scaling, consultez la section Avis important concernant la gestion des AutoScaling processus en aws-codedeploy-samplescours. GitHub

Événements d'évolutivité lors d'un déploiement

Si un groupe Auto Scaling commence à prendre de l'ampleur alors qu'un CodeDeploy déploiement est en cours sur ce groupe Auto Scaling, une situation de course peut survenir entre le processus d'arrêt (y compris les événements du cycle de vie du déploiement de fin) et les autres événements CodeDeploy du cycle de vie sur l'instance de CodeDeploy résiliation. Le déploiement sur cette instance spécifique peut échouer si l'instance est arrêtée avant la fin de tous les événements CodeDeploy du cycle de vie. En outre, le CodeDeploy déploiement global peut échouer ou non, selon la façon dont vous avez défini le paramètre Minimum healthy hosts dans votre configuration de déploiement.

Ordre des événements dans les scripts AWS CloudFormation cfn-init

Si vous utilisez cfn-init (ou cloud-init) pour exécuter des scripts sur des instances basées sur Linux nouvellement allouées, vos déploiements peuvent échouer à moins que vous ne contrôliez de manière stricte l'ordre des événements qui se produisent au démarrage de l'instance.

L'ordre doit être le suivant :

  1. L'instance nouvellement allouée se lance.

  2. Tous les scripts d'amorçage cfn-init s'exécutent jusqu'à la fin.

  3. L' CodeDeploy agent démarre.

  4. La dernière révision d'application est déployée sur l'instance.

Si l'ordre des événements n'est pas soigneusement contrôlé, l' CodeDeploy agent peut démarrer un déploiement avant la fin de l'exécution de tous les scripts.

Pour contrôler l'ordre des événements, utilisez l'une de ces bonnes pratiques :

  • Installez l' CodeDeploy agent par le biais d'un cfn-init script, en le plaçant après tous les autres scripts.

  • Incluez l' CodeDeploy agent dans une AMI personnalisée et utilisez un cfn-init script pour le démarrer, en le plaçant après tous les autres scripts.

Pour plus d'informations sur l'utilisationcfn-init, consultez cfn-init dans le guide de l'AWS CloudFormation utilisateur.

Utilisation d'une AMI personnalisée avec CodeDeploy Amazon EC2 Auto Scaling

Vous avez deux options pour spécifier l'AMI de base à utiliser lorsque de nouvelles instances Amazon EC2 sont lancées dans un groupe Amazon EC2 Auto Scaling :

  • Vous pouvez spécifier une AMI personnalisée de base sur laquelle l' CodeDeploy agent est déjà installé. L'agent étant déjà installé, cette option lance les nouvelles instances Amazon EC2 plus rapidement que l'autre option. Toutefois, cette option augmente le risque d'échec des déploiements initiaux d'instances Amazon EC2, en particulier si CodeDeploy l'agent n'est pas à jour. Si vous choisissez cette option, nous vous recommandons de mettre régulièrement à jour l' CodeDeploy agent dans votre AMI personnalisée de base.

  • Vous pouvez spécifier une AMI de base sur laquelle l' CodeDeploy agent n'est pas installé et l'installer lorsque chaque nouvelle instance est lancée dans un groupe Amazon EC2 Auto Scaling. Bien que cette option lance les nouvelles instances Amazon EC2 plus lentement que l'autre option, elle augmente les chances de réussite des déploiements initiaux d'instances. Cette option utilise la version la plus récente de l' CodeDeployagent.