Au fil des ans, le développement cloud a connu un changement de paradigme majeur. De nouvelles applications plus récentes et plus complexes sont déployées rapidement sur le cloud pour minimiser les temps d’arrêt. Et à travers tout cela, le concept d’Infrastructure-as-Code et divers outils ont émergé pour simplifier le processus de développement d’applications.

Vous vous demandez peut-être : qu’est-ce que l’Infrastructure-as-Code ? Comment cela améliore-t-il le processus de développement et l’expérience, et où intervient Terraform dans tout cela ? Eh bien, nous explorerons tout cela et plus encore dans ce guide. Mais avant de commencer, voici quelques prérequis :

  • Connaissances de base sur le cloud et les terminologies cloud

  • Accès à un PC pour implémenter des exemples de code

  • Un compte GCP

Avec cela, commençons.

Voici ce que nous allons couvrir :

  1. Vue d’ensemble de l’Infrastructure as Code

  2. Qu’est-ce que Terraform ?

  3. Avantages de Terraform

  4. Termes Courants Utilisés dans Terraform

  5. Projet de Démo: Comment Rédiger une Configuration Terraform

  6. Conclusion

Vue d’Ensemble de l’Infrastructure en tant que Code (IaC)

L’infrastructure en tant que code fait référence à la génération d’outils et d’applications d’infrastructure cloud avec un document de configuration basé sur du code. Ce processus, lors de son exécution, automatise la séquence et le processus de création de bases de données, de machines virtuelles et de serveurs. Cela améliore l’expérience utilisateur en réduisant la fréquence des déploiements manuels de services cloud, notamment pour de multiples services identiques.

Il existe deux approches distinctes de l’infrastructure en tant que code : l’approche impérative et l’approche déclarative.

Lorsque vous utilisez l’approche déclarative pour la génération d’infrastructure, vous décrivez simplement vos résultats attendus/désirés pour l’infrastructure à générer, puis l’outil IaC que vous utilisez détermine comment produire ce résultat.

En revanche, l’approche impérative consiste à spécifier les étapes exactes nécessaires pour atteindre l’état d’infrastructure souhaité. Bien que l’approche impérative semble plus adaptée aux configurations d’infrastructure complexes, l’approche déclarative peut tout aussi bien fonctionner.

Certains outils sont capables d’utiliser les deux approches, tandis que d’autres ne conviennent qu’à l’une ou à l’autre. Parmi les outils IaC populaires utilisés dans le monde entier, citons Terraform IaC, AWS Cloud Formation, Ansible, et Pulumi, Chef, entre autres.

Comme son nom l’indique – infrastructure en tant que code – le code créant l’infrastructure est écrit dans divers langages de template au sein de l’espace IaC. Les langages de template populaires incluent JSON, YAML, modèle ARM, HCL, scripts Heat, etc.

Vous pouvez également utiliser des outils de script pour exécuter l’infrastructure cloud. Parmi les plus populaires, on trouve Bash et PowerShell. Ceux-ci sont parfois préinstallés sur la plupart des ordinateurs personnels.

De tous ces outils, cependant, Terraform se distingue pour diverses raisons – et c’est celui que nous examinerons dans cet article.

Qu’est-ce que Terraform?

Terraform est un outil open source développé par HashiCorp en 2014. Il a évolué au fil des ans et sert désormais d’outil d’infrastructure agnostique au cloud qui vous permet de créer une infrastructure sur plusieurs fournisseurs de services cloud.

Terraform propose également Terraform Cloud, un outil logiciel en tant que service basé sur le cloud. Il permet le déploiement basé sur le cloud d’outils cloud, au lieu d’utiliser les anciennes méthodes locales que nous avions dans l’ancien outil Terraform CLI.

De plus, comme d’autres outils IaC qui utilisent des langages de modèle, le framework de modèle utilisé pour créer une infrastructure dans Terraform est le langage de modèle HashiCorp (HCL).

Avantages de Terraform

Je vais maintenant mettre en avant certains des avantages de l’utilisation de Terraform en tant qu’ingénieur cloud, ainsi que le rôle clé de l’outil dans l’écosystème cloud.

1. Approche Déclarative

Cette approche de l’automatisation de l’infrastructure cloud garantit que toute l’infrastructure requise à déployer (bases de données, serveurs, etc.) est explicitement déclarée et exécutée en conséquence. Cela aide à éviter les conflits.

2. Gestion des Conflits

En plus de ses capacités efficaces d’automatisation des outils cloud, Terraform possède des propriétés de détection et de gestion des conflits robustes. L’une des façons dont il gère les conflits est via la fonction Terraform plan. Cette fonction met en évidence tout conflit perçu ou potentiel d’orchestration de l’infrastructure, ce qui permet une correction facile avant le déploiement. Je discuterai davantage de cela dans les sections suivantes.

3. Cloud Agnostique

