C'est quoi une Infrastructure as code ?

 
 

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


resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

resource "azurerm_network_security_group" "example" {
  name                = "acceptanceTestSecurityGroup1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_network_ddos_protection_plan" "example" {
  name                = "ddospplan1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_virtual_network" "example" {
  name                = "virtualNetwork1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  address_space       = ["10.0.0.0/16"]
  dns_servers         = ["10.0.0.4""10.0.0.5"]


  subnet {
    name           = "subnet1"
    address_prefix = "10.0.1.0/24"
  }

  subnet {
    name           = "subnet2"
    address_prefix = "10.0.2.0/24"
  }

  subnet {
    name           = "subnet3"
    address_prefix = "10.0.3.0/24"
    security_group = azurerm_network_security_group.example.id
  }

  tags = {
    environment = "Production"
  }
}


Enregistrer un commentaire

Plus récente Plus ancienne