Ansible pour débutants : automatisez votre infrastructure en 30 minutes
Vous avez 20 serveurs à configurer. Ils nécessitent tous les mêmes paquets, les mêmes utilisateurs et les mêmes règles de pare-feu. Vous pourriez vous connecter manuellement à chacun d'eux via SSH, ou bien créer un seul playbook Ansible et le laisser effectuer les tâches en parallèle sur l'ensemble de votre parc. Ansible est l'outil d'automatisation qui transforme les tâches répétitives d'administrateur système en code. Ce guide vous permettra de créer un playbook fonctionnel en 30 minutes, de A à Z.
Qu'est-ce qu'Ansible et pourquoi devriez-vous vous en soucier ?
Ansible est un outil d'automatisation informatique open source développé par Red Hat. Il permet de définir l'état souhaité de votre infrastructure dans des fichiers YAML appelés playbooks , puis d'appliquer cet état à un nombre quelconque de serveurs via SSH, sans nécessiter d'agents . Principaux avantages :
- Sans agent — seuls SSH et Python sont requis sur les nœuds gérés
- Idempotent — exécuter deux fois le même playbook est sans risque ; Ansible ne modifie que ce qui doit l’être.
- YAML lisible par l'humain — les playbooks servent à la fois de code et de documentation
- Bibliothèque de modules massive — des milliers de modules intégrés pour toutes les tâches imaginables
- Logiciel libre et gratuit — Licence Apache 2.0
Installation
Ansible s'exécute depuis votre nœud de contrôle (votre ordinateur portable ou un serveur d'administration). Installez-le sur ce nœud, et non sur vos nœuds gérés.
# Ubuntu/Debian
apt install pipx
pipx install --include-deps ansible
# macOS
brew install ansible
# RHEL/AlmaLinux
dnf install ansible
# Verify
ansible --versionMise en place de votre inventaire
Le fichier d'inventaire indique à Ansible quels serveurs gérer. Créez un fichier nommé inventory.ini :
[webservers]
web01 ansible_host=192.168.1.10
web02 ansible_host=192.168.1.11
[databases]
db01 ansible_host=192.168.1.20
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_ed25519
ansible_python_interpreter=/usr/bin/python3Tester la connectivité
ansible all -i inventory.ini -m pingVous devriez voir pong sur chaque hôte. Si ce n'est pas le cas, vérifiez l'accès SSH et l'installation de Python sur les hôtes distants.
Votre premier guide de jeu
Créez setup.yml — un playbook qui configure vos serveurs web :
---
- name: Configure web servers
hosts: webservers
become: yes # Run tasks with sudo
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Install required packages
apt:
name:
- nginx
- ufw
- fail2ban
- curl
state: present
- name: Enable and start nginx
systemd:
name: nginx
state: started
enabled: yes
- name: Allow HTTP traffic
ufw:
rule: allow
port: "80"
proto: tcp
- name: Allow HTTPS traffic
ufw:
rule: allow
port: "443"
proto: tcp
- name: Enable UFW
ufw:
state: enabled
policy: denyExécuter le plan de jeu
ansible-playbook -i inventory.ini setup.yml
# Dry-run first (check mode) - shows what WOULD change
ansible-playbook -i inventory.ini setup.yml --checkVariables et modèles
Il est déconseillé de coder les valeurs en dur. Utilisez des variables :
---
- name: Configure nginx vhost
hosts: webservers
become: yes
vars:
server_name: "example.com"
app_port: 8080
tasks:
- name: Deploy nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/{{ server_name }}
owner: root
group: root
mode: '0644'
notify: reload nginx
handlers:
- name: reload nginx
systemd:
name: nginx
state: reloadedLe fichier modèle nginx.conf.j2 utilise la syntaxe Jinja2 :
server {
listen 80;
server_name {{ server_name }};
location / {
proxy_pass http://127.0.0.1:{{ app_port }};
}
}Rôles — Organisation de l'automatisation complexe
Pour les configurations plus complexes, organisez vos tâches en rôles . Un rôle est un ensemble réutilisable et partageable de tâches, de variables, de modèles et de gestionnaires.
# Create a role structure
ansible-galaxy init roles/nginx
# Resulting structure:
roles/nginx/
tasks/main.yml
handlers/main.yml
templates/
vars/main.yml
defaults/main.ymlEnsuite, faites référence au rôle dans votre plan de jeu :
---
- name: Configure web servers
hosts: webservers
become: yes
roles:
- nginx
- fail2ban
- commonAnsible Vault — Protection des secrets
Ne stockez jamais les mots de passe ni les clés API en clair. Utilisez Ansible Vault pour chiffrer les variables sensibles :
# Create an encrypted variables file
ansible-vault create secrets.yml
# Encrypt an existing file
ansible-vault encrypt vars/passwords.yml
# Run playbook with vault
ansible-playbook playbook.yml --ask-vault-pass
# Or with a vault password file
ansible-playbook playbook.yml --vault-password-file ~/.vault_passExemple pratique : Déployer une pile LEMP complète
---
- name: Deploy LEMP stack
hosts: webservers
become: yes
tasks:
- name: Install packages
apt:
name: [nginx, php8.2-fpm, mariadb-server, python3-pymysql]
state: present
update_cache: yes
- name: Start services
systemd:
name: "{{ item }}"
state: started
enabled: yes
loop:
- nginx
- php8.2-fpm
- mariadb
- name: Create database
community.mysql.mysql_db:
name: myapp
state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create database user
community.mysql.mysql_user:
name: appuser
password: "{{ db_password }}"
priv: "myapp.*:ALL"
state: present
login_unix_socket: /var/run/mysqld/mysqld.sockAller plus loin
- Ansible Galaxy — des milliers de rôles communautaires prêts à l'emploi :
ansible-galaxy install geerlingguy.docker - AWX / Ansible Tower — Interface utilisateur web et planification pour Ansible à grande échelle (AWX est gratuit, Tower est la version entreprise)
- Inventaire dynamique — extraction automatique des listes de serveurs auprès des fournisseurs de cloud (AWS, Azure, GCP)
- Molecule — testez vos rôles Ansible avec des tests automatisés
Conclusion
Ansible est un investissement des plus judicieux pour votre boîte à outils d'administrateur système. En 30 minutes, automatisez des tâches qui nécessitaient auparavant des heures de sessions SSH répétitives. Commencez simplement : choisissez une tâche répétitive que vous effectuez chaque semaine et créez un playbook pour l'automatiser. Vous ne pourrez plus vous en passer.
⚙️ Quelle a été votre première automatisation avec Ansible ? Partagez vos playbooks dans les commentaires. Pour plus de guides d'automatisation d'infrastructure couvrant Terraform, Puppet et bien plus encore, consultez RootPilot .