Bonjour et bienvenue ! Aujourd'hui, nous allons voir comment créer un serveur (également appelé droplet) sur Digital Ocean via Terraform. C'est l'une des choses les plus simples que l'on puisse réaliser avec Terraform, mais elle illustre la compréhension de concepts de base tels que l'Infrastructure as Code (IaC), Terraform lui-même, les modules Terraform, les serveurs cloud, ainsi que les pratiques de base en matière de réseau et de sécurité.
Vous pouvez trouver le code source de ce tutoriel ici sur Github.
Sans plus tarder, plongeons dans le vif du sujet 🚀
Pour pouvoir faire quoi que ce soit avec Terraform, nous devons d'abord l'installer sur notre système. La documentation de Terraform propose une excellente liste des différentes façons d'installer Terraform sur différents systèmes. Jetez un œil à ce guide ici.
Acquire Digital Ocean Credentials
Pour pouvoir authentifier et autoriser Terraform à créer notre serveur sur Digital Ocean, nous avons besoin des identifiants appropriés. Terraform nécessite différents types d'identifiants en fonction du fournisseur Terraform utilisé. Pour authentifier et autoriser le fournisseur responsable de l'application de nos configurations, nous aurons besoin d'un API Token Digital Ocean, obtenu à partir de l'écran ci-dessous.

Ceci se trouve à l'adresse web https://cloud.digitalocean.com/account/api/tokens sur un compte Digital Ocean authentifié.
Lors de la création de votre API Token sur Digital Ocean, assurez-vous de le faire avec la portée Write activée pour votre jeton. Terraform ne pourra pas créer de ressources pour vous sans cela. N'oubliez pas de définir également une date d'expiration appropriée.

Setup the Digital Ocean Terraform provider
Maintenant que nous avons notre API Token pour authentifier et autoriser Terraform, nous pouvons commencer à créer notre configuration Terraform. Nous allons commencer par créer un fichier providers.tf. À l'intérieur de ce fichier, nous allons fournir la configuration nécessaire pour paramétrer le fournisseur Digital Ocean (digitalocean).
Pour en savoir plus sur les fournisseurs Terraform, visitez https://developer.hashicorp.com/terraform/language/providers
Nous allons commencer notre fichier avec le contenu suivant :
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}Cela configure le terraform block. Dans ce bloc, nous configurons le fournisseur digitalocean comme un fournisseur requis.
Des informations détaillées sur le fournisseur digitalocean peuvent être trouvées sur sa page de documentation ici https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs
Ensuite, nous allons configurer le fournisseur lui-même en ajoutant le code suivant à notre fichier providers.tf :
# Configure the DigitalOcean Provider
provider "digitalocean" {
token = var.do_token
}Ce code configure le fournisseur digitalocean avec le jeton d'accès token. Il s'agit du même jeton que nous avons obtenu à l'étape 1.
En tant que bonne pratique, ne fournissez jamais de secrets de compte comme valeurs à vos fichiers de configuration Terraform car cela les rendrait clairement visibles pour une potentielle utilisation malveillante. Dans notre code ci-dessus, nous avons fourni notre clé API en tant que variable Terraform var.do_token.
Il y a plusieurs façons de fournir la valeur réelle de notre clé API à Terraform.
- Nous pourrions créer un fichier
terraform.tfvarset remplir la valeur de notre variable ainsi :
do_token=real_key_value- Nous pourrions créer une variable d'environnement sur notre machine hôte avec le nom
TF_VAR_do_tokenet définir sa valeur sur celle de notre clé, comme suit :
export TF_VAR_do_token=real_key_valueEn remplaçant real_key_value par la valeur appropriée de notre clé API dans chaque cas.
Avec ces deux méthodes, Terraform sera capable de trouver la valeur de notre variable lorsqu'il exécutera notre configuration.
Si vous fournissez les valeurs de vos variables via un fichier terraform.tfvars, assurez-vous de ne JAMAIS le soumettre au contrôle de version. Utilisez ce fichier uniquement localement.
Si aucune de ces méthodes n'est utilisée pour passer la valeur à notre variable, Terraform demandera la valeur pour chaque variable dans l'invite de commande à chaque fois qu'il exécutera notre configuration.
Initialize Terraform
Une fois la configuration de notre fournisseur terminée, il est temps d'initialiser notre configuration Terraform.
Nous faisons cela simplement en exécutant la commande suivante dans la ligne de commande :
terraform initPendant l'initialisation, Terraform télécharge les fichiers du fournisseur requis pour notre configuration et initialise notre backend.
Pour garder ce tutoriel simple, nous allons utiliser le backend Terraform local par défaut. Pour en savoir plus sur les backends Terraform, visitez https://developer.hashicorp.com/terraform/language/settings/backends/configuration
Setup the server deploy configuration
Avec Terraform initialisé, il est temps de créer réellement la configuration qui déploie notre serveur (également appelé droplet dans le jargon de Digital Ocean).
Nous allons commencer par créer un nouveau fichier, server.tf. Notre configuration se présente ainsi :
resource "digitalocean_vpc" "server_vpc" {
name = "server-vpc"
region = var.do_region
ip_range = "10.10.10.0/24"
}
resource "digitalocean_droplet" "server" {
name = "server"
size = "s-1vcpu-1gb"
image = "ubuntu-22-04-x64"
region = var.do_region
vpc_uuid = digitalocean_vpc.server_vpc.id
}Notre code crée deux blocs de ressources Terraform. Le premier, une ressource digitalocean_vpc, crée le réseau privé virtuel (VPC) dans lequel notre serveur vivra sur Digital Ocean.
- l'attribut
nameconfigure le nom de notre réseau vpc - l'attribut
regionà travers la variablevar.do_region, configure dans quelle partie du monde nous voulons que notre vpc soit déployé - l'attribut
ip_rangeconfigure la plage d'adresses IP préférée pour notre réseau - l'attribut
vpc_uuidindique que notre serveur doit être placé dans le réseauserver-vpcque nous avons créé à la première étape
Le deuxième bloc crée une ressource Terraform digitalocean_droplet, et la configure avec les attributs name, size, image et region. Ces attributs sont obligatoires pour que notre serveur soit créé sur Digital Ocean.
Comme leurs noms l'indiquent ;
- l'attribut
nameconfigure le nom de notre serveur sur Digital Ocean - l'attribut
sizeconfigure la combinaison du processeur (cpu) et de la mémoire (RAM) de notre serveur - l'attribut
imageconfigure l'image du système d'exploitation particulier avec laquelle nous aimerions que notre serveur soit fourni - l'attribut
regionconfigure l'emplacement dans le monde où nous aimerions que notre serveur soit déployé.
Comme vous pouvez probablement le deviner, ces attributs peuvent avoir de nombreuses autres valeurs que celles que nous avons spécifiées ici. Une visite de la documentation de Digital Ocean vous fournira une liste plus complète de valeurs pour une utilisation ultérieure.
C'est ici que vous créez la variable var.do_region comme requis par nos blocs de ressources. En fonction de la méthode que vous avez choisie pour passer les valeurs des variables à terraform, vous devez en créer une deuxième.
Incluez la ligne suivante à votre fichier terraform.tfvars si c'est la voie que vous avez choisie ;
do_region=fra1Ou créez une variable d'environnement supplémentaire comme suit ;
export TF_VAR_do_region=fra1NOTE : fra1 fait référence au centre de données de Digital Ocean à Francfort. Visitez la documentation de Digital Ocean pour découvrir les éventuels centres de données alternatifs à utiliser.
Apply the Terraform configuration
Il est temps d'appliquer notre configuration terraform et de créer nos ressources sur Digital Ocean. Pour confirmer que nous allons faire exactement ce que nous avons l'intention de faire, nous allons d'abord exécuter la commande terraform plan.
La sortie de cette commande devrait être similaire à ce qui suit ;

