Protégez vos tâches Amazon ECS pour éviter qu'elles ne soient interrompues par des événements évolutifs - Amazon Elastic Container Service

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.

Protégez vos tâches Amazon ECS pour éviter qu'elles ne soient interrompues par des événements évolutifs

Vous pouvez utiliser la protection évolutive des tâches d'Amazon ECS pour empêcher que vos tâches ne soient interrompues par des événements d'évolutivité liés au dimensionnement automatique des services ou à des 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 disposez d'une application de jeu qui exécute des serveurs de jeux sous forme de tâches Amazon ECS qui doivent continuer à s'exécuter même si tous les utilisateurs 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 la valeur true, les tâches sont protégées pendant 2 heures par défaut. Vous pouvez ensuite personnaliser la période de protection à l'aide de l'ExpiresInMinutesattribut. 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 ProtectionEnabled via le chemin $ECS_AGENT_URI/task-protection/v1/state du 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'ProtectionEnabledattribut en utilisant le même point de terminaison, afin que la tâche puisse être interrompue lors d'événements d'extension ultérieurs.

    Pour plus d'informations sur le point de terminaison de l'agent de conteneur Amazon ECS, consultezPoint de terminaison de protection évolutif 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 possède un composant qui suit l'état des tâches actives. Utilisez UpdateTaskProtection pour marquer une ou plusieurs tâches comme protégées. GetTaskProtectionÀ utiliser pour 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 :

  • 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 UpdateTaskProtection pour 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é expiresInMinutes en 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.0 ou 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ètre maximumPercentage dans 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 mise à jour bleu/vert est appliquée, le déploiement bleu contenant les tâches protégées ne sera pas supprimé si les tâches ont protectionEnabled. Le trafic sera redirigé vers les nouvelles tâches qui apparaîtront et les anciennes ne seront supprimées que lorsqu'elles protectionEnabled seront effacées ou expireront. 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îtUPDATE_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 statut UPDATE_COMPLETE. Si le déploiement est bloqué dans l'état UPDATE_IN_PROGRESS pendant plus de 3 heures, il échouera et affichera un état UPDATE_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 UpdateTaskProtection avec l'option protectionEnabled définie sur false pour 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'appeler GetTaskProtection.

  • ecs:UpdateTaskProtection : permet à l'agent de conteneur Amazon ECS d'appeler UpdateTaskProtection.