Résoudre les problèmes de déploiement d'Amazon ECS - 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 de déploiement d'Amazon ECS

Un délai d'attente survient pendant l'attente d'un ensemble de tâches de remplacement

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.

Cause possible : Cette erreur peut se produire en cas d'erreur dans votre fichier de définition de tâche ou dans d'autres fichiers liés au déploiement. Par exemple, s'il y a une faute de frappe dans le image champ de votre fichier de définition de tâche, Amazon ECS essaiera d'extraire la mauvaise image de conteneur et échouera continuellement, ce qui provoquera cette erreur.

Corrections possibles et prochaines étapes :

  • Corrigez les erreurs typographiques et les problèmes de configuration dans votre fichier de définition des tâches et dans d'autres fichiers.

  • Consultez l'événement de service Amazon ECS correspondant et découvrez pourquoi les tâches de remplacement ne se portent pas bien. Pour plus d'informations sur les événements Amazon ECS, consultez les événements Amazon ECS dans le manuel Amazon Elastic Container Service Developer Guide.

  • Consultez la section relative au dépannage d'Amazon ECS du manuel Amazon Elastic Container Service Developer Guide pour détecter les erreurs liées aux messages de l'événement.

Un délai d'attente survient pendant l'attente de la poursuite d'une notification

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The deployment timed out while waiting for a notification to continue. This time out period is n minutes.

Cause possible : Cette erreur peut se produire si vous avez spécifié un temps d'attente dans le champ Spécifiez quand rediriger le trafic lorsque vous avez créé votre groupe de déploiement, mais que le déploiement n'a pas pu se terminer avant l'expiration du temps d'attente.

Corrections possibles et prochaines étapes :

Le rôle IAM ne dispose pas de suffisamment d'autorisations

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.

Cause possible : Cette erreur peut se produire si vous avez spécifié une fonction Lambda dans la Hookssection du AppSpec fichier, mais que vous n'avez pas CodeDeploy autorisé le service Lambda.

Solution possible : ajoutez l'lambda:InvokeFunctionautorisation au rôle CodeDeploy de service. Pour ajouter cette autorisation, ajoutez l'une des politiques AWS gérées suivantes au rôle : AWSCodeDeployRoleForECS ouAWSCodeDeployRoleForECSLimited. Pour plus d'informations sur ces politiques et sur la manière de les ajouter au rôle de CodeDeploy service, consultezÉtape 2 : créer un rôle de service pour CodeDeploy.

Le délai de déploiement a expiré en attendant un rappel de statut

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked.

Cause possible : Cette erreur peut se produire si vous avez spécifié une fonction Lambda dans la Hookssection du AppSpec fichier, mais que la fonction Lambda n'a pas pu appeler l'PutLifecycleEventHookExecutionStatusAPI nécessaire pour renvoyer un Succeeded statut ou à. Failed CodeDeploy

Corrections possibles et prochaines étapes :

  • Ajoutez l'codedeploy:putlifecycleEventHookExecutionStatusautorisation au rôle d'exécution Lambda utilisé par la fonction Lambda que vous avez spécifiée dans le fichier. AppSpec Cette autorisation permet à la fonction Lambda de renvoyer un statut de Succeeded ou Failed à. CodeDeploy Pour plus d'informations sur le rôle d'exécution Lambda, consultez la section Rôle d'exécution Lambda dans le Guide de l'utilisateur.AWS Lambda

  • Vérifiez le code de votre fonction Lambda et les journaux d'exécution pour vous assurer que votre fonction Lambda appelle l'PutLifecycleEventHookExecutionStatusAPI afin CodeDeploy de CodeDeploy savoir si le test de validation du cycle de vie est ou Succeeded Failed Pour plus d'informations sur l'putlifecycleEventHookExecutionStatusAPI, consultez PutLifecycleEventHookExecutionStatusla référence de l'AWS CodeDeploy API. Pour plus d'informations sur les journaux d'exécution Lambda, consultez la section Accès CloudWatch aux journaux Amazon pour. AWS Lambda

Le déploiement a échoué car une ou plusieurs fonctions de validation des événements du cycle de vie ont échoué

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The deployment failed because one or more of the lifecycle event validation functions failed.

Cause possible : Cette erreur peut se produire si vous avez spécifié une fonction Lambda dans la Hookssection du AppSpec fichier, mais que la fonction Lambda est revenue Failed à CodeDeploy son appel. PutLifecycleEventHookExecutionStatus Cet échec indique CodeDeploy que le test de validation du cycle de vie a échoué.

Étape suivante possible : consultez vos journaux d'exécution Lambda pour voir pourquoi le code du test de validation échoue. Pour plus d'informations sur les journaux d'exécution Lambda, consultez la section Accès CloudWatch aux journaux Amazon pour. AWS Lambda

