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.
Protection de vos tâches Amazon ECS pour éviter qu’elles ne soient interrompues par des événements de réduction horizontale
Vous pouvez utiliser la protection évolutive des tâches Amazon ECS pour protéger vos tâches contre l’interruption d’événements de mise à l’échelle horizontale provenant du service autoscaling ou de déploiements.
Certaines applications nécessitent un mécanisme permettant de protéger les tâches critiques contre toute interruption due à des événements de mise à l'échelle horizontale en période de faible utilisation ou lors de déploiements de services. Par exemple :
-
Vous disposez d'une application asynchrone de traitement des files d'attente, telle qu'une tâche de transcodage vidéo, dans laquelle certaines tâches doivent s'exécuter pendant des heures, même lorsque l'utilisation cumulée des services est faible.
-
Vous exploitez une application de jeu qui exécute des serveurs de jeu sous forme de tâches Amazon ECS, lesquelles doivent continuer de fonctionner même si tous les utilisateurs se sont déconnectés, afin de réduire la latence de démarrage lors du redémarrage du serveur.
-
Lorsque vous déployez une nouvelle version de code, vous avez besoin que des tâches continuent à s'exécuter, car leur retraitement serait coûteux.
Pour empêcher les tâches appartenant à votre service de se terminer lors d'un événement de mise à l'échelle horizontale, définissez l'attribut ProtectionEnabled sur true. Lorsque vous définissez ProtectionEnabled sur true, les tâches sont protégées pendant deux heures par défaut. Vous pouvez ensuite personnaliser la période de protection à l’aide de l’attribut ExpiresInMinutes. Vous pouvez protéger vos tâches pendant au moins une minute et jusqu'à un maximum de 2 880 minutes (48 heures). Si vous utilisez le AWS CLI, vous pouvez spécifier l'--protection-enabledoption.
Une fois qu'une tâche a terminé son travail requis, vous pouvez définir l'attribut ProtectionEnabled sur false, ce qui permet à la tâche d'être interrompue par des événements ultérieurs de mise à l'échelle horizontale. Si vous utilisez le AWS CLI, vous pouvez spécifier l'--no-protection-enabledoption.
Mécanismes de protection évolutive des tâches
Vous pouvez définir et obtenir une protection évolutive des tâches à l'aide du point de terminaison de l'agent de conteneur Amazon ECS ou de l'API Amazon ECS.
-
Point de terminaison de l'agent de conteneur Amazon ECS
Nous vous recommandons d'utiliser le point de terminaison de l'agent de conteneur Amazon ECS pour les tâches qui peuvent déterminer automatiquement le besoin de protection. Utilisez cette approche pour les charges de travail basées sur les files d'attente ou le traitement des tâches.
Lorsqu'un conteneur commence à traiter un travail, par exemple en consommant un message SQS, vous pouvez définir l'attribut
ProtectionEnabledvia le chemin$ECS_AGENT_URI/task-protection/v1/statedu point de terminaison de protection évolutive des tâches depuis le conteneur. Amazon ECS n'interrompra pas cette tâche lors d'événements de mise à l'échelle horizontale. Une fois que votre tâche a terminé son travail, vous pouvez effacer l’attributProtectionEnableden utilisant le même point de terminaison, ce qui rend la tâche susceptible d’être interrompue lors d’événements ultérieurs de mise à l’échelle horizontale.Pour de plus amples informations sur l’utilisation de point de terminaison de l’agent de conteneur Amazon ECS, consultez la section Point de terminaison de protection évolutive des tâches Amazon ECS.
-
API Amazon ECS
Vous pouvez utiliser l’API Amazon ECS pour définir et récupérer la protection évolutive des tâches si votre application dispose d’un composant qui suit l’état des tâches actives. Utilisez
UpdateTaskProtectionpour marquer une ou plusieurs tâches comme protégées. UtilisezGetTaskProtectionpour récupérer l’état de protection.Un exemple de cette approche serait si votre application héberge des sessions de serveur de jeu comme tâches Amazon ECS. Lorsqu'un utilisateur se connecte à une session sur le serveur (tâche), vous pouvez marquer la tâche comme protégée. Une fois que l'utilisateur se déconnecte, vous pouvez soit retirer la protection spécifique à cette tâche, soit retirer périodiquement la protection pour des tâches similaires qui ne comportent plus de sessions actives, en fonction de vos besoins en termes de serveurs inactifs.
Pour plus d'informations, consultez UpdateTaskProtectionet consultez le GetTaskProtectionmanuel Amazon Elastic Container Service API Reference.
Vous pouvez combiner les deux approches. Par exemple, utilisez le point de terminaison de l'agent Amazon ECS pour définir la protection des tâches depuis un conteneur et utilisez l'API Amazon ECS pour retirer la protection des tâches depuis votre service de contrôleur externe.
Considérations
Prenez en compte les points suivants avant d'utiliser la protection évolutive des tâches :
-
La protection évolutive des tâches n’est prise en charge que pour les tâches déployées à partir d’un service.
-
La protection évolutive des tâches est prise en charge par les tâches déployées à partir d’un service exécuté sur les instances gérées Amazon ECS.
-
Nous vous recommandons d'utiliser le point de terminaison de l'agent de conteneur Amazon ECS, car l'agent Amazon ECS possède des mécanismes de nouvelle tentative intégrés et une interface plus simple.
-
Vous pouvez réinitialiser la période d'expiration de la protection contre la mise à l'échelle horizontale des tâches en appelant
UpdateTaskProtectionpour une tâche pour laquelle la protection est déjà activée. -
Déterminez le temps nécessaire à une tâche pour effectuer le travail requis et définissez la propriété
expiresInMinutesen conséquence. Si vous fixez une période d'expiration de la protection plus longue que nécessaire, vous devrez supporter des coûts et serez confronté à des retards dans le déploiement de nouvelles tâches. -
La protection contre la mise à l'échelle horizontale des tâches est prise en charge sur l'agent de conteneur Amazon ECS version
1.65.0ou version ultérieure. Vous pouvez ajouter la prise en charge de cette fonctionnalité sur les EC2 instances Amazon utilisant d'anciennes versions de l'agent de conteneur Amazon ECS en mettant à jour l'agent vers la dernière version. Pour de plus amples informations, veuillez consulter Mise à jour de l'agent de conteneur Amazon ECS. -
Considérations relatives au déploiement :
-
Si le service utilise une mise à jour propagée, de nouvelles tâches seront créées, mais les tâches exécutant une ancienne version ne seront pas terminées avant la désactivation ou l'expiration de
protectionEnabled. Vous pouvez ajuster le paramètremaximumPercentagedans la configuration du déploiement sur une valeur qui permet de créer de nouvelles tâches lorsque les anciennes tâches sont protégées. -
Si une blue/green mise à jour est appliquée, le déploiement bleu avec des tâches protégées ne sera pas supprimé si des tâches l'ont été
protectionEnabled. Le trafic sera redirigé vers les nouvelles tâches qui apparaissent, et les anciennes tâches ne seront pas supprimées que lorsqueprotectionEnabledsera désactivée ou expirera. En fonction du délai d'expiration des CodeDeploy CloudFormation mises à jour, le déploiement peut expirer et les anciennes tâches Blue peuvent toujours être présentes. -
Si vous l'utilisez CloudFormation, le délai d'expiration de la pile de mises à jour est de 3 heures. Par conséquent, si vous définissez la protection des tâches pour une durée supérieure à 3 heures, votre CloudFormation déploiement peut entraîner un échec et une annulation.
Pendant le temps que vos anciennes tâches sont protégées, la CloudFormation pile apparaît
UPDATE_IN_PROGRESS. Si la protection contre la mise à l'échelle horizontale des tâches est supprimée ou expire dans un délai de trois heures, votre déploiement réussira et passera au statutUPDATE_COMPLETE. Si le déploiement est bloqué dans l'étatUPDATE_IN_PROGRESSpendant plus de 3 heures, il échouera et affichera un étatUPDATE_FAILED, puis reviendra au dernier ensemble de tâches. -
Amazon ECS envoie des événements de service lorsque des tâches protégées empêchent un déploiement (propagé ou bleu/vert) d'atteindre l'état stable, afin que vous puissiez prendre des mesures correctives. Lorsque vous essayez de mettre à jour l'état de protection d'une tâche et que vous recevez un message d'erreur
DEPLOYMENT_BLOCKED, cela signifie que le service possède un nombre de tâches protégées supérieur au nombre de tâches souhaité pour le service. Pour résoudre cette erreur, effectuez l'une des opérations suivantes :-
Attendez que la protection des tâches en cours expire. Définissez ensuite la protection des tâches.
-
Déterminez quelles tâches peuvent être interrompues. Utilisez ensuite
UpdateTaskProtectionavec l'optionprotectionEnableddéfinie surfalsepour ces tâches. -
Augmentez le nombre de tâches souhaité pour le service à un nombre supérieur au nombre de tâches protégées.
-
-
Autorisations IAM requises pour la protection évolutive des tâches
La tâche doit avoir le rôle de tâche Amazon ECS avec les autorisations suivantes :
-
ecs:GetTaskProtection: permet à l'agent de conteneur Amazon ECS d'appelerGetTaskProtection. -
ecs:UpdateTaskProtection: permet à l'agent de conteneur Amazon ECS d'appelerUpdateTaskProtection.