Terraform est un fournisseur de services d’automatisation multi-usages et multi-cloud avec des capacités efficaces d’automatisation de l’infrastructure sur les principaux fournisseurs de services cloud (AWS, GCP et Azure). Il permet également une automatisation hybride et inter-fournisseurs.

4. Convivialité

Terraform est l’un des plus grands outils d’automatisation cloud avec les plus grandes communautés d’utilisateurs. Il propose des tutoriels étendus adaptés aux débutants qui vous aident à vous familiariser rapidement avec l’outil. Voici un lien vers sa documentation pour que vous puissiez plonger plus profondément.

5. Capacités de Gestion de Fichiers

Terraform crée automatiquement une sauvegarde locale des états d’automatisation sur votre ordinateur local pour garantir un rappel immédiat et la gestion des fichiers en cas de problème. Il offre également des options de sauvegarde distante vers des fournisseurs de services cloud distants si nécessaire.

6. Contrôle de Version

Tout comme le système de contrôle de version Git, Terraform possède un système de contrôle de version intégré qui vous permet de suivre les modifications apportées à un fichier Terraform. Il vous permet également de revenir à des versions antérieures de votre code en cas d’erreurs dans la version actuelle, par exemple.

7. Réutilisation de code

Terraform propose une grande variété de modèles de code pour une réutilisation facile sur sa page de documentation pour les développeurs.

Maintenant que nous avons mis en évidence les avantages de Terraform, apprenons quelques terminologies courantes utilisées dans Terraform et ce qu’elles signifient.

Termes couramment utilisés dans Terraform

Avant de commencer à utiliser Terraform, vous devez être familiarisé avec certains termes clés qui reviennent souvent. Voici ce que vous devez savoir :

  1. Fournisseurs : dans Terraform, un Fournisseur est une interface de programmation qui permet à Terraform d’interagir avec différentes API et services cloud. Par exemple, vous utiliseriez un fournisseur pour interagir avec un fournisseur de services cloud comme GCP ou Azure.

  2. Modules: Les modules sont spécifiquement créés dans le cadre de Terraform et servent de composants réutilisables qui vous permettent d’orchestrer facilement des services cloud. Vous pouvez également stocker des informations clés concernant les services cloud dans un module, puis le modifier pour garantir son unicité à l’aide de variables de module.

  3. Ressources: Les ressources dans Terraform font référence aux composants d’infrastructure cloud à créer. Les exemples incluent les réseaux cloud, les machines virtuelles, les zones de disponibilité et autres infrastructures.

  4. État: Le concept d’état dans Terraform forme la base de son efficacité. L’état garde une trace de la configuration actuelle de vos ressources d’infrastructure, et contient des détails sur chaque ressource que Terraform a créée, modifiée ou supprimée. Le système de contrôle de version de Terraform l’utilise pour suivre les changements que vous apportez à un fichier de code et utilise ces informations pour détruire et provisionner l’infrastructure si nécessaire.

  5. Espace de travail: un Espace de travail fonctionne un peu de la même manière qu’un système de contrôle de version, car il crée une sorte de contrainte autour d’un fichier de travail. Les Espaces de travail vous permettent de gérer de multiples instances d’une seule configuration d’infrastructure de manière propre et isolée dans le même backend. Vous pouvez utiliser des espaces de travail pour séparer des environnements tels que le développement, la mise en scène et la production tout en utilisant la même configuration Terraform.

Projet de démonstration: Comment écrire une configuration Terraform

Dans cette section, nous plongerons plus profondément dans l’écriture de notre premier fichier Terraform pour orchestrer une machine virtuelle de programme Google Cloud avec juste quelques lignes de code. Mais avant de commencer, nous discuterons des différentes commandes que vous devez comprendre avant de mettre en œuvre le projet de démonstration.

Commandes Terraform courantes

  • Terraform init: Cette commande initialise l’outil Terraform et télécharge des fichiers essentiels spécifiques au fournisseur de cloud. Elle établit également une connexion entre Terraform et le fournisseur de cloud en question. Dans notre cas, c’est entre GCP et le fournisseur Terraform.

  • Terraform fmt: Cette commande garantit automatiquement un formatage et une indentation optimaux du code. Elle assure une exécution ordonnée du code et minimise les erreurs.

  • Terraform plan: Cette commande décrit les étapes d’exécution du code Terraform et détecte les erreurs qui peuvent survenir pendant le processus d’exécution. Elle met également en évidence les erreurs dans le code Terraform qui peuvent entraver l’exécution. Enfin, elle fonctionne avec la gestion de l’état de Terraform pour détecter tout changement d’état et déprovisionner ou générer des services cloud supplémentaires si nécessaire.

  • Terraform apply: Cette commande exécute l’état Terraform planifié mis en œuvre par la commande Terraform plan.

  • Terraform destroy: Cette commande est la dernière commande dans le schéma Terraform qui est utilisée pour désactiver ou détruire tous les services cloud créés à l’aide de la commande Terraform apply. Il est important de noter que vous devez exécuter les commandes énumérées ci-dessus de manière séquentielle pour vous assurer que votre infrastructure est correctement créée.

