Cela fait un petit moment que je souhaite réaliser un post d'initiation à Terraform et nous y voilà enfin !
Comment utiliser Terraform afin de provisionner des instances sur le Public Cloud d'OVH qui utilise OpenStack.
Terraform
Tout d'abord un petit point sur Terraform : C'est un logiciel open source qui est développé par HashiCorp ( Société déjà à l'origine d'autres logiciels que vous utilisez sûrement : Vault, Consul, Nomad, Vagrant ou encore Packer ). Et qui va nous permettre d'automatiser la construction d'une infrastructure dans le Cloud.
C'est l'Infrastructure as Code : https://fr.wikipedia.org/wiki/Infrastructure_as_Code
Tout ceci à l'aide d'un fichier écrit dans un langage de configuration HCL (Hashicorp Configuration Language).
Il est également possible d'écrire ce fichier au format JSON mais je n'aborderai pas ce point aujourd'hui.
Je vais donc pouvoir, dans un fichier, déclarer les éléments nécessaires à mon infrastructure : comme par exemple un front web, une base de données et un back afin de les pousser sur mon fournisseur de Cloud. Et grâce à cela automatiser mes déploiements et éviter ainsi tout configuration manuelle ce qui va - éventuellement - éviter les erreurs liées à la répétition des commandes.
Il faut savoir que les scripts Terraform sont par contre dépendants de votre provider Cloud : Vous ne pourrez pas réutiliser les lignes qui vont suivre, spécifique à OpenStack/OVH, pour alimenter votre Cloud AWS sans réaliser de modification.
Mais passons à l'installation du logiciel, nous pourrons revenir sur les subtilités du logiciel au cours des articles sur ce sujet !
Installation
Pour installer Terraform, rien de plus simple, il suffit dans la plupart des cas de télécharger le package approprié pour votre système ici :
Après votre téléchargement, décompressez le package. Terraform fonctionne comme un seul binaire nommé... : terraform.
Vous pouvez ensuite déplacer l'exécutable dans un dossier inclus dans votre $PATH
, comme par exemple :
$ mv ~/Downloads/terraform /usr/local/bin/
Validez ensuite le bon fonctionnement de votre installation :
$ terraform -help
Usage: terraform [-version] [-help] <command> [args]
The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
Maintenant que c'est installé, nous allons pouvoir nous servir du provider OpenStack afin d'instancier notre première machine virtuelle !
OVH provider
Il est tout d'abord nécessaire de créer un utilisateur OpenStack sur votre compte Public Cloud et récupérer votre fichier openrc.sh
.
Si vous ne possédez pas d'accès, vous pouvez suivre cet article afin de créer votre premier compte :
Dans mon cas je valide le bon fonctionnement de mes accès :
$ source openrc.sh
Please enter your OpenStack Password:
Et je liste par exemple les modèles d'instance disponibles :
$ openstack flavor list
Enfin, pour stocker mes fichiers de configuration, je vais créer un dossier terraform-ovh
dans mon répertoire personnel :
$ mkdir ~/terraform-ovh && cd $_
Mon premier fichier providers.tf
va me servir à déclarer mon provider OVH :
provider "openstack" {
auth_url = "https://auth.cloud.ovh.net/v3.0/"
domain_name = "default" # Nom de domaine - Toujours à "default" pour OVH
alias = "ovh"
#vos accès OpenStack
user_name = "xxxxx"
password = "xxxxxxxxxxxxxxxxx"
}
Je vais ensuite créer un fichier instance.tf
pour créer ma première instance :
#Déclaration d'une ressouce pour ajouter ma clé SSH sur OpenStack
resource "openstack_compute_keypair_v2" "My-Key" {
provider = openstack.ovh
name = "My-Key"
public_key = file("~/.ssh/id_rsa.pub")
}
#Déclaration de l'instance à créer
resource "openstack_compute_instance_v2" "test_terraform_instance" {
name = "terraform_instance"
provider = openstack.ovh
image_name = "Ubuntu 20.04"
flavor_name = "s1-2"
key_pair = openstack_compute_keypair_v2.My-Key.name
network {
name = "Ext-Net"
}
}
🚩 Vous pourrez récupérer la liste des images et modèles d'instance avec la commande openstack
🚩
Voici à quoi ressemble mon arborescence avant de lancer Terraform :
[email protected]:~/terraform-ovh$
.
├── instance.tf
└── providers.tf
Vous pouvez ensuite initier votre déploiement Terraform :
[email protected]:~/terraform-ovh$ terraform init
Initializing the backend...
Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "openstack" (terraform-providers/openstack) 1.29.0...
....
Comme nous utilisons un provider "officiel" le plugin de connexion est automatiquement téléchargé.
Enfin nous pouvons lancer notre déploiement :
[email protected]:~/terraform-ovh$ terraform apply
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
...
Il est nécessaire de valider les modifications en tapant : yes
openstack_compute_keypair_v2.My-Key2: Creating...
openstack_compute_keypair_v2.My-Key2: Creation complete after 2s [id=My-Key]
openstack_compute_instance_v2.test_terraform_instance: Creating...
openstack_compute_instance_v2.test_terraform_instance: Still creating... [10s elapsed]
openstack_compute_instance_v2.test_terraform_instance: Still creating... [20s elapsed]
openstack_compute_instance_v2.test_terraform_instance: Still creating... [30s elapsed]
openstack_compute_instance_v2.test_terraform_instance: Creation complete after 34s [id=d2c9778ca823-4dcc-9286-9286-103665a0]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Terminé !
Mais vous ne connaissez pas l'IP publique de votre instance ! Aucun souci, pour la récupérer :
[email protected]:~/Téléchargements$ openstack server list
Il ne reste plus qu'à me connecter à l'instance :
[email protected]:~/terraform-ovh$ ssh [email protected]
Enfin pour tout supprimer, c'est aussi simple :
[email protected]:~/terraform-ovh$ terraform destroy
...
Il sera également nécessaire de valider la suppression avec yes
:
openstack_compute_instance_v2.test_terraform_instance: Destroying... [id=d2c9778ca823-4dcc-9286-9286-103665a0]
openstack_compute_instance_v2.test_terraform_instance: Still destroying... [id=d2c9778ca823-4dcc-9286-9286-103665a0, 10s elapsed]
openstack_compute_instance_v2.test_terraform_instance: Destruction complete after 10s
openstack_compute_keypair_v2.My-Key: Destroying... [id=My-Key]
openstack_compute_keypair_v2.My-Key: Destruction complete after 1s
Voilà, vous savez maintenant comment utiliser Terraform pour initialiser vos instances Cloud public chez OVH !
Vous remarquerez d'ailleurs que le provider n'est pas spécifique à OVH et qu'il s'agit d'un provider OpenStack !
Bien évidemment l'exemple que nous venons de voir est ... très simple ! Mais le but aujourd'hui était de se familiariser avec l'outil. Nous aurons l'occasion dans un prochain article de lancer une infrastructure un peu plus complexe :
- 4 serveurs : 2 front, 1 back, 1 base de données
Afin d'avoir un exemple plus réaliste qu'aujourd'hui !
N'hésitez pas à permettre au blog de continuer à exister et à fournir un contenu de qualité - enfin je l'espère - au travers de vos dons sur : buymeacoff.ee/lfache
Et n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter, ou ici 👇