{Terraform} Automatiser la migration d’une infrastructure

 

Salut à tous,

 

Pas mal de chose se sont passées cet été, j'ai mis en vente ma maison, j'ai déménagé, j'ai changé de boulot et surtout j'ai eu mon diplôme !
C'est la rentrée et il faut se reprendre !
Mon agenda de publication sur Dyrk est malheureusement vide ... faute de temps cet été ... et aussi ... parce que la fatigue a eu raison de ma volonté d'écrire.
C'est donc aujourd'hui ... poussé par d’innombrables commentaires sur le blog et par l'insistance de quelques proches, que je prends le temps de vous écrire cet article !
Je reprends donc en main le blog après ces quelques mois à l'abandon, ne soyez pas trop sévère !

Comme je le disais un peu plus haut, j'ai eu la chance d'intégrer tout récemment une belle structure dans une zone géographique dotée d'un secteur IT assez faible ...
Cependant J'ai le plaisir de pouvoir y apprécier l'utilisation de technologie assez récente.

Travaillant désormais avec le Cloud d'OVH qui est vraiment pas mal puisqu'il exploite la puissance d'OpenStack, je me suis dis qu'il serait intéressant de vous faire partager cette fabuleuse technologie dans un article.

Je tiens à préciser que dans cet article je parlerais d'OVH ...
Il ne s'agit pas d'un article sponsorisé, mais simplement d'une entreprise avec laquelle je travaille autant sur le plan personnelle que professionnelle.

Des serveurs à la demande

Parfois on aimerait bien tester 2/3 bricoles dans un environnement précis sans pour autant être obligé de débourser une fortune pour une machine que nous n'utiliseront que quelques minutes ... ou quelques heures.
OVH permet grâce à son cloud de créer en 2 temps 3 mouvements n'importe quelle machine dans une multitude de dimensionnement et sur un large choix d'OS.
Et très clairement c'est là que ça devient sympa, car vous pouvez par exemple décider de créer une machine super-puissante avec un énorme débit pour effectuer une tâche super longue et nécessitant une connexion de compétions.

L'avantage c'est que la machine est créée en 30 secondes, et que vous pouvez décider de la payer à l'heure ou au mois (par défaut le paiement est à l'heure, ce qui nous donne des prix vraiment accessibles allant de 6 centimes à un peu plus d'un euro.)

Terraform dans tout ça

Je n'avais jusqu'à aujourd'hui pas eut l'occasion d'utiliser la technologie OpenStack, et c'est vraiment un truc exceptionnel si vous devez gérer une infrastructure contenant plusieurs machines (serveur mail, loadbalancer, proxy, base de données, ...).
De la même manière qu'une image docker que vous pouvez instancier, dupliquer détruire comme ça en claquant des doigts, OpenStack permet de gérer dynamiquement toute une infrastructure en ligne de commande, créer des serveurs, les copier, les démarrer, les arrêter, les modifier, les détruires, ...

Terraform est un outil qui permet d'exploiter le potentiel d'OpenStack !
Vous pouvez créer un template dans un fichier texte avec toute une liste de serveurs. de réseaux, de clés ssh, ...
Et pour chacun vous décrivez une configuration, par exemple pour un serveur nous retrouverons :

  • un flavor type (une configuration : cpu, ram, espace disque, débit, etc ...)
  • un système d'exploitation
  • un nom
  • une configuration réseau
  • un lieu***

Terraform partira de ce template pour recréer votre infrastructure sur le cloud

Petite parenthèse sur le lieu :
1) Actuellement la RGPD oblige les données des personnes qui utilisent vos services à être en Europe, c'est donc super utile de pouvoir choisir le lieu où sont stockées vos données.
2) De plus, c'est plutôt sympa si un datacenter dysfonctionne de pouvoir profiter d'une redondance sur un autre lieu.

 

Utiliser Terraform 

 

Installer le client TerraForm

Tout d'abord la première étape consiste à vous rendre sur le site et à télécharger le client selon votre système d'exploitation : https://www.terraform.io/

Disposer d'un compte chez un fournisseur OpenStack (OVH, RackSpace, ...)

Pour OVH, il vous faudra vous connecter sur votre compte, aller dans l'onglet "Public Cloud", créer un projet puis créer un utilisateur.
Pour un autre fournisseur je vous invite à poser la question à Google.

Créer un template OpenStack

Dès lors que vous disposez d'un compte chez un fournisseur OpenStack, vous pouvez commencer à créer votre template.

Chez certains fournisseurs comme OVH, vous aurez la possibilité de télécharger un fichier qui initialise des variables d'environnement afin d'utiliser TerraForm.

 

