Terraform dans un contexte Azure - Partie 1

AzureTerraformIaC
Farid LAOUFI - 22/02/2024 à 15:47:510 commentaire

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 :

  • définir l'état cible d'un environnement donné, quel que soit son état source
  • rapidement construire ou mettre à jour un environnement
  • réduire les risques
  • documenter l'infrastructure, d'une certaine manière le code est la documentation


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 :

  • gestion des versions dans un système de contrôle de code source
  • CI/CD
  • tests unitaires, d'intégration et end-to-end

 

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 :

  • des fournisseurs cloud (Azure, AWS, ...)
  • des fournisseurs de solutions SaaS (Databricks, Salesforce, ...)
  • des API (par exemple, HashiCorp maintient un provider permettant d'interagir avec Azure Active Directory via l'API Microsoft Graph)

 

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é :

  • dans l'environnement concerné
  • sur les serveurs de la société HashiCorp

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 :

  • d'un environnement Azure, si ce n'est pas le cas, vous pouvez en créer un ici
  • d'Azure CLI sur votre poste de travail, s'il n'y est pas déjà installé, vous pouvez l'obtenir depuis cette page


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 :

  • d'un resource group nommé "TerraformDemo"
  • dans ce resource group, d'un storage account nommé "terraformdemosa1" (je vous laisse adapter le nom, qui doit impérativement être unique au niveau mondial)


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 :

  • télécharge la dernière version du provider Azure pour Terraform
  • initialise l'état Terraform sur le storage account "terraformdemosa1"


Nous explorerons dans un prochain article les possibilités du provider Azure pour Terraform.

Commentaires :

Aucun commentaires pour le moment


Laissez un commentaire :

Réalisé par
Expaceo