
Après avoir configuré votre serveur manuellement, pas à pas, il est temps d’automatiser tout le processus.
L’idée est simple : décrire votre infrastructure dans des fichiers de configuration et laisser Terraform s’occuper de commander les ressources chez OVHcloud.
Voici un guide d’introduction à Terraform, avec de nombreuses informations utiles : https://support.us.ovhcloud.com/hc/en-us/articles/22648864003219-Using-Terraform-with-OVHcloud.
Ainsi que le lien vers le fournisseur officiel Terraform d’OVHcloud : https://registry.terraform.io/providers/ovh/ovh/latest
Il existe deux étapes à l’automatisation du déploiement :
- déploiement de l’instance Public Cloud ;
- déploiement de la partie applicative (vscode-server) et sa configuration.
1. Le cœur de l’automatisation : le script Cloud-init
Avant de parler de Terraform, il est nécessaire de comprendre comment le serveur s’auto-configure lors de son initialisation.
Pour cela, utilisez cloud-init, un standard qui permet d’exécuter des scripts dès le premier démarrage de l’instance.
Ce que vous allez automatiser dans ce script :
- la mise à jour du système (
apt update/upgrade) ; - l’installation de
code-servervia le script officiel ; - l’installation et la configuration de Caddy (pour le SSL automatique) ;
- la configuration du pare-feu UFW.
Ce type de fichier possède une syntaxe bien particulière, le cloud-config.yaml sera à disposition plus bas.
Toutefois, l’important à retenir est : pourquoi utiliser ce format ?
- Idempotence : le
cloud-inits’assure que tout est prêt dès le premier boot. - Sécurité dès la naissance : le pare-feu
ufwest activé immédiatement, réduisant la fenêtre d’exposition. - Intégration Terraform : une seule ligne est nécessaire pour l’inclure :
user_data = file("cloud-config.yaml")
2. Utilisation de Terraform pour le déploiement
Terraform permet d’obtenir un démarrage de l’instance bien plus aisé et rapide.
Sa configuration, quant à elle, comporte plusieurs avantages :
- persistance des données. Un
terraform destroyde l’instance pourra conserver le volume de données (but fixé dans le chapitre 2) ; - évolutivité. Si le projet grossit, la taille du volume et/ou la flavor peuvent être modulées ;
- portabilité. Le volume de données peut être démonté et remonté sur une autre machine.
Pour garder ce billet court, pas de copier-coller de code, mais un lien vers un repository GitHub avec tout le nécessaire pour déployer ceci en quelques minutes :
https://github.com/RemyAtOVH/blogpost-dev-server
Son utilisation :
| ubuntu@vscode-server:~$ source openrc.production.sh ubuntu@vscode-server:~$ terraform init ubuntu@vscode-server:~$ terraform plan ubuntu@vscode-server:~$ terraform apply […] Apply complete! Resources: 4 added, 0 changed, 0 destroyed. Outputs:instance_ip = “XXX.XXX.XXX.XXX” |
Avant l’application du cloud-init (ou sans), on constate bien un volume secondaire /dev/sdb, de taille correspondant aux spécifications de Terraform :
| ubuntu@vscode-server-automated:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS […] sda 8:0 0 25G 0 disk […] sdb 8:16 0 10G 0 disk |
C’est lui qui assurera la persistance des données.
Vous pourriez tout à fait effectuer manuellement la suppression de l’instance et des autres composants, sans toutefois le supprimer lui.
Pour éviter toute suppression en cas de « terraform destroy », un paramètre a été ajouté :
| lifecycle { prevent_destroy = true } |
Lors du premier démarrage, les différents scripts d’installation pouvant prendre du temps, vous pouvez en vérifier les étapes d’un simple tail :
| ubuntu@vscode-server-automated:~$ tail -f /var/log/cloud-init-output.log |
Une fois le cloud-init exécuté automatiquement, tout ce qui a pu être mis en place manuellement dans les chapitres précédents a été fait. Et ce, de façon automatique et reproductible !
Il sera donc possible, sous réserve de quelques minutes d’exécution, de déployer cet environnement de développement distant personnalisé si besoin et potentiellement le supprimer après quelques heures ou jours d’utilisation.
Dans cette série de chapitres, nous avons transformé une simple idée, disposer de son VS Code partout, en une infrastructure de niveau professionnel, automatisée et résiliente.
Retrouvez ci-dessous les étapes et le chemin parcouru.
- Chapitre 1 : premiers pas en installation manuelle pour comprendre la mécanique de
code-server. - Chapitre 2 : sécurisation, avec utilisation d’un Reverse Proxy (Caddy) et d’un pare-feu (UFW) pour naviguer sereinement en HTTPS.
- Chapitre 3 : cet article, utilisant Terraform et OpenStack, pour une meilleure reproductibilité.
L’automatisation que nous avons mise en place avec un déploiement chez OVHcloud en utilisant Public Cloud reposant sur OpenStack, constitue une base solide.
À partir d’ici, il est possible d’aller encore plus loin : ajouter une sauvegarde automatique de vos volumes (snapshotting), coupler cela à un pipeline CI/CD ou même explorer le déploiement de cet environnement via docker-compose, ou même Kubernetes.
Retrouvez prochainement une version vidéo de ces billets de blog, étape par étape, sur notre chaîne YouTube. Restez à l’écoute !