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
Rubriques
Un délai d'attente se produit pendant l'attente de l'ensemble de tâches de remplacement
Un délai d'attente se produit pendant l'attente de la poursuite de la notification
Le délai de déploiement a expiré en attendant un rappel de statut
Mon déploiement échoue parfois lorsque j'utilise Auto Scaling
Puis-je associer plusieurs équilibreurs de charge à un groupe de déploiement ?
Puis-je effectuer des CodeDeploy blue/green déploiements sans équilibreur de charge ?
Un délai d'attente se produit pendant l'attente de l'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 si une erreur se trouve dans votre fichier de définition de tâches 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 de 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 fonctionnent pas correctement. Pour plus d'informations sur les événements Amazon ECS, consultez la section Événements Amazon ECS dans le guide du développeur Amazon Elastic Container Service.
-
Consultez la section de dépannage d'Amazon ECS du guide du développeur Amazon Elastic Container Service pour détecter les erreurs liées aux messages de l'événement.
Un délai d'attente se produit pendant l'attente de la poursuite de la 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 :
-
Dans votre groupe de déploiement, définissez le paramètre Spécifier quand rediriger le trafic sur une durée plus longue et redéployer. Pour plus d’informations, consultez Création d'un groupe de déploiement pour un déploiement Amazon ECS (console).
-
Dans votre groupe de déploiement, modifiez Spécifier quand rediriger le trafic pour Réacheminer le trafic immédiatement et redéployer. Pour plus d’informations, consultez Création d'un groupe de déploiement pour un déploiement Amazon ECS (console).
-
Redéployez puis exécutez la AWS CLI commande aws deploy continue-deployment avec l'
--deployment-wait-typeoption définie sur.READY_WAITAssurez-vous d'exécuter cette commande avant l'expiration de l'heure spécifiée dans Spécifier quand rediriger le trafic.
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 Hooks section 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 CodeDeploy de 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 Hooks section du AppSpec fichier, mais que la fonction Lambda n'a pas pu appeler l'PutLifecycleEventHookExecutionStatusAPI nécessaire pour renvoyer un Failed état Succeeded ou. 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 AppSpec fichier. Cette autorisation permet à la fonction Lambda de renvoyer un statut égalFailedàSucceededou à 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'AWS Lambda utilisateur. -
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 testSucceededde validation du cycle de vie est ou non.FailedPour plus d'informations sur l'putlifecycleEventHookExecutionStatusAPI, consultez PutLifecycleEventHookExecutionStatus la référence de AWS CodeDeploy l'API. Pour plus d'informations sur les journaux d'exécution Lambda, consultez la section Accès aux CloudWatch 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 Hooks section du AppSpec fichier, mais que la fonction Lambda est revenue Failed à son état de fonctionnement CodeDeploy lors de son appel. PutLifecycleEventHookExecutionStatus Cet échec indique que le test de CodeDeploy validation du cycle de vie a échoué.
Prochaine étape possible : vérifiez vos journaux d'exécution Lambda pour voir pourquoi le code de test de validation échoue. Pour plus d'informations sur les journaux d'exécution Lambda, consultez la section Accès aux CloudWatch journaux Amazon pour AWS Lambda.
L'ELB n'a pas pu être mis à jour en raison de l'erreur suivante : Le groupe cible du jeu 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 un groupe cible incorrect. Pour plus d'informations sur l'écouteur de test dans CodeDeploy, consultez Avant de commencer un déploiement Amazon ECS etQue se passe-t-il lors d'un déploiement d'Amazon ECS. Pour plus d'informations sur les ensembles de tâches, consultez TaskSet la référence d'API Amazon Elastic Container Service et describe-task-set dans la section Amazon ECS de la référence des commandes. AWS CLI
Solution possible : assurez-vous que l'écouteur de production et l'écouteur de test de l'Elastic Load Balancing pointent tous deux vers le groupe cible qui gère actuellement vos charges de travail. Vous pouvez vous renseigner à trois endroits :
-
Dans Amazon EC2, dans les paramètres Listeners et règles de votre équilibreur de charge. Pour plus d'informations, consultez la section Écouteurs pour vos équilibreurs de charge d'application dans le Guide de l'utilisateur des équilibreurs de charge d'application, ou Réducteurs pour vos équilibreurs de charge réseau dans le Guide de l'utilisateur des équilibreurs de charge réseau.
-
Dans Amazon ECS, dans votre cluster, dans la configuration réseau de votre service. Pour plus d'informations, consultez la section Considérations relatives à l'équilibreur de charge des applications et à l'équilibreur de charge réseau dans le guide du développeur Amazon Elastic Container Service.
-
Dans CodeDeploy, dans les paramètres de votre groupe de déploiement. Pour plus d’informations, consultez Création d'un groupe de déploiement pour un déploiement Amazon ECS (console).
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 la mise à l'échelle automatique des services et le type de blue/green déploiement, la mise à l'échelle automatique n'est pas bloquée 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 CodeDeploy de conflit entre les processus Auto Scaling.
Solution possible : suspendre et reprendre 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 la mise à l'échelle pour Application Auto Scaling dans le Guide de l'utilisateur d'Application Auto Scaling.
Note
CodeDeploy Impossible d'appeler RegisterScaleableTarget directement. Pour utiliser cette API, vous devez configurer l'envoi CodeDeploy d'une notification ou d'un événement à Amazon Simple Notification Service (ou Amazon CloudWatch). Vous devez ensuite configurer Amazon SNS (ou 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 true pour suspendre les opérations Auto Scaling et les false reprendre.
La notification ou l'événement CodeDeploy envoyé doit se produire lorsqu'un déploiement démarre (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, voirSurveillance des déploiements avec Amazon CloudWatch Events. etMonitoring Deployments with Amazon SNS Event Notifications.
Seul ALB prend en charge le routage progressif du trafic. Utilisez plutôt AllAtOnce le routage du trafic lorsque vous create/update déployez
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 équilibreur de charge réseau et que vous avez essayé d'utiliser une configuration de déploiement prédéfinie autre queCodeDeployDefault.ECSAllAtOnce.
Correctifs possibles :
-
Modifiez votre configuration de déploiement prédéfinie en
CodeDeployDefault.ECSAllAtOnce. Il s'agit de la seule configuration de déploiement prédéfinie prise en charge par les Network Load Balancers.Pour plus d'informations sur les configurations de déploiement prédéfinies, consultezConfigurations de déploiement prédéfinies pour une plateforme de calcul Amazon ECS.
-
Changez votre équilibreur de charge en équilibreur de charge d'application. Les équilibreurs de charge d'application prennent en charge toutes les configurations de déploiement prédéfinies. Pour plus d'informations sur la création d'un équilibreur de charge d'application, consultezConfiguration d'un équilibreur de charge, de groupes cibles et d'écouteurs pour les déploiements CodeDeploy Amazon ECS.
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é effectués par Elastic Load Balancing et mon application est en panne.
Cause possible : ce problème peut survenir si vous avez effectué un déploiement en CodeDeploy une seule fois et que votre jeu de tâches de remplacement (vert) contient un code incorrect qui entraîne l'échec des contrôles de santé d'Elastic Load Balancing. Avec la configuration de déploiement tout-en-un, les bilans de santé de l'équilibreur de charge commencent à s'exécuter sur l'ensemble de tâches de remplacement une fois que le trafic y a été transféré (c'est-à-dire après que l'événement CodeDeploy du AllowTraffic cycle de vie se produit). C'est pourquoi les contrôles de santé de l'ensemble de tâches de remplacement échoueront une fois le trafic modifié, 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 déploiement d'Amazon ECS.
Correctifs possibles :
-
Changez la configuration de votre déploiement, passant d'une configuration tout-en-un à une configuration Canary ou Linear. Dans une configuration canarienne ou linéaire, les contrôles de santé de l'équilibreur de charge commencent à s'exécuter 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 modifié (c'est-à-dire pendant l'événement
Installdu cycle de vie et avant l'AllowTrafficévénement). En autorisant l'exécution des contrôles 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 linéaires, 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 Amazon ECS, consultezQue se passe-t-il lors d'un déploiement d'Amazon ECS.
Note
Les configurations de déploiement linéaire et Canary ne sont prises en charge qu'avec les équilibreurs de charge d'application.
-
Si vous souhaitez conserver votre configuration de déploiement tout-en-un, configurez un écouteur de test et vérifiez l'état de santé de la tâche de remplacement à l'aide du hook de cycle de vie.
BeforeAllowTrafficPour plus d’informations, consultez Liste des hooks d'événements liés au cycle de vie pour un déploiement d'Amazon ECS.
Puis-je associer plusieurs équilibreurs de charge à un groupe de déploiement ?
Non Si vous souhaitez utiliser plusieurs équilibreurs de charge d'application ou plusieurs équilibreurs de charge réseau, utilisez les mises à jour continues d'Amazon ECS au lieu de CodeDeploy blue/green déploiements. Pour plus d'informations sur les mises à jour continues, consultez la section Mise à jour continue 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 guide du développeur Amazon Elastic Container Service.
Puis-je effectuer des CodeDeploy blue/green déploiements sans équilibreur de charge ?
Non, vous ne pouvez pas effectuer de CodeDeploy blue/green déploiements sans équilibreur de charge. Si vous ne parvenez pas à utiliser un équilibreur de charge, utilisez plutôt la fonction 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 dans le guide du développeur Amazon Elastic Container Service.
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 par CodeDeploy, tels que les paramètres du fichier de définition des tâches et du nom du conteneur. Pour obtenir la liste complète des paramètres Amazon ECS qui CodeDeploy peuvent être mis à jour, consultezAppSpec section « ressources » pour les déploiements Amazon ECS.
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 :
-
Appelez l'
UpdateServiceAPI d'Amazon ECS avec le paramètre que vous souhaitez mettre à jour. Pour obtenir la liste complète des paramètres qui peuvent être mis à jour, consultez le UpdateService manuel Amazon Elastic Container Service API Reference. -
Pour appliquer la modification aux tâches, créez un nouveau blue/green déploiement Amazon ECS. Pour plus d'informations, consultez Création d'un déploiement d'Amazon ECS Compute Platform (console).