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.
Résoudre les problèmes liés à Amazon EC2 Auto Scaling
Rubriques
- Résolution générale des problèmes liés à Amazon EC2 Auto Scaling
- « CodeDeployRole ne vous autorise pas à effectuer des opérations dans le AWS service suivant : AmazonAutoScaling » erreur
- Les instances d'un groupe Amazon EC2 Auto Scaling sont continuellement provisionnées et mises hors service avant qu'une révision ne puisse être déployée
- La mise hors service ou le redémarrage d'une instance Amazon EC2 Auto Scaling peut entraîner l'échec des déploiements
- Évitez d'associer plusieurs groupes de déploiement à un seul groupe Amazon EC2 Auto Scaling
- EC2les instances d'un groupe Amazon EC2 Auto Scaling ne se lancent pas et reçoivent l'erreur « Heartbeat Timeout »
- Des hooks de cycle de vie Amazon EC2 Auto Scaling mal adaptés peuvent entraîner l'arrêt ou l'échec des déploiements automatiques vers les groupes Amazon EC2 Auto Scaling
- Erreur « Le déploiement a échoué car aucune instance n'a été trouvée pour votre groupe de déploiement »
Résolution générale des problèmes liés à Amazon EC2 Auto Scaling
Les déploiements sur EC2 des instances d'un groupe Amazon EC2 Auto Scaling peuvent échouer pour les raisons suivantes :
-
Amazon EC2 Auto Scaling lance et met fin à des EC2 instances en permanence. Si vous CodeDeploy ne parvenez pas à déployer automatiquement la révision de votre application, Amazon EC2 Auto Scaling lance et arrête les EC2 instances en permanence.
Dissociez le groupe Amazon EC2 Auto Scaling du groupe de CodeDeploy déploiement ou modifiez la configuration de votre groupe Amazon EC2 Auto Scaling afin que le nombre d'instances souhaité corresponde au nombre actuel d'instances (empêchant ainsi Amazon EC2 Auto Scaling de lancer d'autres EC2 instances). Pour plus d'informations, consultez notre section Modifiez les paramètres du groupe de déploiement avec CodeDeploy Manual Scaling for Amazon EC2 Auto Scaling.
-
L' CodeDeploy agent ne répond pas. L' CodeDeploy agent risque de ne pas être installé si les scripts d'initialisation (par exemple, les scripts cloud-init) qui s'exécutent immédiatement après le lancement ou le démarrage d'une EC2 instance mettent plus d'une heure à s'exécuter. CodeDeploy dispose d'un délai d'une heure pour que l' CodeDeploy agent réponde aux déploiements en attente. Pour résoudre ce problème, déplacez vos scripts d'initialisation dans la révision de votre CodeDeploy application.
-
Une EC2 instance d'un groupe Amazon EC2 Auto Scaling redémarre lors d'un déploiement. Votre déploiement peut échouer si une EC2 instance est redémarrée pendant un déploiement ou si l' CodeDeploy agent est arrêté pendant le traitement d'une commande de déploiement. Pour de plus amples informations, veuillez consulter La mise hors service ou le redémarrage d'une instance Amazon EC2 Auto Scaling peut entraîner l'échec des déploiements.
-
Plusieurs révisions d'applications sont déployées simultanément sur la même EC2 instance au sein d'un groupe Amazon EC2 Auto Scaling. Le déploiement simultané de plusieurs révisions d'applications sur la même EC2 instance d'un groupe Amazon EC2 Auto Scaling peut échouer si l'un des déploiements comporte des scripts qui s'exécutent pendant plus de quelques minutes. Ne déployez pas plusieurs révisions d'applications sur les mêmes EC2 instances d'un groupe Amazon EC2 Auto Scaling.
-
Un déploiement échoue pour les nouvelles EC2 instances lancées dans le cadre d'un groupe Amazon EC2 Auto Scaling. Dans ce scénario, l'exécution des scripts dans un déploiement peut empêcher le lancement d'EC2instances dans le groupe Amazon EC2 Auto Scaling. (D'autres EC2 instances du groupe Amazon EC2 Auto Scaling peuvent sembler fonctionner normalement.) Pour résoudre ce problème, veillez à ce que tous les autres scripts se terminent en premier :
-
CodeDeploy l'agent n'est pas inclus dans votre AMI : si vous utilisez la cfn-init commande pour installer l' CodeDeploy agent lors du lancement d'une nouvelle instance, placez le script d'installation de l'agent à la fin de la
cfn-init
section de votre AWS CloudFormation modèle. -
CodeDeploy l'agent est inclus dans votre AMI : configurez le AMI pour que l'agent soit dans un
Stopped
état lorsque l'instance est créée, puis incluez un script pour démarrer l'agent comme dernière étape dans votre bibliothèque decfn-init
scripts.
-
« CodeDeployRole ne vous autorise pas à effectuer des opérations dans le AWS service suivant : AmazonAutoScaling » erreur
Les déploiements qui utilisent un groupe Auto Scaling créé à l'aide d'un modèle de lancement nécessitent les autorisations suivantes. Elles s'ajoutent aux autorisations accordées par la politique AWSCodeDeployRole
AWS gérée.
-
EC2:RunInstances
-
EC2:CreateTags
-
iam:PassRole
Il se peut que vous receviez cette erreur si vous ne disposez pas ces autorisations. Pour plus d'informationsTutoriel : CodeDeploy À utiliser pour déployer une application dans un groupe Auto Scaling, consultez Création d'un modèle de lancement pour un groupe Auto Scaling et Permissions dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.
Les instances d'un groupe Amazon EC2 Auto Scaling sont continuellement provisionnées et mises hors service avant qu'une révision ne puisse être déployée
Dans certains cas, une erreur peut empêcher un déploiement réussi sur des instances nouvellement provisionnées dans un groupe Amazon EC2 Auto Scaling. En conséquence, aucune instance n'est saine et aucun déploiement n'est réussi. Le déploiement ne pouvant pas être exécuté ou terminé, les instances sont terminées peu de temps après leur création. La configuration du groupe Amazon EC2 Auto Scaling entraîne ensuite le provisionnement d'un autre lot d'instances pour tenter de répondre aux exigences minimales en matière d'hôtes sains. Ce lot est également terminé et le cycle se poursuit.
Les causes possibles incluent :
-
Échec des vérifications de santé du groupe Amazon EC2 Auto Scaling.
-
Erreur dans la révision d'application.
Pour résoudre ce problème, suivez les étapes suivantes :
-
Créez manuellement une EC2 instance qui ne fait pas partie du groupe Amazon EC2 Auto Scaling. Marquez l'instance avec une balise d'EC2instance unique.
-
Ajoutez la nouvelle instance au groupe de déploiement affecté.
-
Déployez une nouvelle révision d'application sans erreur dans le groupe de déploiement.
Cela invite le groupe Amazon EC2 Auto Scaling à déployer la révision de l'application sur les futures instances du groupe Amazon EC2 Auto Scaling.
Note
Après avoir confirmé que les déploiements sont réussis, supprimez l'instance que vous avez créée afin d'éviter des frais permanents sur votre AWS compte.
La mise hors service ou le redémarrage d'une instance Amazon EC2 Auto Scaling peut entraîner l'échec des déploiements
Si une EC2 instance est lancée via Amazon EC2 Auto Scaling, puis qu'elle est arrêtée ou redémarrée, les déploiements vers cette instance peuvent échouer pour les raisons suivantes :
-
Au cours d'un déploiement en cours, un événement de scale-in ou tout autre événement de résiliation entraîne le détachement de l'instance du groupe Amazon EC2 Auto Scaling, puis son arrêt. Comme le déploiement ne peut pas être terminé, il échoue.
-
L'instance est redémarrée, mais son démarrage prend plus de cinq minutes. CodeDeploy traite cela comme un délai d'attente. Le service considère tous les déploiements actuels et futurs sur l'instance comme ayant échoué.
Pour résoudre ce problème :
-
En général, assurez-vous que tous les déploiements sont terminés avant la mise hors service ou le redémarrage de l'instance. Assurez-vous que tous les déploiements commencent après le démarrage ou le redémarrage de l'instance.
-
Les déploiements peuvent échouer si vous spécifiez une Amazon Machine Image (AMI) basée sur Windows Server pour une configuration Amazon EC2 Auto Scaling et que vous utilisez le EC2Config service pour définir le nom d'ordinateur de l'instance. Pour résoudre ce problème, dans la base de Windows ServerAMI, sous l'onglet Général des propriétés du EC2 service, désactivez l'option Définir le nom de l'ordinateur. Une fois que vous avez décoché cette case, ce comportement est désactivé pour toutes les nouvelles instances Amazon EC2 Auto Scaling de Windows Server lancées avec cette base Windows ServerAMI. Pour les instances Amazon EC2 Auto Scaling de Windows Server sur lesquelles ce comportement est activé, il n'est pas nécessaire de décocher cette case. Il vous suffit de redéployer les déploiements ayant échoué sur ces instances après qu'elles ont été redémarrées.
Évitez d'associer plusieurs groupes de déploiement à un seul groupe Amazon EC2 Auto Scaling
Il est recommandé d'associer un seul groupe de déploiement à chaque groupe Amazon EC2 Auto Scaling.
En effet, si Amazon EC2 Auto Scaling augmente le volume d'une instance comportant des hooks associés à plusieurs groupes de déploiement, il envoie des notifications pour tous les hooks en une seule fois. Cela entraîne le commencement simultané de plusieurs déploiements sur chaque instance. Lorsque plusieurs déploiements envoient des commandes à l' CodeDeploy agent en même temps, le délai de cinq minutes entre un événement du cycle de vie et le début du déploiement ou la fin de l'événement du cycle de vie précédent peut être atteint. Le cas échéant, le déploiement est mis en échec, même si un processus de déploiement se déroule par ailleurs sans difficulté.
Note
Le délai d'expiration par défaut d'un script dans un événement du cycle de vie est de 30 minutes. Vous pouvez remplacer le délai d'expiration par une autre valeur dans le AppSpec fichier. Pour de plus amples informations, veuillez consulter Ajouter un AppSpec fichier pour un déploiement EC2/sur site.
Il n'est pas possible de contrôler l'ordre dans lequel les déploiements se produisent si plusieurs déploiements tentent de s'exécuter en même temps.
Enfin, si le déploiement sur une instance échoue, Amazon EC2 Auto Scaling met immédiatement fin à l'instance. Lorsque cette première instance s'arrête, les autres déploiements en cours d’exécution échouent progressivement. Étant donné que l' CodeDeploy agent CodeDeploy dispose d'un délai d'une heure pour répondre aux déploiements en attente, le délai d'expiration de chaque instance peut prendre jusqu'à 60 minutes.
Pour plus d'informations sur Amazon EC2 Auto Scaling, consultez Under the hood : CodeDeploy and Auto Scaling integration
EC2les instances d'un groupe Amazon EC2 Auto Scaling ne se lancent pas et reçoivent l'erreur « Heartbeat Timeout »
Il se peut qu'un groupe Amazon EC2 Auto Scaling ne parvienne pas à lancer de nouvelles EC2 instances, générant un message similaire au suivant :
Launching a new EC2 instance
. <instance-Id>
. Status Reason: Instance failed to
complete user's Lifecycle Action: Lifecycle Action with
token<token-Id>
was abandoned: Heartbeat
Timeout
Ce message indique généralement l'une des situations suivantes :
-
Le nombre maximum de déploiements simultanés associés à un AWS compte a été atteint. Pour plus d'informations sur les limites, consultez CodeDeploy quotas.
-
Le groupe Auto Scaling a essayé de lancer trop d'EC2instances trop rapidement. Les API appels vers RecordLifecycleActionHeartbeatou CompleteLifecycleActionpour chaque nouvelle instance ont été limités.
-
Une application CodeDeploy a été supprimée avant que les groupes de déploiement associés ne soient mis à jour ou supprimés.
Lorsque vous supprimez une application ou un groupe de déploiement, vous CodeDeploy tentez de nettoyer tous les hooks Amazon EC2 Auto Scaling qui y sont associés, mais certains hooks peuvent subsister. Si vous exécutez une commande pour supprimer un groupe de déploiement, les hooks restants sont renvoyés dans la sortie. Toutefois, si vous exécutez une commande pour supprimer une application, les hooks restants n'apparaissent pas dans la sortie.
Par conséquent, la bonne pratique consiste à supprimer tous les groupes de déploiement associés à une application avant de supprimer l'application. Vous pouvez utiliser la sortie de la commande pour identifier les hooks du cycle de vie qui doivent être supprimés manuellement.
Si vous recevez un message d'erreur « Heartbeat Timeout », vous pouvez déterminer si les hooks de cycle de vie restants en sont la cause et résoudre le problème en procédant comme suit :
-
Effectuez l’une des actions suivantes :
-
Appelez la delete-deployment-groupcommande pour supprimer le groupe de déploiement associé au groupe Auto Scaling à l'origine du délai d'expiration du rythme cardiaque.
-
Appelez la update-deployment-groupcommande avec une liste vide non nulle de noms de groupes Auto Scaling pour détacher tous les hooks du cycle de vie Auto CodeDeploy Scaling gérés par Auto Scaling.
Par exemple, entrez la AWS CLI commande suivante :
aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups
Autre exemple, si vous utilisez le CodeDeploy API avec Java, appelez
UpdateDeploymentGroup
et réglezautoScalingGroups
surnew ArrayList<String>()
. Cela permetautoScalingGroups
de définir une liste vide et de supprimer la liste existante. Ne l'utilisez pasnull
, ce qui est le cas par défaut, car cela reste telautoScalingGroups
quel, ce qui n'est pas ce que vous voulez.
Examinez la sortie de l'appel. Si la sortie contient une
hooksNotCleanedUp
structure avec une liste des hooks du cycle de vie d'Amazon EC2 Auto Scaling, il reste des hooks du cycle de vie. -
-
Appelez la describe-lifecycle-hookscommande en spécifiant le nom du groupe Amazon EC2 Auto Scaling associé aux EC2 instances dont le lancement a échoué. Dans le résultat, recherchez l'un des éléments suivants :
-
Les noms des hooks du cycle de vie d'Amazon EC2 Auto Scaling correspondent à la
hooksNotCleanedUp
structure que vous avez identifiée à l'étape 1. -
Noms des hooks du cycle de vie Amazon EC2 Auto Scaling contenant le nom du groupe de déploiement associé au groupe Auto Scaling défaillant.
-
Noms des hooks du cycle de vie d'Amazon EC2 Auto Scaling susceptibles d'avoir provoqué le délai d'expiration du CodeDeploy déploiement.
-
-
Si un hook appartient à l'une des catégories répertoriées à l'étape 2, appelez la delete-lifecycle-hookcommande pour le supprimer. Spécifiez le groupe Amazon EC2 Auto Scaling et le hook du cycle de vie dans l'appel.
Important
Supprimez uniquement les hooks qui posent problème, comme indiqué à l'étape 2. Si vous supprimez des hooks viables, vos déploiements risquent d' CodeDeploy échouer ou de ne pas être en mesure de déployer les révisions de votre application sur EC2 des instances évolutives.
-
Appelez la create-deployment-groupcommande update-deployment-groupou avec les noms de groupes Auto Scaling souhaités. CodeDeployréinstalle les hooks Auto Scaling avec de nouveaux. UUIDs
Note
Si vous dissociez un groupe Auto Scaling d'un groupe de CodeDeploy déploiement, les déploiements en cours vers le groupe Auto Scaling risquent d'échouer et les nouvelles EC2 instances redimensionnées par le groupe Auto Scaling ne recevront pas les révisions de votre application. CodeDeploy Pour que Auto Scaling fonctionne à nouveau CodeDeploy, vous devez rattacher le groupe Auto Scaling au groupe de déploiement et appeler un nouveau groupe CreateDeployment
pour démarrer un déploiement à l'échelle du parc.
Des hooks de cycle de vie Amazon EC2 Auto Scaling mal adaptés peuvent entraîner l'arrêt ou l'échec des déploiements automatiques vers les groupes Amazon EC2 Auto Scaling
Amazon EC2 Auto Scaling et CodeDeploy utilisez des hooks de cycle de vie pour déterminer quelles révisions d'applications doivent être déployées sur quelles EC2 instances après leur lancement dans les groupes Amazon EC2 Auto Scaling. Les déploiements automatiques peuvent s'arrêter ou échouer si les hooks du cycle de vie et les informations les concernant ne correspondent pas exactement dans Amazon EC2 Auto Scaling et CodeDeploy.
Si les déploiements vers un groupe Amazon EC2 Auto Scaling échouent, vérifiez si les noms des hooks du cycle de vie dans Amazon EC2 Auto Scaling CodeDeploy correspondent. Si ce n'est pas le cas, utilisez ces appels de AWS CLI commande.
Tout d'abord, obtenez la liste des noms des hooks du cycle de vie pour le groupe Amazon EC2 Auto Scaling et le groupe de déploiement :
-
Appelez la describe-lifecycle-hookscommande en spécifiant le nom du groupe Amazon EC2 Auto Scaling associé au groupe de déploiement dans CodeDeploy. Dans la sortie, dans la liste
LifecycleHooks
, notez chaque valeurLifecycleHookName
. -
Appelez la get-deployment-groupcommande en spécifiant le nom du groupe de déploiement associé au groupe Amazon EC2 Auto Scaling. Dans la sortie, dans la
autoScalingGroups
liste, recherchez chaque élément dont le nom correspond au nom du groupe Amazon EC2 Auto Scaling, puis notez lahook
valeur correspondante.
Comparez alors les deux ensembles de noms de hooks de cycle de vie. S'ils correspondent exactement, caractère par caractère, le problème est ailleurs. Vous pouvez essayer d'autres étapes de résolution des problèmes d'Amazon EC2 Auto Scaling décrites ailleurs dans cette section.
Toutefois, si les deux ensembles de noms de hooks de cycle de vie ne correspondent pas exactement, caractère par caractère, procédez comme suit :
-
Si des noms de hooks de cycle de vie figurent dans la sortie de la commande describe-lifecycle-hooks qui ne figurent pas également dans la sortie de la commande get-deployment-group, procédez comme suit :
-
Pour chaque nom de hook du cycle de vie indiqué dans la sortie de describe-lifecycle-hooks commande, appelez la delete-lifecycle-hookcommande.
-
Appelez la update-deployment-groupcommande en spécifiant le nom du groupe Amazon EC2 Auto Scaling d'origine. CodeDeploy crée de nouveaux hooks de cycle de vie de remplacement dans le groupe Amazon EC2 Auto Scaling et associe les crochets de cycle de vie au groupe de déploiement. Les déploiements automatiques devraient maintenant reprendre à mesure que de nouvelles instances sont ajoutées au groupe Amazon EC2 Auto Scaling.
-
-
Si des noms de hooks de cycle de vie figurent dans la sortie de la commande get-deployment-group, mais ne figurent pas dans la sortie de la commande describe-lifecycle-hooks, procédez comme suit :
-
Appelez la update-deployment-groupcommande, mais ne spécifiez pas le nom du groupe Amazon EC2 Auto Scaling d'origine.
-
Appelez à nouveau la update-deployment-group commande, mais spécifiez cette fois le nom du groupe Amazon EC2 Auto Scaling d'origine. CodeDeploy recrée les hooks du cycle de vie manquants dans le groupe Amazon EC2 Auto Scaling. Les déploiements automatiques devraient maintenant reprendre à mesure que de nouvelles instances sont ajoutées au groupe Amazon EC2 Auto Scaling.
-
Une fois que les deux ensembles de noms de hooks du cycle de vie correspondent exactement, caractère par caractère, les révisions de l'application doivent être déployées à nouveau, mais uniquement sur les nouvelles instances au fur et à mesure qu'elles sont ajoutées au groupe Amazon EC2 Auto Scaling. Les déploiements ne se font pas automatiquement sur des instances qui font déjà partie du groupe Amazon EC2 Auto Scaling.
Erreur « Le déploiement a échoué car aucune instance n'a été trouvée pour votre groupe de déploiement »
Lisez cette section si le message d' CodeDeploy erreur suivant s'affiche :
The deployment failed because no instances were found for your deployment group.
Check your deployment group settings to make sure the tags for your EC2 instances
or Auto Scaling groups correctly identify the instances you want to deploy to, and then try
again.
Les causes possibles de cette erreur sont les suivantes :
-
Les paramètres de votre groupe de déploiement incluent des balises incorrectes pour EC2 les instances, les instances locales ou les groupes Auto Scaling. Pour résoudre ce problème, vérifiez que vos balises sont correctes, puis redéployez votre application.
-
Votre flotte s'est agrandie après le début du déploiement. Dans ce scénario, vous voyez des instances saines dans l'
InService
état de votre flotte, mais vous voyez également l'erreur ci-dessus. Pour résoudre ce problème, redéployez votre application. -
Votre groupe Auto Scaling n'inclut aucune instance présente dans
InService
cet état. Dans ce scénario, lorsque vous essayez d'effectuer un déploiement à l'échelle du parc, le déploiement échoue avec le message d'erreur ci-dessus car il CodeDeploy faut qu'au moins une instance soit dans cet état.InService
Il existe de nombreuses raisons pour lesquelles vous n'avez peut-être aucune instance dans l'InService
État. Quelques-uns d'entre eux incluent :-
Vous avez planifié (ou configuré manuellement) la taille du groupe Auto Scaling comme suit
0
: -
Auto Scaling a détecté EC2 des instances défectueuses (par exemple, des défaillances matérielles), les a donc toutes annulées, n'en laissant aucune dans l'
InService
état. EC2 -
Lors d'un événement de scale-out de
0
à1
, a CodeDeploy déployé une révision précédemment réussie (appelée dernière révision réussie) qui était devenue défectueuse depuis le dernier déploiement. Cela a entraîné l'échec du déploiement sur l'instance redimensionnée, ce qui a entraîné l'annulation de l'instance par Auto Scaling, ne laissant aucune instance dans cet état.InService
Si vous constatez qu'aucune instance n'est présente dans
InService
cet état, résolvez le problème comme décrit dans la procédure suivante,To troubleshoot the error if there are no instances in the InService state.
-
Pour résoudre l'erreur s'il n'y a aucune instance dans l'état InService
-
Dans la EC2 console Amazon, vérifiez le paramètre Capacité souhaitée. S'il est égal à zéro, définissez-le sur un nombre positif. Attendez que l'instance existe
InService
, ce qui signifie que le déploiement a réussi. Vous avez résolu le problème et pouvez ignorer les étapes restantes de cette procédure de dépannage. Pour plus d'informations sur la définition du paramètre Desired Capacity, consultez la section Définition des limites de capacité sur votre groupe Auto Scaling dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling. -
Si Auto Scaling continue d'essayer de lancer de nouvelles EC2 instances pour atteindre la capacité souhaitée mais ne parvient jamais à le faire évoluer, cela est généralement dû à un échec du hook du cycle de vie d'Auto Scaling. Résolvez ce problème comme suit :
-
Pour savoir quel événement Auto Scaling Lifecycle Hook échoue, consultez la section Vérification d'une activité de dimensionnement pour un groupe Auto Scaling dans le guide de l'utilisateur d'Amazon EC2 Auto Scaling.
-
Si le nom du hook défaillant est
CodeDeploy-managed-automatic-launch-deployment-hook-
, accédez au groupe de déploiement CodeDeploy, recherchez le groupe de déploiement et recherchez le déploiement ayant échoué lancé par Auto Scaling. Déterminez ensuite pourquoi le déploiement a échoué.DEPLOYMENT_GROUP_NAME
-
Si vous comprenez pourquoi le déploiement a échoué (par exemple, des CloudWatch alarmes se sont produites) et que vous pouvez résoudre le problème sans modifier la révision, faites-le maintenant.
-
Si, après enquête, vous déterminez que CodeDeploy la dernière révision réussie n'est plus saine et qu'il n'y a aucune instance saine dans votre groupe Auto Scaling, vous êtes dans un scénario de blocage du déploiement. Pour résoudre ce problème, vous devez corriger la mauvaise CodeDeploy révision en supprimant temporairement le hook CodeDeploy du cycle de vie du groupe Auto Scaling, puis en le réinstallant et en redéployant une nouvelle (bonne) révision. Pour obtenir des instructions, consultez :
-
Pour résoudre le problème de blocage du déploiement () CLI
-
(Facultatif) Bloquez les pipelines CI/CD à l'origine de l' CodeDeploy erreur afin d'éviter des déploiements inattendus pendant que vous résolvez ce problème.
-
Prenez note de votre DesiredCapacityparamètre Auto Scaling actuel :
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
ASG_NAME
Vous devrez peut-être revenir à ce chiffre à la fin de cette procédure.
-
Définissez le DesiredCapacityparamètre Auto Scaling sur
1
. Cette option est facultative si la capacité souhaitée était supérieure1
à la capacité initiale. En le réduisant à1
, l'instance mettra moins de temps à provisionner et à déployer ultérieurement, ce qui accélère le dépannage. Si la capacité souhaitée par Auto Scaling était initialement définie sur0
, vous devez l'augmenter à1
. Cela est obligatoire.en tant que mise à l'échelle automatique set-desired-capacity -- auto-scaling-group-name
ASG_NAME
--capacité souhaitée 1Note
Les étapes restantes de cette procédure supposent que vous avez défini votre valeur DesiredCapacitysur
1
.À ce stade, Auto Scaling tente d'effectuer une mise à l'échelle jusqu'à une seule instance. Ensuite, comme le hook CodeDeploy ajouté est toujours présent, CodeDeploy essaie de se déployer ; le déploiement échoue ; Auto Scaling annule l'instance ; et Auto Scaling essaie de relancer une instance pour atteindre la capacité souhaitée d'une instance, mais échoue à nouveau. Vous êtes dans une boucle d'annulation/relance.
-
Désenregistrez le groupe Auto Scaling du groupe de déploiement :
Avertissement
La commande suivante lancera une nouvelle EC2 instance sans logiciel. Avant d'exécuter la commande, assurez-vous qu'une
InService
instance Auto Scaling n'exécutant aucun logiciel est acceptable. Par exemple, assurez-vous que l'équilibreur de charge associé à l'instance n'envoie pas de trafic vers cet hôte sans logiciel.Important
Utilisez la CodeDeploy commande ci-dessous pour retirer le crochet. Ne supprimez pas le crochet via le service Auto Scaling, car le retrait ne sera pas reconnu par CodeDeploy.
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsAprès avoir exécuté cette commande, voici ce qui se produit :
-
CodeDeploy désenregistre le groupe Auto Scaling du groupe de déploiement.
-
CodeDeploy supprime le hook du cycle de vie Auto Scaling du groupe Auto Scaling.
-
Le hook à l'origine de l'échec du déploiement n'étant plus présent, Auto Scaling annule l'EC2instance existante et en lance immédiatement une nouvelle pour l'adapter à la capacité souhaitée. La nouvelle instance devrait bientôt passer à
InService
l'état. La nouvelle instance n'inclut aucun logiciel.
-
-
Attendez que l'EC2instance entre dans l'
InService
état. Pour vérifier son état, utilisez la commande suivante :aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names
ASG_NAME
--query AutoScalingGroups[0].Instances[*].LifecycleState -
Ajoutez le hook à nouveau à l'EC2instance :
Important
Utilisez la CodeDeploy commande ci-dessous pour ajouter le crochet. N'utilisez pas le service Auto Scaling pour ajouter le hook, car l'ajout ne sera pas reconnu par CodeDeploy.
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsASG_NAME
Après avoir exécuté cette commande, voici ce qui se produit :
-
CodeDeploy réinstalle le hook du cycle de vie Auto Scaling sur l'instance EC2
-
CodeDeploy réenregistre le groupe Auto Scaling auprès du groupe de déploiement.
-
-
Créez un déploiement à l'échelle du parc à l'aide de l'Amazon S3 ou de GitHub la version dont vous savez qu'elle est saine et que vous souhaitez utiliser.
Par exemple, si la révision est un fichier .zip dans un compartiment Amazon S3 appelé
my-revision-bucket
avec une clé d'objet dehttpd_app.zip
, entrez la commande suivante :aws deploy create-deployment --application-name
APPLICATION_NAME
--deployment-group-nameDEPLOYMENT_GROUP_NAME
--revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"Comme il existe désormais une
InService
instance dans le groupe Auto Scaling, ce déploiement devrait fonctionner et le message d'erreur « Le déploiement a échoué car aucune instance n'a été trouvée pour votre groupe de déploiement » ne devrait plus s'afficher. -
Une fois le déploiement réussi, redimensionnez votre groupe Auto Scaling à sa capacité initiale, si vous l'avez déjà redimensionné :
aws autoscaling set-desired-capacity --auto-scaling-group-name
ASG_NAME
--desired-capacityORIGINAL_CAPACITY
Pour résoudre le problème de blocage du déploiement (console)
-
(Facultatif) Bloquez les pipelines CI/CD à l'origine de l' CodeDeploy erreur afin d'éviter des déploiements inattendus pendant que vous résolvez ce problème.
-
Accédez à la EC2 console Amazon et prenez note de votre paramètre de capacité Auto Scaling Desired. Vous devrez peut-être revenir à ce chiffre à la fin de cette procédure. Pour plus d'informations sur la recherche de ce paramètre, consultez la section Définition des limites de capacité sur votre groupe Auto Scaling.
-
Définissez le nombre d'EC2instances souhaité comme suit
1
:Cette option est facultative si la capacité souhaitée était supérieure
1
à la capacité initiale. En le réduisant à1
, l'instance mettra moins de temps à provisionner et à déployer ultérieurement, ce qui accélère le dépannage. Si votre capacité Auto Scaling Desired était initialement définie sur0
, vous devez l'augmenter à1
. Cela est obligatoire.Note
Les étapes restantes de cette procédure supposent que vous avez défini la capacité souhaitée sur
1
.Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/
et choisissez Auto Scaling Groups dans le volet de navigation. -
Choisissez la région appropriée.
-
Accédez au groupe Auto Scaling qui pose problème.
-
Dans Détails du groupe, choisissez Modifier.
-
Réglez la capacité souhaitée sur
1
. -
Choisissez Mettre à jour.
-
Désenregistrez le groupe Auto Scaling du groupe de déploiement :
Avertissement
Les sous-étapes suivantes lanceront une nouvelle EC2 instance sans logiciel. Avant d'exécuter la commande, assurez-vous qu'une
InService
instance Auto Scaling n'exécutant aucun logiciel est acceptable. Par exemple, assurez-vous que l'équilibreur de charge associé à l'instance n'envoie pas de trafic vers cet hôte sans logiciel.Ouvrez la CodeDeploy console à l'adresse https://console.aws.amazon.com/codedeploy/
. -
Choisissez la région appropriée.
-
Dans le volet de navigation, choisissez Applications.
-
Choisissez le nom de votre CodeDeploy application.
-
Choisissez le nom de votre groupe CodeDeploy de déploiement.
-
Choisissez Modifier.
-
Dans Configuration de l'environnement, désélectionnez les groupes Amazon EC2 Auto Scaling.
Note
La console ne vous permet pas d'enregistrer la configuration si aucune configuration d'environnement n'est définie. Pour contourner cette vérification, ajoutez temporairement un tag de
EC2
ouOn-premises
dont vous savez qu'il ne sera résolu à aucun hôte. Pour ajouter une balise, sélectionnez les EC2instances Amazon ou les instances sur site, puis ajoutez une balise Key ofEC2
orOn-premises
. Vous pouvez laisser le tag Value vide. -
Sélectionnez Enregistrer les modifications.
Une fois ces sous-étapes terminées, voici ce qui se produit :
-
CodeDeploy désenregistre le groupe Auto Scaling du groupe de déploiement.
-
CodeDeploy supprime le hook du cycle de vie Auto Scaling du groupe Auto Scaling.
-
Le hook à l'origine de l'échec du déploiement n'étant plus présent, Auto Scaling annule l'EC2instance existante et en lance immédiatement une nouvelle pour l'adapter à la capacité souhaitée. La nouvelle instance devrait bientôt passer à
InService
l'état. La nouvelle instance n'inclut aucun logiciel.
-
-
Attendez que l'EC2instance entre dans l'
InService
état. Pour vérifier son état :-
Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/
. -
Dans le panneau de navigation, choisissez Groupes Auto Scaling.
-
Choisissez votre groupe Auto Scaling.
-
Dans le volet de contenu, choisissez l'onglet Instance Management.
-
Sous Instances, assurez-vous que la colonne Lifecycle est indiquée à InServicecôté de l'instance.
-
-
Réenregistrez le groupe Auto Scaling auprès du groupe de CodeDeploy déploiement en utilisant la même méthode que celle que vous avez utilisée pour le supprimer :
Ouvrez la CodeDeploy console à l'adresse https://console.aws.amazon.com/codedeploy/
. -
Choisissez la région appropriée.
-
Dans le volet de navigation, choisissez Applications.
-
Choisissez le nom de votre CodeDeploy application.
-
Choisissez le nom de votre groupe CodeDeploy de déploiement.
-
Choisissez Modifier.
-
Dans Configuration de l'environnement, sélectionnez les groupes Amazon EC2 Auto Scaling et sélectionnez votre groupe Auto Scaling dans la liste.
-
Sous EC2Instances Amazon ou Instances sur site, recherchez le tag que vous avez ajouté et supprimez-le.
-
Décochez la case située à côté des EC2instances Amazon ou des instances sur site.
-
Sélectionnez Enregistrer les modifications.
Cette configuration réinstalle le hook du cycle de vie dans le groupe Auto Scaling.
-
Créez un déploiement à l'échelle du parc à l'aide de l'Amazon S3 ou de GitHub la version dont vous savez qu'elle est saine et que vous souhaitez utiliser.
Par exemple, si la révision est un fichier .zip dans un compartiment Amazon S3 appelé
my-revision-bucket
avec une clé d'objet dehttpd_app.zip
, procédez comme suit :-
Dans la CodeDeploy console, sur la page Groupe de déploiement, choisissez Créer un déploiement.
-
Pour Type de révision, choisissez Mon application est stockée dans Amazon S3.
-
Pour Emplacement de la révision, sélectionnez
s3://my-revision-bucket/httpd_app.zip
. -
Pour le type de fichier de révision, sélectionnez
.zip
. -
Choisissez Créer un déploiement.
Comme il existe désormais une
InService
instance dans le groupe Auto Scaling, ce déploiement devrait fonctionner et le message d'erreur « Le déploiement a échoué car aucune instance n'a été trouvée pour votre groupe de déploiement » ne devrait plus s'afficher. -
-
Une fois le déploiement réussi, redimensionnez votre groupe Auto Scaling à sa capacité initiale, si vous l'avez déjà redimensionné :
-
Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/
et choisissez Auto Scaling Groups dans le volet de navigation. -
Choisissez la région appropriée.
-
Accédez à votre groupe Auto Scaling.
-
Dans Détails du groupe, choisissez Modifier.
-
Rétablissez la capacité souhaitée à sa valeur initiale.
-
Choisissez Mettre à jour.
-