Mais si votre fournisseur ne vous fourni pas ce genre de fichier, il vous suffit d'ajouter manuellement  ceci dans l'entête de votre template les quelques lignes suivantes

# Configure the OpenStack Provider
provider "openstack" {
  user_name   = "BobDylan"
  password    = "mdp123456789"
  auth_url    = "https://auth.cloud.ovh.net/v2.0/"
  region      = "DTC...Oo"
}

Et si vous tenez vraiment à avoir des variables d'environnement, voici les quelques lignes à ajouter (et à renseigner) dans votre .bash_profile  / .bashrc

export OS_AUTH_URL=
export OS_IDENTITY_API_VERSION=
export OS_TENANT_ID=
export OS_TENANT_NAME=
export OS_USERNAME=
export OS_PASSWORD=
export OS_REGION_NAME=

Normalement vous aurez toutes les informations sauf OS_IDENTITY_API_VERSION ...
Renseignez-vous auprès de votre fournisseur s'il utilise la version 2 ou 3 d'OpenStack
OVH utilise la version 2 mais permet tout de même de vous faire profiter de la 3 (via une case à cocher)

Bref une fois que vous aurez renseigné vos informations de connexion ...
OpenStack ... et Terraform pourront donc créer l’infrastructure de vos rêves !

Déclarer une clé publique SSH dans notre template

Lorsque nous allons déclarer les serveurs / instances que nous souhaitons créer, il nous faudra un moyen de pouvoir nous y connecter.
Ici, nous déclarons donc de manière assez simple une clé publique SSH et nous lui assignons un nom.
(Provider : correspond à votre fournisseur, ici nous sommes chez OVH)

 resource "openstack_compute_keypair_v2" "maSuperCleSSH" {
   provider = "openstack.ovh"
   name = "maSuperCleSSH" 
   public_key = "${file("~/.ssh/id_rsa.pub")}" 
 }

 

Créer une instance dans notre template

Une instance ça se déclare comme ça :

 resource "openstack_compute_instance_v2" "NomDeVotreInstance" {
	 name 		 = "NomDeVotreInstance"
	 provider    = "openstack.ovh"
	 image_name  = "Ubuntu 18.10"
	 flavor_name = "b2-60"
	 key_pair 	 = "${openstack_compute_keypair_v2.maSuperCleSSH.name}"
		 network {
			name = "Ext-Net"            
		 }
 }

Vous pouvez en mettre autant que vous le voulez dans votre fichier template !

  • "name" : renseigne le nom de votre machine
  • "provider" : dans notre cas nous sommes sur l'openstack de chez OVH
  • "image_name" : indique l'OS / l'image que vous souhaitez avoir sur votre serveur.
    vous pouvez accéder à cette liste avec la commande :
    glance image-list
  • "flavor_name" : Correspond à une configuration de machine chez votre fournisseur.
    Vous pouvez obtenir la liste des configurations via la commande :
    nova flavor-list
  • "key_pair" : Correspond à la clé publique que vous souhaitez déployer sur votre instance
    Afin de pouvoir vous y connecter.
  • "network" : Permet de connecter votre instance à un réseau. "Ext-Net" correspond au
    réseau public, mais en creusant un peu vous trouverez comment vous
    créer un réseau privé.

 

Exécuter le fichier de template

Lorsque notre fichier template est créé, nous pouvons l’exécuter avec Terraform avec la commande suivante

terraform apply

Vous devriez par la suite voir chez votre hébergeur vos instances apparaître progressivement.

 

Aller plus loin en utilisant du Javascript

Si comme moi vous aimez le Javascript, il existe un module nodeJS qui se nomme "pkgcloud", il s'agit d'un module qui gère une multitude de fournisseurs OpenStack, vous devriez assez facilement trouver votre compte !
Un contexte assez sympa d'utilisation c'est lorsque vous réaliser une migration, car vous pouvez vous en servir pour détecter automatiquement les correspondances de flavor-type de votre futur fournisseur de cloud  par rapport à celle de votre ancien, il en est de même pour les images etc ...

Bref un très bon module !

 

Conclusion

C'est terminé pour cet article, j'espère vous avoir permis de découvrir OpenStack et si ce n'est pas le cas Terraform.
De nombreux tutoriels existent et il s'agit ici que d'une simple mise en bouche, d'une découverte.
Il y a beaucoup de choses qui tournent autour de cet écosystème qui peut-être feront l'objet d'un prochain article.
Je devrai faire un article plus ludique la semaine prochaine, en attendant je vous souhaite un excellent Weekend, et je tiens à remercier Bertrand Henry et Jérôme Creignou de m'avoir permis de découvrir ce superbe univers.

 

Partagez ce contenu

3 comments

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *