Infrastructure as Code
Le terme infrastructure couvre tout ce qui est nécessaire au bon fonctionnement d'une application, tout en ne faisant pas partie de ladite application : bases de données, réseau, machines virtuelles, DNS ... L'Infrastructure as Code (IaC) consiste à décrire avec des scripts ou du code déclaratif l'infrastructure utilisée par une application.
En général, une application dispose de plusieurs environnements : développement, UAT, production, etc. Toute nouvelle version de l'application peut impliquer la mise à jour de l'infrastructure sous-jacente, et ce autant de fois que d'environnements. Effectuer ces mises à jour de façon manuelle s'avère être chronophage, et surtout sujet à erreur : une mauvaise manipulation ou bien encore l'application d'une configuration incorrecte peuvent très facilement se produire, même si l'infrastructure est simple... La mise en oeuvre d'outils IaC permet de :
Le fait que la pratique de l'IaC consiste à écrire du code implique que les pratiques en vigueur dans le développement d'applications peuvent s'appliquer :
Historiquement, l'IaC a décollé en 2006, lorsqu'Amazon a voulu faciliter le fait de provisionner des instances dans sa plate-forme cloud : AWS. Rapidement, d'autres sociétés ont proposé des outils pour leurs plate-formes respectives : par exemple, Microsoft l'a fait pour Azure.
Terraform
Terraform est l'un des outils IaC les plus populaires. Il a été crée par la société HashiCorp, et permet la gestion des composants via un langage de type déclaratif nommé HCL (HashiCorp Configuration Language). Terraform est open source, dispose d'une large communauté er est compatible avec plusieurs fournisseurs cloud via le mécanisme des providers.
Un provider est un plug-in permettant d'interagir avec :
Un provider met à disposition des types de ressources pouvant être gérées par Terraform. Par exemple, le provider Azure met à disposition le type de ressource azurerm_storage_account (https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account) permettant la définition et la gestion de comptes de stockage dans Azure.
En général, les providers sont centralisés sur le Terraform Registry (https://registry.terraform.io/).
Le fonctionnement de Terraform se base sur la notion d'état. L'état permet, sur un environnement donné, de lier les composants existants avec les ressources déclarées dans du code HCL. Cet état peut être stocké :
Le code HCL décrit la cible à atteindre, en termes d'infrastructure, sur l'environnement concerné. L'état décrit les composants distants tels qu'ils étaient la dernière fois que Terraform a mis à jour l'environnement. Vous le voyez certainement venir : Terraform a un mode de fonctionnement différentiel, l'outil compare l'état actuel de l'environnement avec l'état cible, et en déduit une liste d'opération à appliquer pour mettre à niveau l'environnement.
Un peu de pratique !
Avant de commencer ce mini tutoriel, assurez-vous de disposer :
Dans votre application de terminal favorite, tapez cette commande :
az login
Cette commande vous authentifie et, par la suite, permet d'utiliser d'autres commandes pour gérer votre environnement Azure. Le provider Azure pour Terraform se base sur Azure CLI,
Bien entendu, vous aurez besoin de l'outil en ligne de commande Terraform, les instructions pour l'installer sont disponibles ici. Si vous utilisez Visual Studio Code, installez l'extension HashiCorp Terraform pour bénéficier de la coloration syntaxique ainsi que d'autres fonctionnalités bien sympathiques.
Dans la suite de cet article, vous aurez besoin :
Le script suivant permet de créer, à l'aide de commandes Azure CLI, les éléments ci-dessus :
az group create --location WestEurope --name TerraformDemo
az storage account create --resource-group TerraformDemo --name terraformdemosa1
az storage container create --account-name TerraformDemo --name tfstate
Créez également sur votre poste de travail un nouveau répertoire, qui contiendra notre projet Terraform. Dans ce répertoire, créez un fichier nommé main.tf avec le contenu suivant :
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
}
}
backend "azurerm" {
storage_account_name = "terraformdemosa1"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
skip_provider_registration = "true"
subscription_id = "3fc0c691-586c-4183-85bf-d22f479917b1"
features {}
}
Ce code est commenté ci-dessous.
Dans le dossier contenant le projet Terraform, lancez cette commande :
terraform init
Cette commande :
Nous explorerons dans un prochain article les possibilités du provider Azure pour Terraform.
Commentaires :
Aucun commentaires pour le moment
Laissez un commentaire :