
Faire tourner des environnements hors production dans le cloud, c'est pratique. Ils sont disponibles à tout moment, dès que vous en avez besoin. Mais ce confort a parfois un prix. En général, les instances hors production servent surtout en journée, et il arrive qu'on soit trop occupé pour penser à les arrêter en dehors des heures ouvrées ou le week-end. Chaque instance ne coûte que quelques centimes de l'heure, mais la facture peut vite grimper à plusieurs milliers de dollars sur un mois.
Premier et MSP Partner de Google, DoiT International accompagne des centaines de startups et d'entreprises qui exécutent leurs workloads sur Google Cloud Platform en général, et sur Google Compute Engine en particulier. Notre raison d'être : réduire la facture cloud mensuelle de nos clients en concevant des architectures plus malines, plus intelligentes et plus économiques.
C'est précisément dans cet esprit que nous publions aujourd'hui Zorya en open source. Dans la mythologie slave, les Zoryas sont deux déesses gardiennes. Les Zoryas incarnent l'étoile du matin et l'étoile du soir — si vous avez lu ou vu American Gods de Neil Gaiman, ces deux sœurs vous diront sans doute quelque chose.
Alors, Zorya, qu'est-ce que c'est au juste ? Un petit logiciel à exécuter sur votre propre compte Google Cloud Platform, qui vous permet de planifier vos instances Google Compute Engine et de définir une politique applicable à l'ensemble des projets de votre organisation.
Nous tenions à ce que Zorya soit très simple à installer et à maintenir. D'où les objectifs de conception suivants :
- Exécuter Zorya en mode serverless pour alléger la charge d'administration
- Permettre la configuration de plusieurs plannings et politiques
- Prendre en charge plusieurs projets depuis une seule instance de Zorya
- Conserver un coût opérationnel faible
Nous avons choisi de développer Zorya et de l'exécuter sur Google App Engine, Standard Environment, ce qui nous a permis d'atteindre deux des objectifs :
- Un fonctionnement serverless via App Engine, sans gestion de serveurs, avec haute disponibilité et scalabilité prêtes à l'emploi.
- Un coût opérationnel faible — grâce au modèle tarifaire de Google App Engine et au fait que Zorya ne se réveille qu'une fois par heure et ne consomme aucune ressource le reste du temps.
Le backend de Zorya est écrit en Python, le frontend repose sur React. Nous avons retenu Google Cloud Datastore comme base de données pour stocker la configuration.
Backend
Le backend expose une API RESTful simple pour lire et écrire des plannings ainsi que des politiques.
L'entité Schedule se compose d'un nom, d'un fuseau horaire et d'une matrice 7x24 représentant chaque heure de chaque jour de la semaine. La valeur 0 indique que l'instance doit être à l'arrêt, 1 qu'elle doit être en ligne.
L'entité Policy se compose d'un nom, d'une liste de projets, du nom du planning associé et d'une liste de labels Google Compute Engine, c'est-à-dire des paires nom/valeur.
{ "name": "My policy", "tags": [\ {\ "dev": "sleeper",\ "staging": "resting"\ }\ ], "projetcs": [\ "project-x",\ "y-project"\ ], "schedulename": "my schedule name"}L'API est très simple et ne compte que huit endpoints :
- add_policy
- list_schedules
- del_schedule
- get_schedule
- add_policy
- list_policies
- get_policy
- del_policy
La documentation de l'API et des exemples de code client dans plusieurs langages sont disponibles ici.
Grâce au planificateur intégré de Google App Engine, une tâche vérifie régulièrement les politiques pour déterminer s'il faut modifier l'état des instances.
Si un changement d'état s'impose, Zorya parcourt les projets concernés et applique le nouvel état aux instances correspondant aux paires de labels demandées.
https://gist.github.com/avivl/ee9e7c11c254e25b890d48c1a873fdc1
Authentification
Pour autoriser Zorya à gérer les instances en votre nom dans n'importe quel projet de votre organisation, créez une nouvelle entrée dans l'IAM de votre Organisation et attribuez au compte de service de Zorya le rôle Compute Admin.
Rendez-vous d'abord sur https://console.cloud.google.com, sélectionnez IAM & Admin dans le menu, puis choisissez le nom de votre organisation (et non un projet spécifique) dans la liste déroulante en haut de la page :

Le compte de service auquel attribuer les permissions est : [email protected]. Il suffit de remplacer project-id par l'identifiant réel du projet sur lequel vous déployez Zorya.
Frontend
La plupart des utilisateurs passeront sans doute par l'API de Zorya. Nous avons donc développé une interface volontairement simple pour créer plannings et politiques. Le frontend repose sur ReactJS et est publié sur le module par défaut de l'application App Engine.
Pour la connexion, nous utilisons Cloud Identity-Aware Proxy. Cloud IAP vérifie l'identité de l'utilisateur et détermine s'il est autorisé à accéder à l'application. La configuration est immédiate : rendez-vous sur la console GCP, activez IAP sur votre application App Engine et ajoutez les utilisateurs ou groupes qui doivent accéder à Zorya.
Pour commencer à utiliser l'interface, ouvrez votre navigateur à l'adresse project-id.appspot.com en remplaçant project-id par l'identifiant de votre propre projet Google Cloud Platform.
L'interface permet de configurer facilement un nouveau planning, par exemple : du lundi au vendredi, de 8 h à 19 h en fuseau US/Eastern. Pendant ces plages, vos instances tournent ; en dehors, Zorya les arrête et les redémarre le lendemain.
Éditeur de planning Zorya
Une fois votre planning configuré, créez une politique pour l'appliquer à un sous-ensemble d'instances. Supposons que vous souhaitiez l'appliquer à toutes les instances du projet doit-playground portant les labels env:dev, role:frontend et app:reoptimize : seules les instances possédant ces trois paires de labels seront concernées.
Configuration d'une politique Zorya
Réduction des coûts
Nous utilisons DoiT Cloud Intelligence™ pour suivre nos coûts Google Cloud Platform. Cloud Intelligence permet de ventiler les coûts par label au sein d'une Organisation GCP donnée et propose une visualisation soignée.
Nous avons commencé à utiliser Zorya en interne en décembre 2017, alors que nos coûts Google Compute Engine atteignaient en moyenne 780 $/jour. Avec Zorya déployé sur nos environnements de développement et de test, nous sommes désormais à 320 $/jour en moyenne — soit près de 60 % d'économies.
Dashboard DoiT Cloud Intelligence
Conclusion
Si vous voulez vous aussi utiliser Zorya pour alléger votre facture mensuelle Google Cloud Platform, n'hésitez pas à nous laisser une étoile sur GitHub ! ;-) Nous accueillons aussi volontiers les pull requests et toute contribution qui permettra à Zorya de progresser.
Envie d'en lire plus ? Parcourez notre blog, ou suivez Aviv sur Twitter.