Bonjour à tous, dans l'article d'aujourd'hui il sera question d'expliquer c'est qu'est une infrastructure as code, son utilité et la problématique que résout cette technologie.
Il ne fait aucun
doute que le cloud computing a eu un impact majeur sur la façon dont les
entreprises construisent, adaptent et maintiennent leurs produits
technologiques.
S'il est facile de faire tourner des architectures sur le cloud, des erreurs peuvent facilement être commises lors du provisionnement d'architectures complexes. L'erreur humaine sera toujours présente, en particulier lors d’un déploiement d’une infrastructure sur le cloud.
La seule façon d’éviter ce genre d’erreurs efficacement est l'automatisation, et Infrastructure as Code aide les ingénieurs à lancer automatiquement des environnements sur le cloud rapidement et sans erreurs.
L'infrastructure en tant que code (IaC) est une combinaison de normes, de pratiques, d'outils et de processus permettant d'approvisionner, de configurer et de gérer une infrastructure informatique à l'aide de codes et d'autres fichiers lisibles par machine.
Les avantages de l’utilisation d'une infrastructure as code se présentes dans les points suivants :
Rapidité : en
évitant l'intervention manuelle, les déploiements d'infrastructure sont rapides
et sûrs.
Gestion des versions : Le code ainsi que ces versions peut être vérifié et géré dans le temps.
Documentation :
Le code de l'infrastructure sert de documentation puisqu’il est géré sur GitHub ou GitLab (chaque changement apporté est enregistré)
Réutilisabilité :
L'IaC facilite la création de modules réutilisables, par exemple pour
reproduire les environnements de développement et de production.
Agilité : On peut utiliser le DevOps pour gérer et déployer les infrastructures définies dans les fichiers de config
Comment une IaC est créée ?
Le processus de création d’une IaC dans sa forme basique est simple,
Les développeurs
rédigent la spécification de l'infrastructure (code de l'infrastructure) dans un langage spécifique comme le HLC
Les fichiers
résultants sont envoyés à un dépôt de
code comme GitHub ou Gitlab ou meme Azure repos.
La plateforme (example : MS Azure, AWS) des APIs comme celle de "Azure Resource Manager" prend toutes les mesures nécessaires pour créer et configurer les ressources informatiques définies dans le fichier de configuration.
Les principaux outils utilisés pour créer une infrastructure as code
Il existe une plusieurs outils qui peuvent être utilisés pour déployer une infrastructure as code, parmi ces outils, il y a deux outils qui sont considéré comme les plus utilisés dans ce domaine à savoir :
Terraform : outil open-source pour écrire des configurations pour créer tous types de ressources (Machines virtuelles, réseau, sous réseau, azure fonctions ..etc.) sur le cloud et on-premise en utilisant le langage HLC (Hashicorp Configuration Langage).
Azure ARM template : Le modèle Azure Resource Manager (ARM) est un bloc de code avec une syntaxe déclarative qui définit la configuration d'une infrastructure sur Azure.Azure ARM Template exploite les APIs de Azure Resource Manager (ARM) pour déployer les ressources définies dans le code de la configuration.
Comment fonctionne Terraform ?
Disons que nous avons une batterie de ressources azure que nous voulons déployer. Dans le cadre d’un plus grand déploiement d’une infrastructure, les ressources voulues seront les suivantes : un cluster AKS (Azure kubuernetes cluster), un conteneur de registre (Azure ACR) et une VM
Les ressources voulues ici seront décrite par le "desiered state" .
Le "current state" dans ce cas puisque nous n’avons rien n’as simplement rien.
Le but maintenant, c’est d’aller d'un point A "current state" vers un point "B desired state".
Dans Terraform y a trois phases majeures.
La première naturellement consistera à écrire le code de l'infrastructure, c'est la phase "code phase"
La deuxième phase "plan phase", dans cette phase Terraform vas comparer entre le code qu'on a écrit (donc l'infrastructure définie=> desired state) et entre ce qui existe actuellement sur notre souscription Microsoft Azure.
Si Terraform détecte un changement ou qu’une des ressources définie n'est pas déployé il nous sera proposé de déployer ces ressources dans l’invite de commande
La troisième phase c'est la phase d'application ou Terraform vas appliquer ces changements en déployant l’infrastructure défini via azure provider (une sorte de connecteur pour accéder aux APIs du "Azure Resource Manager" de Microsoft Azure pour permettre le déploiement).
Remarque : l'authentification à Microsoft Azure pour permettre ces opérations se fait via un "token" attribué par Azure Active Directory lorsqu’on se connecte via Azure cli ou PowerShell à notre souscription azure.
Exemple de code d’une infrastructure as code sur le cloud
L’exemple illustré
dans l’image ci-dessous est le code HLC d'un fichier .tf (terraform) pour créer
un réseau virtuel Azure (Vnet) avec un major network 10.0.0.0/16 et 3 sous
réseaux (subnet1, subnet2, subnet3)
Avant de créer le
Vnet et les subnet on doit créer un groupe de ressource azure qu’on appellera
"example-resources" pour stocker les métadonnées de ces
ressources. Le choix de la région pour le groupe de ressources est indépendant
de régions choisies pour le déploiement des ressources contenu dans cette
dernière. Mais on peut choisir de déployer sur la même région en faisant une
référence à la première variable déclarée location en accèdent à cette variable par un simple .location
Le Network
Security Group (NSG) est ici important, car il va être relié au réseau virtuel, il
va service à filtrer le trafic entrant et sortant en se basant sur les IP
source et de destination ainsi que les Port source et de destination et les
types de protocoles TCP, UDP, ICMP, ESP, AH ou n'importe quel autre type
de protocole.
Le tag est simplement
pour identifier et organiser les ressources au sein de la souscription, car ces
derniers peuvent s’avérait utiles lors d’une sélection ou une recherche ou
simplement générer un "invoice" ou pour générer un rapport d’analyse
des prix de consommations basée sur ce tag