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 vers des instances EC2 d'un groupe Amazon EC2 Auto Scaling peuvent échouer pour les raisons suivantes :

  • Amazon EC2 Auto Scaling lance et met fin en permanence aux instances EC2. Si vous CodeDeploy ne pouvez pas déployer automatiquement la révision de votre application, Amazon EC2 Auto Scaling lance et arrête en permanence les instances EC2.

    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 instances EC2). 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 instance EC2 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 instance EC2 d'un groupe Amazon EC2 Auto Scaling redémarre lors d'un déploiement. Votre déploiement peut échouer si une instance EC2 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 plus d’informations, consultez 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 instance EC2 dans un groupe Amazon EC2 Auto Scaling. Le déploiement simultané de plusieurs révisions d'application sur la même instance EC2 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 instances EC2 d'un groupe Amazon EC2 Auto Scaling.

  • Un déploiement échoue pour les nouvelles instances EC2 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'instances EC2 dans le groupe Amazon EC2 Auto Scaling. (Les autres instances EC2 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 l'AMI de manière à ce que l'agent soit dans son 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éé avec un modèle de lancement nécessitent les autorisations suivantes. Ces autorisations 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 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 l'état 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 instance EC2 qui ne fait pas partie du groupe Amazon EC2 Auto Scaling. Balisez l'instance avec une balise d'instance EC2 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 instance EC2 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 le démarrage de l'instance 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 si vous utilisez le service EC2Config pour définir le nom d'ordinateur de l'instance. Pour résoudre ce problème, dans l'AMI de base de Windows Server, sous l'onglet Général des propriétés du service EC2, 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 AMI de base Windows Server. 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 plus d’informations, consultez 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.

Les instances EC2 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 instances EC2, 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'instances EC2 trop rapidement. Les appels d'API 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 l' CodeDeploy API avec Java, appelez UpdateDeploymentGroup et définissez 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 instances EC2 qui n'ont pas pu être lancées. 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 déploiement. CodeDeploy

  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 des instances EC2 redimensionnées.

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

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 instances EC2 redimensionnées par le groupe Auto Scaling ne recevront pas les révisions de votre application. CodeDeploy Pour que Auto Scaling fonctionne à nouveau avec Auto Scaling 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 instances EC2 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 crochets du cycle de vie dans Amazon EC2 Auto Scaling correspondent. CodeDeploy 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 valeur correspondantehook.

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 dépannage 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 sont pas effectués 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 les instances EC2, les instances sur site 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é des instances EC2 défectueuses (par exemple, les instances EC2 présentaient des défaillances matérielles), les a donc toutes annulées, n'en laissant aucune dans l'InServiceétat.

    • Au cours d'un événement de 0 scale-out de à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 console Amazon EC2, 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 Setting capacity limits on your Auto Scaling group dans le manuel Amazon EC2 Auto Scaling User Guide.

  2. Si Auto Scaling continue d'essayer de lancer de nouvelles instances EC2 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 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.

    as autoscaling set-desired-capacity -- auto-scaling-group-name ASG_NAME --desired-capacity 1

    Note

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

    À ce stade, Auto Scaling tente de passer à une 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 instance EC2 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'instance EC2 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'instance EC2 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'instance EC2 :

    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 console Amazon EC2 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 savoir comment trouver ce paramètre, consultez la section Définition des limites de capacité sur votre groupe Auto Scaling.

  3. Définissez le nombre d'instances EC2 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 console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/ et choisissez Groupes Auto Scaling dans le panneau de navigation.

    2. Choisissez la région appropriée.

    3. Accédez au groupe Auto Scaling problématique.

    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 instance EC2 dépourvue de 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 des instances Amazon EC2 ou une instance sur site, puis ajoutez une balise Key of or. EC2 On-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'instance EC2 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'instance EC2 entre dans l'InServiceétat. Pour vérifier son état :

    1. Ouvrez la console Amazon EC2 à 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 Instances Amazon EC2 ou Instances sur site, recherchez le tag que vous avez ajouté et supprimez-le.

    9. Décochez la case à côté des instances Amazon EC2 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 console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/ et choisissez Groupes Auto Scaling dans le panneau 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.