Qu’est ce que Cloud-init ?
Cloud-init est un outil de templating, et d’Infra-as-Code qui va permettre de réaliser une série d’opérations au moment du premier démarrage d’un serveur (VM). Cela permet de personnaliser les VMs lors de leur déploiement et de garantir l’homogénéité de leur configuration initiale.
Si Cloud-init est développé par Canonical (l’éditeur d’Ubuntu), c’est aujourd’hui un standard, utilisé très largement dans la gestion d’infrastructures et supporté par un grand nombre de distributions (Ubuntu, Debian, Arch Linux, Fedora, …)
Pour utiliser cloud init sur un serveur, il faut que l’image de celui-ci soit typée “cloud”.
Un script Cloud-init va se jouer juste après l’installation, ca va permettre d’aller immédiatement introduire des éléments de sécurité.
Créer un serveur et lancer un script Cloud-init via le CLI Openstack
La plupart des Cloud providers proposent dans leurs interfaces de création de serveur d’ajouter directement un script Cloud-init.
Si vous utilisez un Cloud provider qui s’appuie sur OpenStack (comme Gandi.net !), vous pouvez simplement utiliser la CLI OpenStack pour créer un serveur et lui passer un script Cloud-init à jouer lors du démarrage de la VM. Il suffit d’insérer `user-data nom-fichier-cloudinit` dans la commande de création de serveur.
La commande suivante lance la création d’un serveur GandiCloud VPS V-R1, avec une image Ubuntu, et lui passe le script `cloud-init.yaml` qui sera exécuté au lancement de la VM.
openstack server create --flavor V-R1 --image 47edd0a0-23ce-4ce5-9168-36de68990d1b --boot-from-volume 10 --key-name <nom_de_ma_cle_ssh> --user-data cloud-init.yaml <nom_de_ma_vm>
Un exemple basique de script Cloud-init : création d’un utilisateur et installation de deux paquets
Le script suivant va installer `tmux` et `vim` et créer un nouvel utilisateur `mael`, qui aura les droits sudo au démarrage de la VM.
#cloud-config packages: - tmux - vim users: - default - name: mael groups: sudo homedir: "/home/maeldir" sudo: ['ALL=(ALL) NOPASSWD:ALL']
Mon Script cloud-init perso
J’ai déposé sur mon espace Github, le script que j’utilise aujourd’hui sur les VMs que je crées régulièrement pour mes tests ou besoins perso.
https://github.com/MaelDre/Boataoots/tree/main/cloud-init
Liens utiles
Et enfin quelques liens utiles pour débuter avec Cloud-init:
- La documentation officielle très complète: https://cloudinit.readthedocs.io/en/latest/
- Leur repo github avec plein d’exemples : https://github.com/canonical/cloud-init/tree/fbcb224bc12495ba200ab107246349d802c5d8e6/doc/examples
- Un article très bien détaillé pour débuter : https://www.grottedubarbu.fr/introduction-cloud-init/
- Comme toujours, la documentation Digital Ocean, qui propose un tuto pour à peu près tout : https://www.digitalocean.com/community/tutorials/how-to-use-cloud-config-for-your-initial-server-setup
- Si vous utilisez OpenStack et Cloud-init :