A quoi sert IaC ?

Les clients ont besoin de déployer une Infrastructure qui se compose de serveur, de réseaux, etc.). La manière de déployer à largement évoluée. Au début l’infrastructure était déployée sur l’Hyper-V, ensuite les scripts sont apparus (script PowerShell), par des Portails de Provider tel qu’Azure et enfin L’infra as Code est arrivée. L’infra as code met en place l’idempotence. Avec un script PowerShell si vous l’exécutez plusieurs fois les ressources seront donc dupliquées. Le code de Terraform est un code déclaratif, on dit simplement les ressources que l’on souhaite et non pas comment les déployer.

Une fois un Template créé si la variabilisation et la factorisation de nos variables sont faites correctement cela nous permet de mettre en place du versionning.

 

Est-ce que le saut a IaC pour les métiers système est compliqué ?

Pour quelqu’un du système s’il fait de L’IaC avec de L’ARM c’est très compliqué, L’ARM est très compliqué à comprendre car L’ARM est difficilement lisible. Si l’IaC est faite en Terraform cela est beaucoup plus simple, pour plusieurs raisons. Hashicorp (créateur de Terraform) met à disposition une documentation très complète. Il suffit de taper le nom de la ressource sur google et vous trouverez comment la déployer avec Terraform peu importe le Provider. En plus le code est très lisible car c’est du code déclaratif.

 

C’est quoi la différence entre le YAML et le Terraform ?

D’une part dans l’IaC tu choisi ton Template (ici du Terraform), Terraform correspond à la partie code, ce qui représente la déclaration de l’infrastructure. La plupart du temps les déploiements sont font en local via Visual studio Code par exemple. Pour faire de la CI/CD, au lieu de faire ces déploiements en local, on va les faire sur GitLab ou bien Azure DevOps. Le YAML représente les chaines de déploiements , les pipelines. Les fichiers YAML permettent de définir comment déployer le code qui a été poussé sur GitLab. Dans les fichiers YAML pour déployer vous pourriez préciser a votre pipeline de faire un Terraform plan, à la suite un Terraform apply.

 

L’ARM est beaucoup plus difficile que Terraform ?

Oui, pour déployer un groupe de ressources sous Terraform cela représente 3 lignes de codes. Sous l’ARM c’est un fichier complet de JSON qu’il faudra écrire pour déployer un simple ressource groupe.

 

L’apprentissage de Terraform est-il long ?

C’est très simple, en une semaine tu sauras déployé des ressources, ce sont les Best Practices qui demanderont un temps d’apprentissage. On prend vite la main. C’est du à la lisibilité du code et à une documentation très fournie et très simple.

 

Dans Terraform peut-on faire du Scripting ?

Non Terraform c’est seulement de la déclaration, cependant on peut mettre en place des conditions (IF/ELSE) et des boucles. Ce sera seulement des appels a des fonctions (pour les boucles count = nb_de_fois_que_la_ressource_doit_etre_deployée). Le code de Terraform reste déclaratif.

 

Terraform a-t-il des points faibles ?

Terraform n’a pas de points faibles à proprement parler mais il faut faire attention à bien mettre en place la structure de l’infra et de mettre en place les Best Practices. Si on ne segmente pas le code correctement et que l’on ne Variabilise pas on ne pourra donc pas faire de Versionning. Le but de Terraform est d’avoir un Template pour déployer diffèrent environnement.

 

Microsoft a créé son Propre Terraform nommé Biceps !

C’est pareil que Terraform a première vue, cependant Biceps permet de choisir la version de l’api que la ressources va appeler. Tant mieux car tout le monde s’éloigne de L’ARM.

 

Peut-on voir ce que Terraform exécute pour créer nos ressources ?

Non Terraform s’en occupe seul.

 

Que dire pour conclure ?

Terraform c’est génial il faut foncer ! Terraform permet de faire des backups des infra. Grace a ses fichiers il suffit de redéployer au moindre problème.

 

Est-il obligatoire de connaitre Terraform pour les gens du système ?

Pour moi oui, il faut se mettre à l’infra as code pour être dans l’aire du temps. On a l’automatisation de déploiement de l’infra donc autant l’utiliser.

 

Que penserais tu d’un client qui fait sont infra sous PowerShell ?

Ce n’est plus d’actualité. La plupart des clients ont peur de passer à L’Infrastructure as Code, ils pensent que c’est compliqué que ça prendra du temps, ils ont peur d’aller vers du nouveau. Il faut ce mettrez à jour et cela leur apportera un gros gain de temps après que les équipes auront fait les Templates.

 

Les Best Practices :

Avant de ce coder sont infrastructure il faut suivre plusieurs étape :

  1. Faire l’architecture de l’infrastructure que vous allez déployer
  2. Mettre en place une convention de nommage
  3. Regroupe les ressources dans des fichiers selon leur cycle de vie
  4. Variabiliser tous les paramètres de vos ressources
  5. Utiliser des paramètres selon l’environnement de variables (1 fichier de variable par environnement, ex : dev , prod)
  6. Mettre en place des Tags cohérents
  7. Créer des modules pour les types de ressources qui seront déployées plusieurs fois
  8. Mettre en place le Versionning (dev, prod, etc.)
  9. Ne pas mettre les mots de passe ou les clé d’accès en clair, les générer de manière aléatoire et les stocker dans des key Vault