Nous avons une tâche qui charge certains fichiers de configuration à partir d'une source de données externe. Une fois les paramètres téléchargés, nous aimerions pouvoir redémarrer toutes les tâches d'un service afin que les paramètres se propagent à toutes les instances.
Quelle est la meilleure façon de redémarrer tous les services?
Nous avons une «solution de contournement» qui implique de définir le «nombre de tâches» à 0, puis de sauvegarder, mais ce n'est certainement pas la façon dont cela est censé être fait et il y a des temps d'arrêt.
amazon-web-services
docker
amazon-ecs
Dennkster
la source
la source
Réponses:
Utilisation de l'outil AWS CLI:
la source
Ce que vous voulez faire est essentiellement le même que le redéploiement du service.
Pour redéployer le service sans interruption:
Cela devrait lancer de nouvelles tâches pour la nouvelle définition de tâche, puis tuer les anciennes tâches pour l'ancienne définition de tâche, en redémarrant efficacement les tâches sans interruption.
Voir: UpdateService
la source
cela a fonctionné pour moi:
les tâches sont ensuite recréées sur les mêmes instances.
si vous avez besoin de nouvelles instances, utilisez ceci:
la source
La tâche en tant que bloc de construction d'ECS peut être arrêtée par un appel StopTask . Le service est composé de tâches sous-jacentes qui peuvent être arrêtées avec le même appel d'API. Seule la partie manquante ici est foreach autour des résultats de l' appel ListTasks avec un paramètre de famille défini . J'ai écrit une fonction Lambda simple qui peut vous aider.
la source
Je développe la réponse de @ user326608 ci-dessus (merci pour la perspicacité!).
Cela redémarrera TOUTES LES TÂCHES POUR TOUS LES SERVICES POUR UN GROUPE en arrêtant toutes ses tâches. Chaque service lancera alors automatiquement le
X
nombre de nouvelles tâches, oùX
est le servicedesired task count
.la source
Sur la base de la documentation Amazon, il semble que vous devriez être en mesure de scripter les opérations en question à l'aide des appels de l'API UpdateService . Il y a quelques exemples de code disponibles sur le lien précédent, il semble possible que vous puissiez vous adapter. Il semble que l'écriture d'un script pour prendre en charge le rechargement des services à l'aide de la définition de tâche appropriée après les mises à jour des configurations de tâches serait la solution la plus élégante au problème.
Il y a plus de documentation sur l'utilisation d' AWS CLI avec ECS, ce qui semble être le moyen le plus simple de gérer les scripts par lots lors du redémarrage des services.
la source
Fonctionne très bien https://github.com/fdfk/ecsServiceRestart
la source
J'y travaille. Il serait très utile de pouvoir redémarrer une tâche à la fois de manière fiable. Le script ci-dessous est ce que j'utilise maintenant. C'est assez prudent. Vous devez appuyer sur Retour pour chaque tâche. Il existe une commande pour attendre que le service soit stable, mais cela ne signifie pas que la tâche est saine. Et je pourrais mettre un délai. Mais à la fin, si les choses tournent mal, le script tuerait lentement l'application. Donc...
la source
J'ai un script python boto3 qui fait le ff:
ecs_client.list_tasks(cluster=mycluster,serviceName=myservice,desiredStatus='RUNNING')
ecs_client.stop_task(cluster=mycluster,task=mytask)
ecs_client.describe_services(cluster=mycluster,services=[myservice])
while myservice['services'][0]['runningCount'] < myservice['services'][0]['desiredCount']:
Si la boucle while n'est plus vraie - ce qui signifie que les nombres en cours d'exécution et souhaités sont égaux, arrêtez la tâche suivante dans la liste.
C'est le flux réel et je ne peux pas montrer le code réel car je suis toujours employé par mon travail actuel et tout mon code leur appartient :)
la source