Créer une machine virtuelle GCP alimentée par IaC

Maintenant que vous avez appris ces commandes importantes, testons-les toutes en créant notre première machine virtuelle GCP alimentée par IaC.

Dans votre éditeur de code, tapez le code suivant :

provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"        
}

Ce code met en évidence le fournisseur cloud que nous utilisons pour générer les ressources cloud dont nous avons besoin. Dans notre cas, c’est le programme Google Cloud. Le nom qui lui est attribué est simplement « google ». D’autres fournisseurs cloud comme AWS et Azure sont respectivement « aws » et « azure ».

La deuxième ligne identifie l’identifiant d’abonnement GCP, qui est unique à chaque compte GCP (et aide à faciliter l’intégration précise). Vous devriez utiliser le vôtre dans l’espace prévu.

Vous devrez également inclure une région de ressources appropriée et une zone de disponibilité de ressources. Cela sert de base physique pour la machine virtuelle que nous allons créer afin de pouvoir l’exécuter. Dans ce scénario, j’ai choisi la région centrale des États-Unis et la zone de disponibilité 1-a, respectivement. Vous pouvez en savoir plus ici sur les régions et les zones de disponibilité cloud.

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"      
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11" 
    }
  }

L’extrait de code ci-dessus spécifie la ressource de calcul exacte qui sera orchestrée, qui dans notre cas est une instance de machine virtuelle codée en tant que « vm_instance ». 'exemple-vm' est le nom que nous voulons attribuer à la machine virtuelle que nous allons créer pour ce projet. Il est important de noter que le nom de la machine virtuelle doit également être unique. Le type de machine virtuelle que nous avons choisi était le VM de type E2 (usage général)-moyen. Vous pouvez obtenir plus d’informations sur les types de machines virtuelles ici.

Allant plus loin, nous spécifions également le système d’exploitation démarré attendu (« boot_disk »), qui est une image du système d’exploitation Debian Linux version 11 dans mon cas.

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

Pour compléter la création de notre machine virtuelle, nous devons configurer un Réseau Virtuel pour permettre l’accès à distance à la VM. Le bloc d’interface réseau connecte la machine virtuelle au réseau VPC (Virtual Private Cloud) par défaut fourni par GCP. Nous ne pourrons pas interagir avec notre machine virtuelle sans le réseau VPC. Le bloc de sortie affiche également l’adresse IP d’accès par défaut dans le terminal, que nous pouvons utiliser pour nous connecter à la machine virtuelle.

Voici le code final attendu :


provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"       
}

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"         
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"  
    }
  }

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

À partir de là, nous allons maintenant exécuter ce code en utilisant les commandes mises en évidence dans l’image ci-dessous :

La commande terraform -v confirme que Terraform a été installé avec succès sur le terminal. La sortie attendue sera la version de l’outil Terraform installé.

La prochaine commande exécutée est la fonction terraform init qui initialise une communication avec le fournisseur de services cloud, qui dans notre cas est GCP. Toutes les dépendances nécessaires sont également installées.

La commande terraform fmt est également exécutée pour garantir un formatage et une indentation adéquats du code. Ensuite, la commande terraform plan est exécutée successivement.

Sur l’image ci-dessus, vous pouvez voir les étapes que Terraform prévoit d’utiliser pour générer la machine virtuelle attendue.

Après l’exécution réussie du plan Terraform, nous exécuterons la fonction terraform apply pour exécuter les étapes décrites par le plan Terraform.

Cela générera une invite demandant une confirmation de l’exécution de Terraform comme indiqué ci-dessus. Taper « Oui » permettra à l’opération de se poursuivre sans problème.

Lors de l’exécution réussie, un message de succès sera affiché comme indiqué ci-dessus. Avec cela, nous avons créé notre infrastructure Cloud uniquement avec du code. La commande terraform destroy peut ensuite être appelée pour supprimer les machines virtuelles créées.

Conclusion

Dans cet article, vous avez appris les bases de l’infrastructure en tant que code. Nous avons discuté de Terraform, de ses avantages et de certaines de ses fonctionnalités et commandes clés. Nous avons également illustré son utilisation dans un projet de démonstration.

Pour approfondir vos connaissances, vous pouvez consulter la documentation de Terraform pour plus d’exemples de code. Je vous recommande également d’utiliser vos nouvelles connaissances pour automatiser un projet avec des applications concrètes.

N’hésitez pas à me contacter pour toute remarque ou question. Vous pouvez également consulter mes autres articles ici. Jusqu’à la prochaine fois, continuez à coder !