Article publié par Antoine Deblonde, Tech Lead Data, Barthélemy Gouby, AI/Data Engineer & Karine Aknin, Data Engineer chez Keyrus
Apparu il y a une quinzaine d’années, le terme « Cloud » est un terme générique pour désigner les grands services d’infogérance, c’est-à-dire de sous-traitance d’infrastructures et de services informatiques. Ce terme recouvre trois grands types de services :
l’Infrastructure as a Service : provision et gestion de machines distantes ;
la Platform as a Service : gestion de plates-formes de services, “serverless” ;
le Software as a Service : services et outils utilisables directement en ligne, en mode client/serveur.
Le marché du Cloud (IaaS, PaaS, SaaS) représente en 2018 environ 175 milliards d’euros (source Gartner), en croissance forte depuis 15 ans, avec une pénétration exponentielle dans les entreprises. La migration massive des systèmes informatiques vers ces services justifie le besoin croissant d’outils simplifiant la conception et la gestion d’architectures informatiques Cloud.
Un des buts premiers de l’infogérance informatique est de permettre de traiter l’infrastructure d’un système d’information comme une charge d’exploitation (OPEX), c’est-à-dire comme une ressource courante pour laquelle l’utilisateur paie à l’usage, plutôt que comme une immobilisation de capital (CAPEX). Les grands services de Cloud qui se sont développés depuis une quinzaine d’années ont apporté des nouveautés par rapport aux services d’infogérance historiques.
La première force du Cloud est la capacité à fournir de l’infrastructure à la demande, quasi instantanément, et avec une grande finesse de granularité dans les infrastructures fournies. Cela permet de concevoir des systèmes dont la taille des ressources peut évoluer de manière permanente pour répondre au plus près au besoin de ce système : il s’agit du concept de scalabilité, à savoir la capacité d’un système à s’adapter à une augmentation ou une diminution de la charge à laquelle il est soumis. Le Cloud est également extrêmement modulaire : il permet d’ajouter des services plus facilement, de modifier l’architecture d’un système d’information sans avoir à faire de grands investissements et peut s'ajouter à l’existant (Cloud ou On-Premise).
Les Cloud providers majeurs offrent enfin de nombreux services dit « managés » qui répondent à de nombreuses problématiques. Ces services peuvent servir de briques pour construire plus facilement et plus rapidement un système d’information. Ces différents services permettent de réduire la complexité de la création et de la gestion d’une infrastructure, en proposant une abstraction des ressources matérielles qu’ils se chargent de gérer automatiquement. Cette abstraction des ressources inclut deux nouvelles possibilités majeures par rapport à la gestion d’infrastructures On-Premise ou à l’infogérance classique : la répétabilité de la création d’infrastructure et la planification du déploiement d’architectures entières avant tout démarrage d’instance machine. Ces apports permettent d’automatiser des tâches récurrentes réalisées manuellement : par exemple, dans le cas d’un data lake, il sera souvent nécessaire de mettre en place un ou plusieurs systèmes ETL pour préparer les données, des systèmes de stockage pour les données entrantes et préparées, ainsi que de définir un workflow de tâches gouvernant ces activités. L’automatisation de ces tâches peut alors permettre un gain de temps considérable, en développement mais aussi en maintenance.
Les facilités considérables apportées par les outils Cloud permettent donc de construire plus rapidement et plus efficacement des systèmes IT plus vastes et plus complexes. La simplification de la gestion matérielle aboutit donc paradoxalement à une complexification des architectures, qui amène un besoin de standardisation de la planification des déploiements Cloud. La gestion des architectures Cloud est ainsi entrée en phase d’industrialisation. En informatique comme dans les autres domaines, l’industrialisation cherche à standardiser et à automatiser les processus pour permettre un gain de performance et de contrôle. Une application informatique peut être considérée comme industrialisée quand elle est :
rapide à déployer ;
facile à maintenir et à étendre ;
résiliente aux montées en charges et aux erreurs.
Le problème de l’industrialisation des déploiements d’architecture Cloud a été résolu par le concept d’infrastructure as code (IaC), qui repose sur les outils mis à disposition par les Cloud providers pour instancier et gérer les différents services managés qu’ils proposent. L’utilisation de l’IaC pour l’industrialisation des déploiements Cloud a permis de résoudre le problème de l’adhérence aux différents providers : les Cloud providers proposant chacun leur propre implémentation de services managés répondant au même besoin, il faut maintenir des connaissances techniques spécifiques à chaque Cloud provider pour rester libre d’utiliser leurs offres sans être lié à un provider en particulier.
L’IaC est une méthode qui permet de gérer et de provisionner des infrastructures informatiques par le biais de scripts de configuration, qui rendent possible un déploiement automatisé et standardisé d’infrastructures complexes à la manière d’un software. Son fonctionnement repose largement sur la capacité technique des Cloud providers à fournir des machines et services à la demande. Elle vient enrichir un système qui jusqu'ici nécessitait un déploiement manuel et « from scratch » des procédures et des processus. En effet, avant l’arrivée de l’IaC, le setup d’infrastructures informatiques était un processus manuel, nécessitant parfois des opérations et des processus longs, difficiles à suivre et générant de nombreuses erreurs.
Les principaux bénéfices de l’IaC sont :
Une rapidité et une simplicité du déploiement de n’importe quel service : réseaux, sécurité, base de données, machine virtuelle… ;
Une réduction des erreurs de développement grâce à une forte consistance (standardisation du setup de l’infrastructure) la rendant aussi de ce fait résiliente ;
Une augmentation de l’efficience du développeur ainsi que la scalabilité et la maintenabilité du code.
Elle répond donc bien aux problématiques d’industrialisation évoquées précédemment, en ajoutant une automatisation accrue à l’abstraction apportée par le Cloud dans la conception des architectures IT. Historiquement, ce sont les Cloud providers qui ont en premier répondu à cette problématique d’automatisation de déploiement d’infrastructures. Bien qu’ils proposent tous leur propre outil d’IaC, ceux-ci ont le désavantage d’être spécifique à leur plate-forme : citons par exemple CloudFormation pour AWS ou encore Cloud Automation pour Azure. Face à cette forte adhérence de ces outils d’IaC providers spécifiques, de nombreux projets open source ont vu le jour et se sont imposés en permettant une encapsulation dans un même outil de tous les Cloud providers. Il s’agit de projets open source tels que Terraform, Ansible, Chef, Puppet ou encore Salt, qui s’utilisent pour n'importe quelle plate-forme.
Ces projets open source répondent chacun à des problématiques différentes : Terraform pour le déploiement d’infrastructures, Ansible pour leur configuration et leur gestion. Ainsi, Terraform, projet développé par HashiCorp, est devenu le de facto standard pour la conception et le déploiement d’infrastructures grâce à un langage de configuration conçu pour être facilement lu et maintenu, le HCL. Ces outils de gestion d’infrastructures tels que Terraform permettent donc d’instancier, de monitorer et de détruire des machines et des services managés sur les fournisseurs Cloud ou On-Premise. En mode IaC, l’utilisation de ces outils consiste à décrire l’ensemble d’une architecture informatique sous forme de fichiers de configuration. Dans le cadre de projets orientés data, ils sont communément employés pour le déploiement de data lake allant de la mise en place d’un système ETL à celui d’un data warehouse. Ce besoin d’automatisation mais aussi de résilience est universel chez les grands acteurs du marché.
Ainsi, les outils d’IaC offrent un écosystème mûr permettant de couvrir de nombreux cas d’usage. Ces outils variés nécessitent cependant un certain temps d’apprentissage et l’acquisition de nouvelles compétences pour les développeurs / devOps qui souhaitent s’y convertir. De plus, l’utilisation de ces outils implique encore de nombreuses tâches de développement redondantes, telles que l’implémentation de templates de configuration. L’identification et la simplification de ces tâches encore répétitives permettraient alors de simplifier encore le déploiement et la maintenance d’architecture IT.
Dans les systèmes d’information orientés Data, les infrastructures de type data lake deviennent de plus en plus répandues : ce cas d’usage typique consiste d’un point de vue théorique à rassembler les données d’une entreprise au sein d’un système de stockage centralisé et persistant, sur lequel peuvent se brancher différents outils d’exploitation et de visualisation de la données. Il s’agit là d’un besoin récurrent au sein d’un grand nombre d’entreprises et sur base de constat. Il était donc pertinent de se poser la question de l’industrialisation de son déploiement et de sa maintenance, typiquement via les outils d’IaC standards.
De l’utilisation effective des outils IaC est ressorti le besoin d’un méta-outil d'industrialisation réunissant ces divers projets d’IaC et automatisant les tâches encore répétitives dans leur utilisation. L’objectif du projet CloudLake est ainsi de pouvoir réunir la conception d’infrastructure, la gestion de configuration et la gestion de workflow, tout en proposant un catalogue de templates/blueprints prêt à l’emploi pour les différentes briques fonctionnelles. CloudLake permettrait de décrire une infrastructure data lake de bout-en-bout via une interface simple, agnostique au Cloud provider, de manière fonctionnelle plutôt que technique. Ce projet utilise les différents outils d’IaC open source devenus standards tels que Terraform pour la conception et la mise en place de l’infrastructure ou Ansible pour sa configuration et son maintien. Tout comme les outils d’IaC sur lesquels il se repose, CloudLake permet d’abstraire davantage la complexité entourant la mise en place d’une infrastructure Cloud pouvant reposer sur plusieurs Cloud providers, en permettant aux architectes IT de passer du listing de spécifications techniques à l’assemblage de briques fonctionnelles pré-packagées.
Dans un premier temps, le projet CloudLake se concentre sur la mise en place d'architectures répondant aux besoins des projets réalisés par les experts de Keyrus. Il évoluera ensuite pour proposer un ensemble de fonctionnalités et d’algorithmes répondant aux usages les plus courants, conçus pour être le plus générique et configurable possible, ces briques fonctionnelles permettront d'accélérer d’autant plus la recherche de valeur des données d’un data lake.