Développer dans le Cloud, pour quoi faire?
Développeur de formation, j’ai très vite basculé dans le monde du cloud. Dès mon stage de fin d’étude, il y a de ça 2 ans, j’ai découvert un univers étrange où les serveurs n’étaient plus physiquement présents, mais déployables en lignes de commandes et facturables à l’usage. J’ai baigné dans un environnement très Ops, où j’ai pu apprendre la base de ce métier et tendre vers un profil DevOps. Plus particulièrement, ce sont l’automatisation et la mise en place de chaînes de CI/CD qui m’ont attiré et qui continuent de passionner. Alors finalement, développer sur le Cloud, qu’est-ce que ça change ?
L’automatisation, un pré-requis
Lors du passage du on-premise vers le cloud, comme lors de la nouvelle année, il est de coutume de prendre des bonnes résolutions. Cette bonne résolution, entre autres, doit être d’au-to-ma-ti-ser vos déploiements (et contrairement aux résolutions du nouvel an, tenez cette résolution).
Un déploiement passant par de la CI/CD a pour moi plusieurs avantages:
- La rapidité de déploiement : en utilisant une chaîne de CI/CD bien rodée, une application peut être entièrement déployée de A à Z, en quelques minutes (comptez entre 20 et 40 minutes pour appli web, suivant les tests effectués et la taille de l’appli à déployer).
- La fiabilité du déploiement : un déploiement automatisé, c’est l’assurance de ne pas oublier une ligne de commande, un paramètre ou un changement dans un fichier de conf, qui mettra votre déploiement en échec.
- La gestion du multi environnement : la chaîne de CI/CD permet de séparer le déploiement sur un environnement de développement ou de production, suivant que le déploiement soit déclenché par un push sur une certaine branche, un certain tag de version, etc. Ces déploiements, bien que séparés, doivent avoir le comportement le plus similaire possible, pour avoir l’assurance que ce qui fonctionne en dev, fonctionne en prod. Et quoi de mieux que d’avoir une base de code de déploiement commune avec uniquement quelques variables propres à chaque environnement pour accomplir un tel résultat ?
Développer dans le Cloud : on garde les bonnes habitudes…
Contrairement à un Ops qui voit son métier être bouleversé par la venue du cloud et qui tend naturellement à se diriger vers un statut de DevOps, un développeur peut conserver son IDE, son langage ainsi que ses standards de format de codes préférés.
Leçon n°1: Le cloud ne mettra pas un terme à la guerre pour déterminer qui de EMACS ou VIM est l’éditeur suprême (alors qu’on sait tous que VsCode leur est largement supérieur).
Leçon n°2: Le cloud permettra toujours à Alice d’engueuler Bob, parce qu’il a fait une Pull Request sans respecter l’indentation de 4 espaces, alors que c’est écrit dans les specs du projet… C’est pourtant pas compliqué Bob.
Le mariage de la CI/CD et du Cloud
Cependant, Alice va pouvoir profiter de l’alliance de la CI/CD et du cloud pour augmenter sa productivité. Oui, l’introduction sur la CI/CD c’était pas uniquement pour faire un article qui faisait pleins de lignes, avec un QCM de 50 questions en fin de lecture, histoire de voir si vous étiez attentifs.
Mais revenons à nos nuages. Une application déployée sur un environnement de dev va lui permettre de tester les comportements qui n’étaient pas visibles en local :
- “Est ce que mon front et mon back communiquent bien l’un avec l’autre quand ils sont sur deux machines différentes ?”
- “En chargeant les images depuis un bucket, ou un serveur distant et non plus depuis mon local, apparaissent elles bien à l’écran ?”
- “Mon application supporte-t-elle bien la montée en charge ?”
De plus, comme dit précédemment, on s’assure d’avoir le même comportement en production en utilisant le même type de machine qu’en dev.
Le cloud public, plus qu’un fournisseur de serveurs
Pour aller plus loin, le cloud n’offre pas uniquement des machines distantes, mais bien un ensemble de service et un écosystème très riche.
Ces services managés vont permettre d’utiliser et de déployer des solutions dites PaaS, SaaS ou même FaaS, à chaque fois augmentant le niveau d’abstraction de l’infrastructure sous-jacente pour le développeur, et le dispensant ainsi de la partie “Ops” du travail. D’ailleurs comme le dit le dicton “ 5 services managés par jour, éloignent le médec… l’ops”.
Ces services managés vont grandement faciliter la vie du développeur, n’ayant plus à se soucier des mises à jour de l’OS, des failles de sécurité dites “bas niveau”, du scaling de son application, etc… Cependant, le développeur est toujours responsable de la sécurité de son application à proprement parler. Là encore, de nombreux services managés peuvent lui venir en aide. IAP chez GCP ou Cognito chez AWS, par exemple, vont lui permettre de gérer l’authentification et de restreindre l’accès à l’application uniquement aux personnes autorisées. Pour plus de détails, consultez nos articles consacrés à la sécurité sur le Cloud.
Pour gérer ses bases de données SQL ou No-SQL, des solutions managées existent aussi. Elles permettent de se focaliser sur la modélisation des données et de ne plus perdre de temps à la mise en place de ses bases de données.
Ce ne sont que deux exemples parmi d’autres qui permettront au développeur d’utiliser des services “prêts à l’emploi”, lui permettant de se concentrer sur ce qui apporte vraiment de la valeur pour l’utilisateur final.
Bien évidemment il faut prévoir un temps d’adaptation, de prise en main de ces différents services, et même de la compréhension de la plateforme cloud en général. Une équipe rodée sur un certain environnement, qui à l’habitude de travailler avec certaines méthodes et certains process, sera toujours plus performante qu’une équipe qui doit se former sur une nouvelle solution.
Mais une fois la prise en main de la plateforme effectuée, en plus de profiter des différents services managés, Alice pourra profiter de l’interaction native entre ces différents services. Et ainsi permettre une communication plus aisée et plus sécurisée, car passant par le réseau interne et utilisant les protocoles de communication propre au cloud provider.
Pour conclure
En conclusion, pour des petites équipes de développement qui ne peuvent pas se permettre d’avoir de personnes dédiées à la mise en place d’une infrastructure, le cloud offre de nombreux services managés, permettant au développeur de se recentrer sur son domaine de compétence. Pour les équipes de toutes tailles, l’automatisation du déploiement est cependant nécessaire pour profiter pleinement des avantages du cloud. À savoir des itérations rapides et incrémentales, permettant d’ajouter des features au compte goutte et de tester dans des conditions proches du réel, car rien ne remplace un utilisateur final pour trouver des bugs dans une application !