Aller au contenu principal

Infrastructure as Code

Automatiser la gestion de l'infrastructure informatique

L'Infrastructure as Code (IaC) est une approche qui consiste à gérer et provisionner l'infrastructure informatique à travers des fichiers de configuration plutôt que par des processus manuels. Cette méthode permet de traiter l'infrastructure de la même manière que le code source d'une application.

Les principaux avantages de l'IaC sont :

  1. Reproductibilité : L'infrastructure peut être recréée de manière identique à chaque fois.
  2. Rapidité : Le déploiement et la mise à jour de l'infrastructure sont automatisés et donc plus rapides.
  3. Contrôle de version : Les changements d'infrastructure peuvent être suivis et versionnés comme du code.
  4. Cohérence : Réduit les erreurs humaines et assure une configuration cohérente.
  5. Scalabilité : Facilite la gestion d'infrastructures complexes et leur montée en charge.

Les outils populaires pour l'IaC incluent :

  • Terraform : Un outil open-source pour provisionner et gérer des ressources cloud.
  • Ansible : Un outil d'automatisation pour la configuration et le déploiement.
  • CloudFormation : Le service IaC d'Amazon Web Services.
  • Azure Resource Manager : L'équivalent pour Microsoft Azure.

L'IaC utilise généralement des langages déclaratifs où l'on spécifie l'état final souhaité de l'infrastructure, plutôt que les étapes pour y arriver. Cela permet à l'outil de déterminer la meilleure façon d'atteindre cet état.

Un workflow typique d'IaC comprend :

  1. Écriture du code d'infrastructure
  2. Versionning du code dans un système de contrôle de version (ex: Git)
  3. Revue de code et validation
  4. Test du code d'infrastructure (ex: avec des outils comme Terratest)
  5. Application du code pour provisionner ou mettre à jour l'infrastructure

L'IaC s'intègre bien dans les pratiques DevOps et facilite la collaboration entre les équipes de développement et d'opérations. Elle permet également d'implémenter des principes d'infrastructure immuable, où les mises à jour se font par remplacement plutôt que par modification in situ.

Exemple pratique

Création d'une infrastructure avec Vagrant

Voici un exemple simple d'utilisation de Vagrant pour créer une machine virtuelle locale :

  1. Installez Vagrant sur votre machine.

  2. Créez un fichier Vagrantfile avec le contenu suivant :

Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
echo "Hello from Vagrant" > /var/www/html/index.html
SHELL
end
  1. Lancez la machine virtuelle :
vagrant up
  1. Connectez-vous à la machine virtuelle :
vagrant ssh
  1. Pour détruire la machine virtuelle :
vagrant destroy

Ce code crée une machine virtuelle Ubuntu 18.04 avec Nginx installé et une page web simple. Vagrant gère automatiquement la création, la configuration et la destruction de cette machine virtuelle.

Test de mémorisation/compréhension


Quelle pratique IaC peut paradoxalement augmenter la complexité initiale tout en simplifiant la gestion à long terme ?


Quel aspect de l'IaC peut sembler réduire la flexibilité mais améliore en réalité la cohérence et la fiabilité ?


Quelle affirmation sur l'IaC est vraie, bien qu'elle puisse sembler contre-intuitive ?


Quel aspect de l'IaC peut initialement sembler augmenter les risques de sécurité, mais en réalité les réduit souvent ?


Quelle pratique IaC peut sembler redondante mais est cruciale pour la fiabilité à long terme ?



TP pour réfléchir et résoudre des problèmes

Dans ce TP, vous allez utiliser Vagrant pour créer une infrastructure locale simulant un environnement de développement web. L'objectif est de créer deux machines virtuelles : une pour un serveur web et une pour une base de données.

Étapes :

  1. Installez Vagrant et VirtualBox sur votre machine.
  2. Créez un nouveau répertoire pour votre projet et initialisez-y un fichier Vagrantfile.
  3. Configurez deux machines virtuelles dans le Vagrantfile :
    • Une machine "web" avec Nginx installé
    • Une machine "db" avec MySQL installé
  4. Configurez un réseau privé entre les deux machines.
  5. Utilisez des scripts de provisionnement pour installer et configurer les logiciels nécessaires.
  6. Assurez-vous que le serveur web peut communiquer avec la base de données.

Rédigez le contenu du fichier Vagrantfile pour réaliser ces tâches.

Une solution

Autres outils intéressants