Appuyez sur Entrée pour voir vos résultats ou Echap pour annuler.

Créer une API dans Google Cloud Platform

Toujours dans la même veine que mon article sur OpenShift, cette semaine, j’avais envie de vous présenter un déploiement d’une API Node avec un répartiteur de charge dans Google Cloud Platform (GCP). Par contre, je ne vais pas présenter le Google Kubernetes Engine aujourd’hui. Nous allons uniquement utiliser des machines virtuelles du compute engine.

Pourquoi pas rester dans OpenShift?

Dans mon article sur OpenShift, j’ai présenté comment on peut créer une API et comment OpenShift utilisait kubernetes et docker pour déployer des images. Ce que je ne vous ai pas mentionné, c’est qu’OpenShift a un bogue connu. Si vous voulez utiliser OpenShift pour la production, vous aurez du trouble à configurer votre DNS vers le cluster OpenShift, parce que ce dernier est dans le cloud Amazon avec une adresse IP éphémère. Elle change donc périodiquement. Vous ne pourrez donc pas faire pointer votre domaine racine (sans www), puis que l’entré DNS de type A doit absolument pointer vers une IP, pas un autre domaine comme les entrées CNAME.

Crap…

Et pourquoi pas utiliser le répartiteur de GCP?

Le répartiteur de charge qui se trouve dans GCP a aussi un problème 🙂 Impossible de faire une redirection http vers https. De plus, il requiert que vous utilisez les services backend autogérés par le cloud. Nginx est donc notre ami ici.

Architecture

Grâce à mes merveilleux talents de graphisme :

Le principe ici, c’est d’avoir 3 instances de machines virtuelles. nginx est la seule instance qui sera exposée au web et c’est aussi là que vous pourrez configurer votre certificat SSL. Les deux noeuds derrière le répartiteur seront uniquement accessibles depuis le Cloud.

Créer l’API

Ici, je suppose que vous avez un compte Google Cloud. Sinon, vous pouvez vous en créer un gratuitement et obtenir des crédits pour tester l’environnement.

Depuis la console Cloud, ouvrir le menu. Dans la section « Compute », vous devriez voir « Compute Engine » et le sous-menu « VM Instances ». Puis créer une nouvelle VM. Si c’est votre première fois dans GCP, il se peut que Google doivent démarrer votre espace Cloud. Ça prend maximum 5 minutes.

En créant la VM, vous devriez avoir le choix entre créer une nouvelle VM from scratch, depuis une image ou depuis le market place. Il existe de très bonnes images gratuites pour à peu près toutes les technos. Je vous recommande toutes les images « Certified by Bitnami ». Pour l’API, créons simplement un VM from scratch. Nommez la VM demo-backend-node-1 et prenez bien soin de sélectionner f1-micro comme valeur pour machine type.

Une fois la VM créée, vous pouvez vous y connecter par SSH pour aller chercher le code source sur votre dépôt. L’OS est un Linux Debian, donc vous pouvez utiliser apt-get pour aller chercher git et nodejs.

Pour node, vous devrez suivre ces instructions super simples. Pour le code source, vous pouvez utiliser la mini API que j’avais faite pour OpenShift à cette adresse.

Vous devriez voir Started! 🙂

Installer ensuite PM2 en global pour pouvoir exécuter l’application avec un redémarrage automatique.

Vous pouvez fermer la session SSH.

Retirer l’adresse IP externe de l’API

Puisque nous ne voulons pas exposer notre noeud directement sur le web, vous devez retirer l’IP éphémère qui est assignée par défaut à l’instance. Pour ce faire, toujours dans votre console cloud sous VM Instances, cliquer sur le nom de la VM pour ouvrir ses détails et cliquer sur « Edit » au haut de la page.

Un peu plus bas dans la page, vous devriez voir Network interfaces que vous pouvez ouvrir. Dans cette boîte, changer la valeur de External IP pour None puis sauvegarder.

Créer le deuxième noeud

Une fois qu’un des noeuds est bien configuré, vous pouvez créer une copie de la VM. Nous devons dans un premier temps créer un snapshot du premier noeud. Dans GCP, si vous êtes toujours dans Compute Engine, vous devriez voir un menu sur le côté gauche de la fenêtre. Ce menu contient tous les liens du Compute Engine. Cliquer sur Snapshot, puis créer.

Dans la page de création de snapshot, simplement vous assurer de sélectionner votre premier noeud comme source.

Lorsque le snapshot est créé, cliquer dessus pour entrer dans la page de détails. Vous devriez voir un bouton « Create instance » au haut de la page. La prochaine page devrait vous être maintenant familière! Nommer l’instance  demo-backend-node-2 de type f1-micro.

Lorsque la VM est créée, SSHez pour valider que vous avez bien une belle copie du premier noeud (git et node installé avec les sources).

Important : La VM devrait avoir une IP externe. Retirez-là en suivant les étapes de la section précédente.

Créer l’instance nginx

Bon! Là, on va utiliser le marketplace 🙂 Retournez dans vos VM Instances et cliquez sur « Create Instance ». Dans la partie de gauche de l’écran, sélectionnez l’option pour chercher une image sur le marketplace. L’image en question s’appelle NGINX Open Source Certified by Bitnami. Lorsqu’on vous demandera de configurer la VM, nommez là  demo-lb et assurez-vous de choisir micro comme machine type.

Le déploiement prend environ 1 à 2 minutes. Lorsque ce sera fait, vous obtiendrez le Site address.

Par défaut, l’instance nginx est configurée comme un serveur http régulier. SSHez dans la VM de nginx, nous allons changer cette configuration. Exécutez :

« Oh non, Sylvain! Pas vim! »

Pas de panique, on n’y sera pas longtemps 😛 Appuyez sur « i » pour entrer en mode insertion et ajoutez au haut du fichier :

Assurez vous de mettre les IP internes de vos deux noeuds. Puis, sous l’entrée server qui écoute sur le port 80, ajouter le proxy pass suivant :

Pour sortir de vim, faites « esc » pour quitter le mode insertion, puis tapez « :wq » pour Write and Quit.

Ensuite, vous devrez redémarrer nginx avec :

Si vous accédez à votre VM par son IP externe, vous devriez voir l’heure s’afficher 🙂 (n’oubliez pas de lancer PM2 sur les deux machines)

Conclusion

Bon. Pourquoi je montre quelque chose d’aussi complexe quand on sait tous qu’on peut aller sur OpenShift, utiliser Kubernetes, etc.? Hey bien, il peut y avoir plusieurs raisons. Par exemple, OpenShift n’offre aucun plan où les centres de données seraient au Québec. Sinon pour diminuer les coûts au maximum 😛 Le setup dans GCP 2 backend + 1 load balancer reviens à 15 $ / mois. OpenShift, ça chiffre assez vite. On parle d’une base de 50$ / mois, mais ça peut vite chiffrer dans les 500$ – 600$ / mois si vous avez moindrement besoin de ressource (25$ / go de RAM partagée parmi tous vos PODS).

Bref, c’est une solution qui ne coûte pas cher et qui n’est pas difficile à mettre en place. Merci de partager dans vos réseaux sociaux 😀

Suivez-nous par courriel!

Saisissez votre adresse courriel pour vous abonner au blog d'Ezo et recevoir une notification de chaque nouvel article par email.