II. cloud-init¶
1. Intro¶

cloud-init est un outil qui permet de configurer une VM dès son premier boot.
C'est bien beau de pop une VM dans le "cloud", mais comment on dépose notre clé SSH ? On aimerait éviter de se co avec un password, et ce, dès la première connexion.
Ok, là Azure le fait pour nous. Et si on veut créer deux ou trois users, parce qu'on est plusieurs à administrer la machine ?
cloud-init a donc pour charge de configurer la VM juste après son premier boot. Il ne se lance que au premier boot.
C'est très répandu, c'est très simpliste, mais très puissant : t'allumes une VM pour la première fois, elle s'autoconfigure.
Il peut par exemple :
- créer des users
- définir des password
- définir une conf
sudo - poser une clé publique
- installer des paquets
- déposer des fichiers de conf
- démarrer des services
- plein d'autres trucs
Info
Quand vous allez sur un site pour télécharger un OS et qu'il existe une version "cloud", généralement ça veut dire que c'est l'OS de base avec des trucs déjà faits dedans : y'a cloud-init qui est installé et prêt à run au prochain boot, un serveur SSH déjà installé et activé, une configuration sudo, etc. De quoi pouvoir instantanément se co à distance sur une machine préconfigurée quoi !
2. Gooooo¶
Warning
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
POUR WINDOWS : je vous recommande très fort, exceptionnellement, si vous êtes sous Windows, d'utiliser WSL Ubuntu pour ça.
Une putain de plaie avec Powershell, j'pense qu'on a trouvé des bugs pas reportés.
Donc dès que vous utilisez cloud-init, commande az avec --custom-data, vous devriez les lancer depuis WSL Ubuntu pour éviter les soucis.
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
➜ Sur votre PC, créez un fichier cloud-init.txt avec le contenu suivant :
#cloud-config
disable_root: false
system_info:
default_user:
name: <TON_USER>
users:
- name: <TON_USER>
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh_authorized_keys:
- <TA_CLE_PUBLIQUE>
- name: <UN_AUTRE_USER>
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh_authorized_keys:
- <TA_CLE_PUBLIQUE>
Warning
<TA_CLE_PUBLIQUE> c'est directement ta clé publique, pas le chemin.
Aussi, le commentaire #cloud-config à la ligne 1 est obligatoire, ne l'enlevez pas.
Enfin, le "premier user", le "admin-username" comme dit Azure, doit être indiqué au début, dans le bloc system_info c'est obligatoire.
Et oui, vous le renseignez de nouveau dans la section users, pour indiquer toutes ses propriétés comme sa clé. (Azure oblige à avoir un "admin username" défini en haut)
🌞 Tester cloud-init
- en créant une nouvelle VM et en lui passant ce fichier
cloud-init.txtau démarrage - pour ça, utilisez une commande
az vm create - utilisez l'option
--custom-data /path/to/cloud-init.txt
Warning
Une fois que vous utilisez --custom-data, n'utilisez plus --addmin-username mais conservez --ssh-key-values.
Vous gérez tous les utilisateurs à déployer avec votre fichier cloud-init.txt directement.
Un exemple de commande :
# PAS de --admin-username
az vm create \
--resource-group meo \
--name azure2.tp2 \
--size Standard_B1s \
--image Ubuntu2404 \
--location francecentral \
--public-ip-address "" \
--ssh-key-values .ssh/cloud_tp.pub \
--custom-data ./cloud-init.txt
🌞 Vérifier que cloud-init a bien fonctionné
- connectez-vous en SSH à la VM nouvellement créée, directement sur le nouvel utilisateur créé par
cloud-init
# Statut du service cloud-init
sudo systemctl status cloud-init
# Etat de cloud-init actuel, quand il s'est bien déroulé c'est "done"
cloud-init status
# Et y'a des logs dans /var/log que vous pouvez consulter en cas d'erreurs
ls -al /var/log/cloud-init*
3. Write your own¶
🌞 Utilisez cloud-init pour préconfigurer une VM comme azure2.tp2 :
-
ajoutez un user qui porte votre pseudo
- il a un password défini
- clé SSH publique déposée
- il a accès aux droits de
rootviasudo
-
installer MySQL sur la machine
- déposer un fichier
init.sqlqui contient les commandes SQL du TP1 - lance une commande
mysqlpour exécuter le contenu du scriptinit.sql
🌞 Testez que ça fonctionne
- un déploiement avec un
az vm createen passant votre fichiercloud-init.txt - connectez-vous en SSH, vérifiez que vous pouvez vous connecter au serveur de db (commande
mysql) et que la base est créée