L'ELB n'a pas pu être mis à jour en raison de l'erreur suivante : Le groupe cible de l'ensemble de tâches principal doit être derrière l'écouteur

Problème : le message d'erreur suivant s'affiche lors du déploiement de votre application Amazon ECS à l'aide de CodeDeploy :

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener

Cause possible : Cette erreur peut se produire si vous avez configuré un écouteur de test facultatif et qu'il est configuré avec le mauvais groupe cible. Pour plus d'informations sur l'écouteur de test intégré CodeDeploy, reportez-vous aux sections Avant de commencer un ECS déploiement sur Amazon etQue se passe-t-il lors d'un ECS déploiement Amazon. Pour plus d'informations sur les ensembles de tâches, consultez TaskSetle manuel Amazon Elastic Container Service API Reference et describe-task-setla section Amazon ECS du manuel AWS CLI Command Reference.

Solution possible : assurez-vous que l'écouteur de production et l'écouteur de test d'Elastic Load Balancing pointent tous deux vers le groupe cible qui gère actuellement vos charges de travail. Il y a trois endroits à vérifier :

Mon déploiement échoue parfois lorsque j'utilise Auto Scaling

Problème : vous utilisez Auto Scaling avec CodeDeploy et vous remarquez que vos déploiements échouent parfois. Pour plus d'informations sur les symptômes de ce problème, consultez la rubrique intitulée Pour les services configurés pour utiliser le dimensionnement automatique des services et le type de déploiement bleu/vert, le dimensionnement automatique n'est pas bloqué pendant un déploiement, mais le déploiement peut échouer dans certaines circonstances dans le manuel Amazon Elastic Container Service Developer Guide.

Cause possible : Ce problème peut survenir en cas de conflit entre les processus Auto Scaling CodeDeploy et Auto Scaling.

Solution possible : Suspendez et reprenez les processus Auto Scaling pendant le CodeDeploy déploiement à l'aide de l'RegisterScalableTargetAPI (ou de la register-scalable-target AWS CLI commande correspondante). Pour plus d'informations, voir Suspendre et reprendre le dimensionnement pour Application Auto Scaling dans le Guide de l'utilisateur d'Application Auto Scaling.

Note

CodeDeploy Je ne peux pas appeler RegisterScaleableTarget directement. Pour utiliser cette API, vous devez configurer CodeDeploy pour envoyer une notification ou un événement à Amazon Simple Notification Service (ou Amazon CloudWatch). Vous devez ensuite configurer Amazon SNS (or CloudWatch) pour appeler une fonction Lambda, et configurer la fonction Lambda pour appeler l'API. RegisterScalableTarget L'RegisterScalableTargetAPI doit être appelée avec le SuspendedState paramètre défini sur true pour suspendre les opérations Auto Scaling et les false reprendre.

La notification ou l'événement CodeDeploy envoyé doit se produire au démarrage d'un déploiement (pour déclencher les opérations de suspension d'Auto Scaling) ou lorsqu'un déploiement réussit, échoue ou s'arrête (pour déclencher les opérations de reprise d'Auto Scaling).

Pour plus d'informations sur la façon de configurer CodeDeploy pour générer des notifications ou des CloudWatch événements Amazon SNS, consultezSurveillance des déploiements avec Amazon CloudWatch Events. et. Monitoring Deployments with Amazon SNS Event Notifications

Seul ALB prend en charge le routage progressif du trafic. Utilisez plutôt le routage AllAtOnce du trafic lorsque vous créez/mettez à jour un groupe de déploiement

Problème : le message d'erreur suivant s'affiche lors de la création ou de la mise à jour d'un groupe de déploiement dans CodeDeploy :

Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.

Cause possible : Cette erreur peut se produire si vous utilisez un Network Load Balancer et que vous essayez d'utiliser une configuration de déploiement prédéfinie autre que. CodeDeployDefault.ECSAllAtOnce

Correctifs possibles :

Même si mon déploiement a réussi, l'ensemble de tâches de remplacement échoue aux tests de santé d'Elastic Load Balancing, et mon application est en panne

Problème : même si cela CodeDeploy indique que mon déploiement a réussi, l'ensemble de tâches de remplacement échoue aux tests de santé d'Elastic Load Balancing, et mon application est hors service.

