Je cherche à optimiser le coût de nos groupes EC2 à mise à l'échelle automatique en leur faisant lancer des instances ponctuelles au lieu d'instances à la demande.
Ce que je veux vraiment, c'est pouvoir conserver certains serveurs dans le groupe en tant qu'instances à la demande, indépendamment de ce qui se passe sur le marché de la tarification des instances spot. Ensuite, je veux que tous les serveurs supplémentaires du groupe, au-dessus de mon minimum configuré, soient des instances ponctuelles. Je suis généralement d'accord avec le retard dans l'ajout de serveurs via des demandes ponctuelles.
Je n'arrive pas à trouver un moyen de le faire et j'ai essayé de parcourir la documentation AWS. Il semble qu'un ASG puisse être à la demande ou sur place, mais pas hybride.
Je pourrais éventuellement ajouter manuellement une instance à la demande à l'Elastic Load Balancer affecté au groupe de mise à l'échelle automatique, mais la charge de ce serveur ne serait pas prise en compte dans les mesures et déclencheurs de mise à l'échelle automatique.
Je suppose que je pourrais entrer un prix d'offre ridiculement élevé afin de m'assurer d'avoir toujours les serveurs dont j'ai besoin, mais ensuite je regarde l'historique des prix et je vois des pics importants occasionnels.
La documentation AWS est en contradiction avec elle-même, car à un endroit, il est dit que si vous entrez un minimum de serveur, ce nombre est "garanti" pour être là. Mais quand vous lisez des exemples ponctuels, il n'y a aucune assurance. Le différentiel de prix pour le spot est convaincant, je voudrais donc en tirer parti autant que possible tout en maintenant une base de référence toujours active. Est-ce possible?
la source
L'approche discutée ci-dessus serait un peu désordonnée et pas si flexible. L'approche la plus canonique consiste à simplement créer 2 ASG (un pour spot, un pour à la demande), puis les enregistrer tous les deux avec le même ELB (discuté ici ). Cela vous donne la possibilité de contrôler chacun indépendamment plutôt que d'essayer de muck avec des swaps LC dans un seul ASG.
la source
Cette approche hybride Auto Scaling ne semble pas être disponible dès le départ, malheureusement.
Cependant, vous pouvez peut-être contourner cette limitation comme suit (non testé, juste une conception de système que je jongle depuis un certain temps):
Solution de contournement potentielle
Comme indiqué dans Utilisation de la mise à l'échelle automatique pour lancer des instances ponctuelles, l'offre de prix au comptant est un paramètre de la configuration de lancement utilisée. Comme vous l'avez souligné, aucune configuration de lancement hybride n'est disponible, elle doit plutôt être à la demande ou sur place, ce qui signifie que le cas d'utilisation nécessite deux configurations de lancement différentes.
Cela ne semble pas aider immédiatement, car vous ne pouvez attacher qu'une seule configuration de lancement à un groupe Auto Scaling à la fois , avec les contraintes suivantes (partiellement obsolètes) (voir Configuration de lancement ):
Les parties soulignées sont cependant essentielles, la première couvrant l'exigence de maintenir les instances à la demande en cours d'exécution après le passage de la configuration de lancement à la demande initiale respective à la configuration de lancement supplémentaire, et la seconde n'étant plus nécessairement le cas en raison de les politiques de terminaison Auto Scaling récemment introduites (pour un changement, il n'y a généralement pas eu de fanfare via un article de blog AWS), documentées dans la politique de terminaison d'instance pour votre groupe Auto Scaling :
Comme il est indiqué dans Comment votre résiliation Policy Works , vous pouvez maintenant spécifier NewestInstance , si vous voulez la dernière instance lancée à fin , ce qui serait l' un des cas ponctuels , plus récemment lancé:
Évidemment, il peut y avoir un peu plus à cela, par exemple, vous pouvez spécifier l'une des politiques en tant que politique autonome, ou vous pouvez répertorier plusieurs politiques dans une liste ordonnée , mais cette approche devrait garantir la charge de toutes les instances prises en compte dans le mesures et déclencheurs à mise à l'échelle automatique ; une mise en garde demeure cependant:
Caveat
Si l'équilibreur de charge met fin à l'une des instances à la demande pour toute autre raison (par exemple, parce qu'elle est devenue malsaine en soi), elle ne sera pas remplacée automatiquement par une instance à la demande. Vous devez donc surveiller et tenir compte de cet événement séparément, par exemple en réactivant temporairement la configuration de lancement à la demande.
Bonne chance!
la source
Je me suis inspiré des réponses ici pour arriver à https://github.com/ashwanthkumar/matsya
Il vous aide à faire ce qui suit
la source
Dans le cas où vous souhaitez uniquement 1 ASG avec un nombre statique d'instances à la demande, les éléments suivants devraient fonctionner:
Créez un groupe Auto Scaling basé sur la configuration de lancement d'instance ponctuelle.
Suspendre la mise à l'échelle automatique sur ASG
Ajoutez manuellement des instances à la demande (charge de base statique) à ASG et activez la protection d'instance pour ces instances.
Reprendre la mise à l'échelle automatique sur ASG
La stratégie de mise à l'échelle automatique par défaut ignorera désormais les instances à la demande (en raison de la protection) et mettra fin au même nombre d'instances ponctuelles que l'instance à la demande pour atteindre le nombre souhaité du groupe. Toute activité de montée en puissance ou de sortie ne lancera ou mettra fin qu'aux instances ponctuelles.
la source