Résoudre les problèmes liés à 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.

Résoudre les problèmes liés à Amazon EC2 Auto Scaling

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 de cfn-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 :

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

  2. Ajoutez la nouvelle instance au groupe de déploiement affecté.

  3. 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 :

  1. 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églez autoScalingGroups surnew ArrayList<String>(). Cela permet autoScalingGroups 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 tel autoScalingGroups 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.

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

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

  4. 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 :

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

  2. 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 la hook 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 :

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

    1. Pour chaque nom de hook du cycle de vie indiqué dans la sortie de describe-lifecycle-hooks commande, appelez la delete-lifecycle-hookcommande.

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

  2. 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 :

    1. Appelez la update-deployment-groupcommande, mais ne spécifiez pas le nom du groupe Amazon EC2 Auto Scaling d'origine.

    2. 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 :

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

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

  3. 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
  1. 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 existeInService, 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.

  2. 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 :

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

    2. Si le nom du hook défaillant estCodeDeploy-managed-automatic-launch-deployment-hook-DEPLOYMENT_GROUP_NAME, 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é.

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

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

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

  3. Définissez le DesiredCapacityparamètre Auto Scaling sur1. 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 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 1

    Note

    Les étapes restantes de cette procédure supposent que vous avez défini votre valeur DesiredCapacitysur1.

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

  4. 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-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups

    Après avoir exécuté cette commande, voici ce qui se produit :

    1. CodeDeploy désenregistre le groupe Auto Scaling du groupe de déploiement.

    2. CodeDeploy supprime le hook du cycle de vie Auto Scaling du groupe Auto Scaling.

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

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

  6. 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-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups ASG_NAME

    Après avoir exécuté cette commande, voici ce qui se produit :

    1. CodeDeploy réinstalle le hook du cycle de vie Auto Scaling sur l'instance EC2

    2. CodeDeploy réenregistre le groupe Auto Scaling auprès du groupe de déploiement.

  7. 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-name DEPLOYMENT_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.

  8. 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-capacity ORIGINAL_CAPACITY

Pour résoudre le problème de blocage du déploiement (console)
  1. (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.

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

  3. 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 sur1.

    1. Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/et choisissez Auto Scaling Groups dans le volet de navigation.

    2. Choisissez la région appropriée.

    3. Accédez au groupe Auto Scaling qui pose problème.

    4. Dans Détails du groupe, choisissez Modifier.

    5. Réglez la capacité souhaitée sur1.

    6. Choisissez Mettre à jour.

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

    1. Ouvrez la CodeDeploy console à l'adresse https://console.aws.amazon.com/codedeploy/.

    2. Choisissez la région appropriée.

    3. Dans le volet de navigation, choisissez Applications.

    4. Choisissez le nom de votre CodeDeploy application.

    5. Choisissez le nom de votre groupe CodeDeploy de déploiement.

    6. Choisissez Modifier.

    7. 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 ou On-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 of EC2 orOn-premises. Vous pouvez laisser le tag Value vide.

    8. Sélectionnez Enregistrer les modifications.

      Une fois ces sous-étapes terminées, voici ce qui se produit :

      1. CodeDeploy désenregistre le groupe Auto Scaling du groupe de déploiement.

      2. CodeDeploy supprime le hook du cycle de vie Auto Scaling du groupe Auto Scaling.

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

  5. Attendez que l'EC2instance entre dans l'InServiceétat. Pour vérifier son état :

    1. Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/.

    2. Dans le panneau de navigation, choisissez Groupes Auto Scaling.

    3. Choisissez votre groupe Auto Scaling.

    4. Dans le volet de contenu, choisissez l'onglet Instance Management.

    5. Sous Instances, assurez-vous que la colonne Lifecycle est indiquée à InServicecôté de l'instance.

  6. 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 :

    1. Ouvrez la CodeDeploy console à l'adresse https://console.aws.amazon.com/codedeploy/.

    2. Choisissez la région appropriée.

    3. Dans le volet de navigation, choisissez Applications.

    4. Choisissez le nom de votre CodeDeploy application.

    5. Choisissez le nom de votre groupe CodeDeploy de déploiement.

    6. Choisissez Modifier.

    7. Dans Configuration de l'environnement, sélectionnez les groupes Amazon EC2 Auto Scaling et sélectionnez votre groupe Auto Scaling dans la liste.

    8. Sous EC2Instances Amazon ou Instances sur site, recherchez le tag que vous avez ajouté et supprimez-le.

    9. Décochez la case située à côté des EC2instances Amazon ou des instances sur site.

    10. Sélectionnez Enregistrer les modifications.

    Cette configuration réinstalle le hook du cycle de vie dans le groupe Auto Scaling.

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

    1. Dans la CodeDeploy console, sur la page Groupe de déploiement, choisissez Créer un déploiement.

    2. Pour Type de révision, choisissez Mon application est stockée dans Amazon S3.

    3. Pour Emplacement de la révision, sélectionnezs3://my-revision-bucket/httpd_app.zip.

    4. Pour le type de fichier de révision, sélectionnez.zip.

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

  8. Une fois le déploiement réussi, redimensionnez votre groupe Auto Scaling à sa capacité initiale, si vous l'avez déjà redimensionné :

    1. Ouvrez la EC2 console Amazon à l'adresse https://console.aws.amazon.com/ec2/et choisissez Auto Scaling Groups dans le volet de navigation.

    2. Choisissez la région appropriée.

    3. Accédez à votre groupe Auto Scaling.

    4. Dans Détails du groupe, choisissez Modifier.

    5. Rétablissez la capacité souhaitée à sa valeur initiale.

    6. Choisissez Mettre à jour.