Comment puis-je faire défiler automatiquement une nouvelle image dans un groupe AWS Auto Scaling?


21

J'ai une configuration d'application Web avec un équilibreur de charge et un groupe de mise à l'échelle automatique pour gérer la mise à l'échelle. Le code source est dans un référentiel git donc je n'ai pas à mettre à jour les images lorsque le code change, mais parfois l'environnement change donc nous créons une nouvelle image. Ensuite, cette image doit être recyclée dans le groupe de mise à l'échelle automatique.

Existe-t-il un moyen de faire défiler les images automatiquement? En ce moment, je planifie une action de montée en puissance et de réduction d'échelle qui supprime les anciennes instances.


2
Il est probablement plus efficace si, après avoir créé votre nouvelle configuration de lancement et mis à jour votre groupe de mise à l'échelle automatique, vous marquez chaque instance comme malsaine (par exemple en utilisant as-set-instance-health), de sorte que la mise à l'échelle automatique la remplace simplement par une nouvelle instance.
cyberx86

Réponses:


10

J'aimerais suggérer "AWS-HA-Release" pour faire ceci - la façon dont AWS-HA-Release fonctionne:

  1. Si le groupe de mise à l'échelle automatique actuel et ELB signalent 5 instances saines,
  2. AWS-HA-Release introduit une nouvelle instance en production et attend que l'ELB l'identifie comme étant saine (porter le nombre total d'instances saines à 6)
  3. Supprime une ancienne instance (total jusqu'à 5)
  4. Met une autre instance en service (total à 6)
  5. Supprime une ancienne instance (total jusqu'à 5)
  6. et ainsi de suite jusqu'à ce que toutes les instances aient été remplacées

Dans ce cas, vous pouvez expédier un nouveau code ou de nouvelles versions AMI sans temps d'arrêt et bénéficier d'avantages entièrement nouveaux. L'outil AWS-HA-Release est disponible sur https://github.com/colinbjohnson/aws-missing-tools .


9

Le moyen le plus simple consiste à augmenter le nombre d'instances minimales dans Auto-Scaling Group (ASG) pour doubler votre nombre actuel, attendez qu'elles soient toutes démarrées, puis modifiez ce nombre minimal d'instances à ce qu'il était. ELB supprimera les instances plus anciennes et laissera les instances plus récentes avec du code. Pour y parvenir, la politique de résiliation doit être définie sur « OldestInstance » pour fonctionner comme prévu. La politique de résiliation par défaut peut avoir des effets secondaires indésirables.

Vous pouvez consulter les paramètres et exemples de l'AWS CLI ici: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html


À la vôtre, c'est une méthode super pratique et sans tracas.
Elad Nava

1
Cela ne fonctionnera pas toujours, selon les documents AWS, même lors de la sélection d'une politique de résiliation personnalisée, l'ASG gardera l'équilibre AZ avant d'appliquer la politique de résiliation. Donc, doubler et diviser par deux la taille peut vous laisser quelques anciennes instances. Cela est particulièrement probable lors de l'utilisation d'un ASG avec plusieurs types d'instances et options d'achat, car l'ASG maintiendra l'équilibre AZ et l'option de marché (spot vs à la demande) équilibrée avant d'appliquer la politique `` OldestInstance '': docs.aws.amazon.com / autoscaling / ec2 / userguide /…
Shahad

6

la façon dont je gère ce scénario consiste à utiliser la fonctionnalité UpdatePolicy de l'objet AWS :: AutoScaling :: AutoScalingGroup dans la formation des nuages. lorsque la pile de formation de nuages ​​est mise à jour, elle gère le cycle des instances.

quelques références. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html


Merci une tonne @graeme. Je n'avais aucune idée que Cloudformation offrait cette fonctionnalité.
AJB

Exactement ce que je cherchais. Nous déployons nos piles via Jenkins car les modifications via la console AWS sont verrouillées.
Greg Biles

3

Jetez également un œil à l' outil Netflix Asgard qui est maintenant open source. Non seulement il peut configurer des groupes de mise à l'échelle automatique, mais il peut également effectuer des versions continues de nouvelles images AMI pour un groupe d'instances.


Vous voulez dire "Netflix Asgard"

4
Netflix Asgard est désormais obsolète, il est remplacé par Netflix Spinnaker
dlaidlaw

0

Pour être honnête, il n'y a pas vraiment de bonne façon de le faire. La meilleure façon de le faire est de mettre une version au nom ASG. Chaque fois que je mets à jour l'AMI, je crée une nouvelle configuration de lancement ASG + avec la nouvelle version afin qu'elle n'entre pas en conflit avec l'autre groupe. Ensuite, je termine toutes les instances de l'ancien groupe.

Si un déploiement plus tolérant aux pannes est requis, je recommande d'ajouter une autre étape en impliquant également la création d'un nouvel équilibreur de charge. Cela vous permet d'avoir les deux ASG isolés l'un de l'autre. Il vous permet également d'avoir une zone "Staging" pour tester vos modifications une dernière fois avant la mise à jour. Ensuite, lorsque vous êtes prêt à passer, vous mettez à jour les enregistrements DNS et mettez fin à toutes les instances de l'ancien groupe.


0

Comme je l'ai posté ici (question similaire, juste avec Terraform), il n'est en aucun cas intégré à ASG, sauf si vous utilisez la cloudformation. J'ai également eu du mal à le faire, donc j'ai fini par écrire un "roller" qui surveille plusieurs ASG, vérifie leur état et leurs mises à jour. Toujours heureux de recevoir des commentaires. http://github.com/deitch/aws-asg-roller

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.