0

Je souhaite déployer une application Web Play sur AWS ECS. J'ai créé un cluster de 2 instances EC2 exécutant le service Web. Chaque instance exécute une seule tâche. Le cluster est équilibré en charge par un ELB AWS.Déploiement du déploiement de la webapp Play Framework sur AWS ECS

En poussant la nouvelle image docker vers le référentiel, je crée une nouvelle révision de ma définition de tâche qui inclut la nouvelle image marquée avec latest. Lorsque je mets à jour le service pour utiliser la nouvelle définition de tâche, toutes les instances EC2 mettent immédiatement à jour leur tâche. Même si j'ai 2 instances EC2, j'éprouve un temps d'indisponibilité car AWS met à jour toutes les instances en même temps, au lieu de mettre à jour une instance après l'autre dans un déploiement par roulement.

J'ai essayé de lancer plus d'une tâche sur chaque instance EC2, mais ce n'est évidemment pas possible puisque chaque tâche nécessite le port par défaut de Play 9000 et un message d'erreur "port déjà utilisé" dans l'onglet événements du service .

Je peux penser à deux solutions possibles:

  • Chaque instance de tâche utilise un port dynamique au lieu du port par défaut. (Comment configurer un équilibreur de charge pour "rechercher" les ports dynamiques?)
  • Créez deux clusters ECR séparés, placez-les tous les deux dans un seul groupe cible d'équilibrage de charge et modifiez manuellement la définition de tâche du second cluster après la première a terminé la mise à jour. (Comment cela peut-il être automatisé - ou peut-il être automatisé?)

L'une de ces solutions est-elle la solution ou existe-t-il d'autres solutions ou meilleures pratiques pour ce scénario?

Répondre

0

D'accord, j'ai trouvé les sources du problème. Tout d'abord, j'ai un peu mélangé la terminologie. Les documents pour AWS Elastic Beanstalk expliquent le difference between a rolling update and a rolling deployment. J'essayais de réaliser un déploiement continu, pas une mise à jour continue - je modifierai ma question en conséquence.

En outre, j'ai remarqué que j'ai changé le "pourcentage sain pour cent" d'instances et sauvegardé par inadvertance les paramètres à 0%. Par conséquent ECS a correctement pris la liberté et redéployé plus d'une instance EC2 en même temps, ne laissant aucune instance saine sur mon cluster. J'ai trouvé une vidéo très utile here où l'auteur passe par le processus de mise à niveau du cluster ECS, puis la déclassement à nouveau. Tout fonctionne comme prévu maintenant.