Un regard sous la sortie montrera la sortie 2 to add, 0 to change, 0 to destroy. Cela signifie que tout est en ordre car nous allons ajouter deux ressources, n'en modifier aucune, et n'en détruire aucune.
Si notre sortie correspond à celle illustrée ci-dessus, alors nous pouvons aller de l'avant et exécuter terraform apply pour appliquer notre configuration.
Un écran de confirmation devrait s'afficher, similaire à celui ci-dessous, auquel nous devrions répondre yes.

En cas de succès, nous devrions obtenir une sortie similaire à celle ci-dessous de la part de Terraform ;

HOURRA !! 🎉 🎉 Vous avez déployé avec succès un serveur sur Digital Ocean via Terraform.
Félicitations pour la création de votre serveur sur Digital Ocean grâce à l'Infrastructure as Code. Il est important que vous vous souveniez de détruire le serveur lorsqu'il n'est plus utilisé, pour éviter une facturation inattendue sur vos informations de paiement.
Exécutez la commande terraform destroy et confirmez par yes pour détruire votre serveur au moment où vous n'en avez plus besoin.
J'espère que vous avez trouvé cet article utile ! À plus !!
Lire la suite
Projet Self-Hosting (Infrastructure DevOps from Scratch)
Un guide complet pour construire une infrastructure DevOps auto-hébergée de A à Z en utilisant Terraform, Ansible et Docker.
Mise en œuvre du flux de travail central de Terraform en collaboration, via Github Pull Requests, Actions, Bot, Environments et un Backend Distant.
Mettez en œuvre un flux de travail Terraform collaboratif à l'aide de GitHub Actions, de pull requests et d'un backend distant pour les équipes de production.
Déploiement automatique de Jenkins sur un serveur distant (avec SSL gratuit) via Ansible (Tutoriel)
Apprenez à déployer automatiquement un serveur Jenkins auto-hébergé avec des certificats SSL gratuits à renouvellement automatique à l'aide d'Ansible.
