2016-10-19 3 views
5

J'ai implémenté le Job Observer Pattern en utilisant SQS et ECS. Les descriptions de travail sont transmises à la file d'attente SQS pour traitement. Le traitement du travail s'exécute sur un cluster ECS dans un groupe Auto-Scaling exécutant les tâches ECS Docker.Mise à l'échelle automatique du cluster ECS vers/depuis zéro instances

Chaque ECS tâche ne:

  1. un message Lire la file d'attente SQS
  2. Exécuter travail sur les données (~ 1 heure)
  3. message Supprimer
  4. boucle alors qu'il ya plus de messages

Je voudrais réduire le cluster lorsqu'il n'y a plus de travail pour chaque Instance, éventuellement à zéro instance.

En regardant this similar post, les réponses suggèrent que l'entrée d'échelle devrait être traitée en dehors de l'ASG d'une manière ou d'une autre. Les instances se mettent automatiquement à l'échelle, soit en s'auto-terminant explicitement, soit en désactivant la protection d'instance ASG lorsqu'il n'y a plus de messages. Cela ne gère pas non plus le cas d'exécution de plusieurs tâches ECS sur une seule instance, car une tâche individuelle ne doit pas se terminer si d'autres tâches sont exécutées en parallèle. Suis-je limité à une mise à l'échelle automatique et une seule tâche par instance? Une façon de terminer seulement une fois que toutes les tâches ECS sur une instance ont quitté? Toute autre alternative d'échelle?

+0

Pouvez-vous vérifier si l'instance est en cours d'exécution d'un travail avec une simple application installée sur vos instances? Par exemple en obtenant l'utilisation de la CPU/mémoire? – Mahdi

Répondre

3

Vous pouvez utiliser CloudWatch Alarms with Actions:

détecter et mettre fin à des instances de travailleurs qui ont été inactif pendant une certaine période de temps

2

Je fini par utiliser:

  • A l'échelle Out Policy qui ajoute le même nombre d'instances que les messages de file d'attente SQS en attente
  • A l'échelle de politique qui met à zéro les cas une fois que la file d'attente SQS est vide
  • Activation ASG Protection instance au début du traitement par lots et la désactivation à la fin

Cela me limite à un traitement par lots par par exemple, mais a bien fonctionné pour mon scénario.

2

Une autre solution pour le problème est le service par lots AWS a annoncé à la fin de 2016.