Aller au contenu

Infrastructure-as-Code : définition

De la gestion manuelle des serveurs à une approche entièrement automatisée, l'Infrastructure-as-Code (ou IaC) révolutionne la façon dont les entreprises déploient et maintiennent leurs ressources informatiques. Mais de quoi s'agit-il exactement lorsque l'on parle d'IaC ?

Qu'est ce que l'infrastructure-as-Code ?

Tout comme dans la construction d'une maison, une plateforme informatique peut être bâtie brique par brique à l'aide de différents outils. Traditionnellement, des artisans viennent sur place et chacun fait son travail en suivant des plans, mais avec une part d'interprétation personnelle et des décisions prises sur le moment. L'Infra-as-Code est comparable à un plan de montage ordonné, avec l'ensemble des pièces qui permettent de construire votre plateforme à la manière d'un jeu de construction. Pour faire des modifications, pas besoin de "casser" et reconstruire : vous modifiez simplement votre "plan", et le système s'adapte automatiquement.

L'Infrastructure-as-Code (ou Infra-as-Code - IaC) est une pratique visant à permettre le déploiement et la configuration de composants informatiques virtuels (serveurs, réseaux, load-balancers, logiciels...) au travers du code source.

Plus largement, le terme est associé aux bonnes pratiques DevOps et permet de versionner les environnements déployés dans le but d'éviter ce que l'on appelle le "shadow IT", c'est-à-dire les ressources informatiques qui ne sont pas sous le contrôle de l'équipe en charge de l'infrastructure.

Origines

Le premier exemple d'outil permettant de faire de l'Infrastructure-as-Code remonte aux années 1990 avec la création de CFEngine, qui permettait à l'origine d'automatiser la configuration et la gestion d'ordinateurs et de serveurs Unix à distance. La pratique a ensuite été popularisée par l'avènement du cloud public dans les années 2000 et le besoin de déploiement rapide et de mise à l'échelle des ressources cloud.

Le terme IaC désigne plus généralement un ensemble d'outils permettant de répondre aux problématiques de provisionnement d'infrastructure (provisioning) et de gestion de configuration (configuration management).

Approches techniques

L'approche déclarative en IaC permet de définir l'état final souhaité de l'infrastructure dans le code. Le programme analyse cette description et se charge automatiquement de mettre en place ou d'ajuster les composants pour atteindre cet objectif. Terraform est l'outil de référence dans ce domaine : il compare l'état réel de l'infrastructure avec celui décrit dans le code et propose d'appliquer les ajustements nécessaires. D'autres solutions comme PulumiCloudFormation (AWS) et Puppet fonctionnent sur le même principe.

# Configuration du provider AWS
provider "aws" {
  region = "eu-west-3"  # Europe (Paris)
}

# Définition d'une instance EC2
resource "aws_instance" "serveur_web" {
  ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux 2 AMI
  instance_type = "t2.micro"

  tags = {
    Name = "ServeurWeb"
    Environment = "Production"
  }
}

Exemple de code Terraform permettant de déployer une instance EC2 sur AWS

D'autres outils suivent une approche impérative et définissent les éléments à déployer et leur configuration sous forme d'une liste d'instructions successives écrites de manière formelle, souvent au travers de tâches à exécuter pour parvenir à un résultat. Ansible et Chef sont des outils de gestion de configuration utilisant principalement ce mode de fonctionnement.

---
- name: Installation et démarrage d'un serveur web
  hosts: webservers
  become: yes  # Pour avoir les privilèges sudo

  tasks:
    - name: Installation de Nginx
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Démarrage du service Nginx
      service:
        name: nginx
        state: started
        enabled: yes

Exemple de playbook Ansible permettant d'installer un serveur nginx

Ces différents outils d'IaC peuvent se combiner et s'intégrer aux pipelines de CI/CD des projets pour donner vie aux environnements applicatifs.

Ils sont devenus indispensables aujourd'hui dans un contexte où les entreprises ont besoin de mettre en place leurs services de façon rapide, automatique , et avec la possibilité de s'adapter facilement à la demande, que ce soit pour augmenter ou réduire leur infrastructure.

Dernier