Cause possible : ce problème peut se produire si vous avez effectué un CodeDeploy all-at-once déploiement et que votre ensemble de tâches de remplacement (vert) contient du code incorrect à l'origine de l'échec des tests de santé d'Elastic Load Balancing. Avec la configuration de all-at-once déploiement, les contrôles de santé de l'équilibreur de charge commencent à être exécutés sur l'ensemble de tâches de remplacement une fois que le trafic y a été transféré (c'est-à-dire après la survenue d'un événement CodeDeploy du AllowTraffic cycle de vie). C'est pourquoi les bilans de santé de l'ensemble de tâches de remplacement échoueront une fois que le trafic aura changé, mais pas avant. Pour plus d'informations sur les événements du cycle de vie qui sont CodeDeploy générés, consultezQue se passe-t-il lors d'un ECS déploiement Amazon.

Correctifs possibles :

  • Changez la configuration de votre déploiement all-at-once en Canary ou Linear. Dans une configuration Canary ou linéaire, les contrôles de santé de l'équilibreur de charge commencent à être exécutés sur l'ensemble de tâches de remplacement pendant l' CodeDeploy installation de votre application dans l'environnement de remplacement, et avant que le trafic ne soit déplacé (c'est-à-dire pendant l'événement Install du cycle de vie et avant l'AllowTrafficévénement). En autorisant l'exécution des vérifications pendant l'installation de l'application, mais avant que le trafic ne soit transféré, un code d'application incorrect sera détecté et provoquera des échecs de déploiement avant que l'application ne soit rendue publique.

    Pour plus d'informations sur la configuration des déploiements Canary ou Linear, consultezModifiez les paramètres du groupe de déploiement avec CodeDeploy.

    Pour plus d'informations sur les événements CodeDeploy du cycle de vie qui s'exécutent lors d'un déploiement d'Amazon ECS, consultezQue se passe-t-il lors d'un ECS déploiement Amazon.

    Note

    Les configurations de déploiement Canary et linéaire ne sont prises en charge qu'avec les équilibreurs de charge d'application.

  • Si vous souhaitez conserver votre configuration de all-at-once déploiement, configurez un écouteur de test et vérifiez l'état de santé de l'ensemble de tâches de remplacement à l'aide du hook du BeforeAllowTraffic cycle de vie. Pour plus d’informations, consultez Liste des accroches d'événements du cycle de vie pour un ECS déploiement sur Amazon.

Puis-je associer plusieurs équilibreurs de charge à un groupe de déploiement ?

Non Si vous souhaitez utiliser plusieurs équilibreurs de charge d'application ou de charge réseau, utilisez les mises à jour continues d'Amazon ECS au lieu de déploiements CodeDeploy bleu/vert. Pour plus d'informations sur les mises à jour continues, consultez la section Mise à jour progressive dans le manuel Amazon Elastic Container Service Developer Guide. Pour plus d'informations sur l'utilisation de plusieurs équilibreurs de charge avec Amazon ECS, consultez la section Enregistrement de plusieurs groupes cibles auprès d'un service dans le manuel Amazon Elastic Container Service Developer Guide.

Puis-je effectuer des déploiements CodeDeploy bleu/vert sans équilibreur de charge ?

Non, vous ne pouvez pas effectuer de déploiements CodeDeploy bleu/vert sans équilibreur de charge. Si vous ne parvenez pas à utiliser un équilibreur de charge, utilisez plutôt la fonctionnalité de mises à jour continues d'Amazon ECS. Pour plus d'informations sur les mises à jour continues d'Amazon ECS, consultez la section Mise à jour continue du manuel Amazon Elastic Container Service Developer Guide.

Comment puis-je mettre à jour mon service Amazon ECS avec de nouvelles informations lors d'un déploiement ?

Pour CodeDeploy mettre à jour votre service Amazon ECS avec un nouveau paramètre pendant qu'il effectue un déploiement, spécifiez le paramètre dans la resources section du AppSpec fichier. Seuls quelques paramètres Amazon ECS sont pris en charge CodeDeploy, tels que le fichier de définition des tâches et les paramètres du nom du conteneur. Pour obtenir la liste complète des paramètres Amazon ECS CodeDeploy pouvant être mis à jour, consultez AppSpec section « ressources » pour les ECS déploiements Amazon.

Note

Si vous devez mettre à jour votre service Amazon ECS avec un paramètre qui n'est pas pris en charge par CodeDeploy, effectuez les tâches suivantes :

  1. Appelez l'UpdateServiceAPI d'Amazon ECS avec le paramètre que vous souhaitez mettre à jour. Pour obtenir la liste complète des paramètres pouvant être mis à jour, consultez UpdateServicele manuel Amazon Elastic Container Service API Reference.

  2. Pour appliquer la modification aux tâches, créez un nouveau déploiement bleu/vert Amazon ECS. Pour plus d'informations, voir Création d'un déploiement Amazon ECS Compute Platform (console).