Terraform est le premier outil d’infrastructure immuable multi-cloud qui a été présenté au monde par HashiCorp, publié il y a trois ans et écrit en Go.
C’est un outil pour développer, modifier et gérer des versions d’infrastructure de manière sûre et efficace.
De plus, Terraform est devenu populaire car il a une syntaxe simple qui permet une modularité facile et fonctionne contre le multi-cloud.
Multi-Cloud
Le multi-cloud est une approche du cloud qui s’appuie sur plusieurs services cloud et sur plusieurs fournisseurs de cloud, public ou privé.
L’objectif du DevOps est d’effectuer la livraison de logiciels plus efficacement, c’est là que des outils comme Terraform aident les entreprises avec de l’infrastructure-as-code et de l’automatisation.
Note
Vous avez peut-être utilisé des technologies comme Ansible, Chef ou Puppet pour automatiser et provisionner des logiciels, Terraform part de la même loi, de l’infrastructure-as-code, mais se concentre sur l’automatisation de l’infrastructure elle-même.
L’ensemble de votre infrastructure Cloud (instances, volumes, réseau, IP) peut être facilement définie dans terraform.
Hierarchie
Voici comment s’organise un dossier terraform :
Le dossier credentials contient la clé du service-account utilisé /credentials/secrets.json
Le dossier first_instance contient les configurations de l’instance à automatiser. Ils ont tous la même structure :
Le fichier main.tf qui contient les resources que nous allons déployer sur GCP
Le fichier variables.tfq ui contient toutes les variables que nous utiliserons dans ce dossier
Les fichiers terraform.tfstate et terraform.tfstate.backup qui nous permet de garder une image locale du state de terraform.
Le fichier output.tf pour afficher des informations
Le fichier provider.tf qui contient les configurations pour se connecter au projet GCP
Le dossier caché .terraform qui contient les dépendances qui ont été mis en cache local
Note
En général, il est bien de séparer les fichiers .tf par type de ressources quand il y en a beaucoup fin de rendre plus lisible le code.
L’instance Cloud SQL est disponible dans la console GCP :
Avertissement
Attention, il m’est déjà arrivé d’avoir une erreur avec Cloud SQL qui n’accepte pas toujours de recréer une instance avec un nom d’instance déjà utilisé.
Ce n’est cependant pas la faute de terraform, mais le fonctionenment normal de GCP.
Modules
Nous allons maintenant composer une infrastructure complète grâce à toutes les ressources que nous avons configuré précedemment.
Les modules de terraform sont très puissants et permettent de pousser l’automatisation à son maximum.
Grâce aux modules, nous allons importer les resources configurées précedemment, il ne nous restera plus qu’à assigner les variables ou laisser celles par défaut.
module"firewall" {
source="../firewall"}
module"bucket" {
source="../bucket" bucket_name="data-project-bucket" storage_class="COLDLINE"}
module"data-science-instance" {
source="../virtual_machine" vm_name="data-science-instance" zone="europe-west1-b" env="staging" image="ubuntu-os-cloud/ubuntu-1604-lts" description="This VM is a sandbox for data scientist to run algorithms"}
module"data-processing-instance" {
source="../virtual_machine" vm_name="data-processing-instance" zone="europe-west1-b" env="staging" image="ubuntu-os-cloud/ubuntu-1604-lts" description="This VM is used to make heavy processing on data"}
Kubernetes
Cluster
Pour créer un cluster Kubernetes avec GKE, nous allons utiliser un module de terraform et GCP.
Terraform rend la configuration de l’infrastructure cloud automatisée, documentée, modulable, flexible et versionnée.
Après avoir passé beaucoup de temps à configurer à la main mon infrastructure cloud, c’est une véritable évolution technologique de pouvoir le faire de cette façon.