AWS fournit plusieurs types d’instances, la plus répandue est l’instance de type on-demand avec un prix fixe, un autre type bien connu pour optimiser les coûts est l’instance de type réservée avec un paiement à l’avance des ressources qui permet d’obtenir jusqu’à 75% de remise, puis la dernière qui est l’instance de type spot et je vais vous en dire plus dans cet article.


Fonctionnement de spot

Les instances spot vous permettent de faire une offre d’enchère sur les instances EC2 inutilisées, ce qui peut permettre de réduire considérablement vos coûts Amazon EC2 jusqu’a 90% du prix des instances on-demand.

Le prix d’une instance spot (de chaque type d’instance dans chaque Zone de disponibilité) est défini par Amazon EC2 et il varie en fonction de l’offre et de la demande pour les instances spot.

Votre instance spot est lancée dès que votre offre dépasse le prix actuel sur le marché et est arrêtée dès que le marché dépasse votre offre.

Vous ne payez que le prix du marché, pas celui de votre enchère maximum.

Lorsque que votre offre est inférieure au prix du marché, AWS vous notifie via l’api des metadata (http://169.254.169.254/latest/meta-data/spot/termination-time) 2 minutes avant l’arrêt, ce qui permet d’arrêter proprement les taches en cours. La bonne pratique est d’interroger cette url toutes les 5 secondes.


Travailler et économiser avec spot

Il m’est fréquent d’entendre ce type de phrase a propos des instances spot “oui mais ce n’est pas possible d’avoir des instances qui s’arrêtent comme cela a tout moment sur une infrastructure en production”, effectivement les instances spot ne répondent pas à toutes les charges de travail, par exemple un cluster elasticsearch n’est pas adapté pour fonctionner sur des instances spot.

Mais pour beaucoup d’autres charges de travail il y a des solutions, car il y a plusieurs types de fonctionnement dans spot, regardons ensemble ce que nous avons :

  • Avec du spot classique, il est fortement recommandé d’avoir une application résiliante et adaptée au cloud dite “application cloud native”.
    • Traitement de batch qui vont lire une queue SQS, elle devra prendre son message dans la queue, débuter le traitement tout en maintenant un état de son avancement dans DynamoDB, si l’instance reçoit le signal de terminaison l’application sera coupée tout en renvoyant le message dans la queue, alors une autre instance pourrait reprendre la suite du traitement.
    • Application type web derrière un répartiteur de charge, vous pouvez par exemple mettre n% de vos instances web en spot et si vous avez des terminaisons d’instances alors vous pouvez déclencher la demande pour du on-demand.
  • Utiliser des réservations de spot dites “spot block”, il s’agit d’instance spot sur laquelle nous pouvons demander une durée de réservation jusqu’à 6h. Le tarif est basé sur la durée demandée et la capacité disponible, et est généralement de 30% à 45% inférieur au tarif on-demande, avec une réduction additionnelle de 5% pendant les heures creuses pour la région. Elle sera terminée automatiquement à la fin du bloc de temps (vous pouvez également la terminer manuellement).
  • Utiliser une spot fleet, il s’agit d’un fonctionnement sur lequel vous faites une demande de capacité qui pourra varier en fonction de votre charge par exemple avec les fonctions d’autoscaling et des metrics cloudwatch, Pour les spot fleet, la demande de capacité est exprimée en nombre d’instance ou bien en vCPU et c’est là que c’est intéressant car il est possible (et même fortement recommandé) de mixer le type d’instance ce qui va réduire les indisponibilités. Le prix paramétrable est soit en automatique (prix du on-demand maxi) ou bien celui que vous voulez.

Nouveautés 2017 sur spot

AWS a sortie en 2017 plusieurs nouveautés au sujet de spot :

  • Arrêt de l’instance (avant il n’était possible que de terminer l’instance).
  • Mise en pause de l’instance.
  • Disponibilité des instances T2.
  • Revu du model d’enchère pour que les changements de prix soit moins brutaux. Il est maintenant possible de faire du prédictif sur le prix, la contrepartie pour AWS c’est que la courbe de décente du prix est elle aussi moins rapide.
  • Demande de spot directement en option dans l’api de demande d’une instances ec2 afin de simplifier l’usage d’instance spot.

Conclusions

EC2 Spot vous permet de réduire le coût de votre consommation EC2 sur plusieurs type de charge de travail, je le recommande particulièrement sur les charges suivantes:

  • Environnement de test/dev
  • Batch de traitement permanent ou ponctuel (encodage, transformation de donnée, bigdata)
  • Calcul distribué
  • Environnement en conteneur avec plusieurs réplications de l’application.
  • Ajout de capacité ponctuelle pour des événements type lancement campagne publicitaire/Passage TV
  • % de votre capacité habituelle (avec par exemple https://github.com/cristim/autospotting qui vient automatiquement remplacer un % définit avec du spot dans votre groupe d’autoscaling)

EC2 Spot est aussi disponible nativement pour les services AWS suivants:

Amazon EMR, Amazon ECS, or AWS Batch