Dans le cadre des vrtice Tech Lunch, Frédéric Palluel, Développeur Full Stack chez enlaps, est venu expliquer en quoi Terraform, un outil logiciel fonctionnant en mode Infrastructure as code (IAC), est en passe de devenir un incontournable du DevOps. Car dans le monde du développement logiciels, les administrateurs sont souvent mis au défi : les cycles de développement sont de plus en plus courts et la mise en œuvre des changements toujours plus rapide. Afin de répondre aux exigences élevées de ce rythme rapide, il faut automatiser autant que possible la gestion des ressources. Le point sur les avantages de Terraform, qui permet d’automatiser le déploiement de l’infrastructure et de faciliter son évolution en appliquant le versionning sur ces fichiers de code, tout en gérant plus simplement plusieurs environnements à l’aide de variables.
Le cloud… par l’interface web
Il est devenu extrêmement simple, voire plug and play, d’accéder à une infrastructure cloud de nos jours. La mise en place d’un premier jet est donc rapide, mais devient vite fastidieuse. Quid de l’automatisation ? De la sauvegarde de la structure ? Des versions ? D’où l’intérêt de passer à l’Infrastructure as Code (IaC), couplé avec git, qui connaît un véritable essor.
Définition
Infrastructure as Code : dans les technologies de l’information, l’Infrastructure as Code ou « infrastructure en tant que code » est un paradigme qui prévoit la description de matériel sous la forme d’un code lisible par machine. La construction et la gestion de l’infrastructure informatique peuvent ainsi être considérablement automatisées afin de pouvoir réagir avec précision aux changements ou aux nouvelles exigences.
L’Infrastructure as Code : une approche qui a révolutionné le métier de développeur
Les technologies d’infrastructure (Cloud) ont connu de fortes évolutions ces dernières années. En parallèle, les métiers de SysAdmin et de développeur se sont également métamorphosés. Le DevOps est aujourd’hui un métier pleine expansion. Il concilie en effet les deux corps de métier : le développeur de logiciels d’une part, l’administrateur informatique d’autre part. Du développement à l’exploitation d’applications en passant par leur déploiement, ses compétences couvrent un large spectre et exigent une certaine technicité et polyvalence.
Terraform, un outil flexible pour standardiser la gestion des ressources
Terraform voit le jour en 2014. Créé par HashiCorp, il s’agit d’un outil logiciel permettant d’automatiser la création et la gestion des infrastructures IT dans le cloud. Terraform offre de nombreuses possibilités d’intégration (clouds publics et privés), ainsi que des fonctions d’importations et de stockage pour des infrastructures déjà créées. Cet outil Open Source dispose d’une communauté active de plus de 1000 contributeurs et repose sur une architecture basée sur les plugins.
Ecrit en langage Go (ndlr : Go est un langage de programmation compilé, concurrent de C, développé par Google) et fonctionnant en mode Infrastructure as code (IAC), Terraform permet aux opérateurs d’administrer l’infrastructure grâce au code, au lieu de procéder à un traitement manuel. Autrement dit, il est possible de se servir de fichiers textes pour créer et modifier l’infrastructure (ressources serveur, stockage, réseau) nécessaire au fonctionnement d’un logiciel ou une application. Les fausses manipulations sont ainsi minimisées, même s’il est impératif d’effectuer un contrôle rigoureux et exhaustif avant le lancement de l’architecture.
Choisir son langage pour décrire son infra : les avantages de Terraform dans une démarche DevOps
L’infrastructure as code présente de nombreux atouts pour les équipes de développement :
- Rapidité et simplicité : l’infrastructure ascode vous permet de déployer et de faire évoluer votre infrastructure en exécutant des scripts, vous pouvez ainsi simplement et rapidement déployer votre infrastructure (réseau, serveurs, bases de données, load balancers, stockage…) sur plusieurs environnements (production, tests, développement) en minimisant les interventions humaines
- Versionning de la configuration : toute votre infrastructure étant décrite dans des fichiers de code variabilisés, elle est standardisée et vous pouvez tracer les changements, limitant le risque d’erreurs humaines et garantissant des configurations identiques entre vos différents environnements.
- Automatisation : le déploiement de l’infrastructure peut être intégré à votre processus de déploiement continu, l’infrastructure est donc déployée automatiquement à chaque déploiement sans intervention des équipes
- Gain de productivité : l’infrastructure as code simplifie la gestion de l’infrastructure pour vos équipes qui peuvent se concentrer sur des tâches plus productives
Les plus de Terraform :
Terraform présente plusieurs avantages par rapport aux autres outils d’infrastructure as code :
- Puissance des Scripts (l’aspect open source de Terraform permet de créer soi-même ses propres modules ou plugins), utilisant les CLI (Command-Line Interface) /SDK (Software Development Kit)
- Multi-plateformes : Terraform est open source et multi-plateformes. Il fonctionne notamment avec plus d’une centaine de fournisseurs de Cloud public, tels que Amazon Web Services (AWS), Microsoft Azure ou Google Cloud Platform, mais également sur une infrastructure Cloud privé classique. Il permet d’utiliser plusieurs providers dans un même template de configuration. Il existe en effet des plugins pour des providers de Cloud, des services d’hébergement, des SCM…
- Outils de déploiement des fournisseurs Cloud (CloudFormation, Deployment Manager …etc.). Comme vous l’avez vu, nous avons opté pour Terraform comme outil pour faire de l’IaC pour nos services managés sur AWS, mais nous aurions pu partir sur du CloudFormation. On ne s’outille pas pour suivre une mode, mais pour répondre aux besoins d’un projet/d’un contexte donné !
- Intégration au processus de livraison continue : Terraform est un outil très répandu qui fonctionne notamment en ligne de commande et par API, il s’intègre ainsi très facilement avec vos outils d’intégration et déploiement continu existants.
Mais, inconvénients :
- Scripts : puissance mais la structure reste « perso » (même en suivant les 12factor).
- Outils : structure standardisée, mais « logique » limitée
- Couplé à un fournisseur (Provider). Si on change de Provider, on doit tout changer ! L’organisation du code reste la même. Conseil, si on change de Provider, mettre le 2ème Provider en parallèle et migrer petit à petit.
À quoi sert Terraform ?
Il stocke les ressources et leur état sur le cloud. Ce qui permet de synchroniser en permanence ce qu’on a décrit dans notre code et le cloud. Une fonctionnalité particulièrement intéressante quand plusieurs personnes travaillent ensemble.
Terraform autorise également le versioning. Au cours de la programmation, le DevOps peut utiliser diverses fonctionnalités de contrôles et de tests, ainsi que d’autres outils propres à ce type de codage. Concrètement, Terraform permet de construire, modifier et versionner une infrastructure.
Terraform : le CLI (Command-Line Interface)
Terraform a une CLI (Command-Line Interface) facile à utiliser. Voici les principales commandes :
➡ apply : La commande apply, comme son nom l’indique, permet d’appliquer les changements à effectuer sur l’infra. C’est cette commande qui va créer nos ressources. Elle met à jour le state, et applique la configuration.
➡ plan : simule la configuration. La commande plan permet de créer un plan d’exécution. Terraform va déterminer quelles actions il doit faire afin d’avoir les ressources listées dans les fichiers de configuration par rapport à ce qui est actuellement en place sur l’environnement/le provider cible.
$ terraform plan
➡ state : manipulation du state (rm, mv). Un state est un snapshot de votre infrastructure depuis la dernière fois que vous avez exécuté la commande terraform apply. Terraform utilise un local storage pour créer les plans et effectuer les changements sur votre infra. Mais il est possible de stocker ce state, dans le cloud.
➡ import : intégrer une ressource déjà existante sur le Cloud. Attention, limiter à des choses simples. Par exemple, l’IA n’est pas une ressource simple !
➡ output : afficher des valeurs du state. Pour faire passer des valeurs d’un module à un autre, on utilise les outputs. Les outputs sont utiles également lorsque l’on souhaite afficher des informations à la fin de l’application du terraform apply.
output « authorizer_uri » {
value = « ${aws_lambda_function.lambda_toto.invoke_arn} »
Le principe est le suivant : on déclare une ressource à Terraform et on lui indique la manière de se connecter à son AWS par exemple. Terraform génère un Plan : il nous dit ce qu’il va faire. On peut alors choisir le stockage, le volume, etc. Si quelque chose ne nous convient pas par défaut, il suffit de le générer dans le code.
HCL
Les fichiers de configurations s’écrivent en HCL (HashiCorp Configuration Language). Le principe est d’écrire des ressources. Les ressources peuvent être écrites en JSON également mais il est recommandé de les écrire en HCL. Lire un fichier de configuration HCL est plutôt simple et intuitif.
Terraform : les bonnes pratiques
Fichiers main.tf, variables.tf, provider.tf…
Un fichier par type de ressources : ec2.tf, eip.tf, sns.tf, rds.tf…
Avantage :
Trouver ses ressources.
Inconvénients :
- Notion de fonctionnalité : Elle est diluée dans plusieurs fichiers.
- Plusieurs environnements ?
- « Coût d’entrée »
Créer des Modules
Comment documenter mon code pour avoir une big picture de ce qu’est mon infra ? Solution : Autodocumenter le code en créant des modules.
Les modules sont utilisés pour créer des composants réutilisables, améliorer l’organisation et traiter les éléments de l’infrastructure comme une boite noire. C’est un groupe de ressources qui prennent en entrée des paramètres et retournent en sortie des outputs (possibilité de tracking).
Les Fichiers .tf sont rassemblés dans un répertoire. Et le reste… ce sont des conventions !
Cette approche par Modules permet d’encapsuler des ressources par fonctionnalités :
- pour pouvoir les pointer sur Apply (Target)
- pour rendre explicite les dépendances (12factor !)
Le fait de séparer permet d’avoir de la souplesse, l’infrastructure n’est pas figée !
Autre avantages :
- Partage avec la communauté (grande force !)
- Etat interne inaccessible sans output
➡Puis, invocation dans autre fichier .tf
Autres avantages :
- Possibilité de partager avec la communauté est une grande force !
- Etat interne inaccessible sans output
Quelques écueils à éviter
- Attention à l’intégration de ressources existantes (import)
- « Danger » de l’interface web
- Utiliser « apply – target » avec parcimonie
- Attention aux autorisations (rôles et policies) : risque de blocage
- Eviter la gestion complète par Terraform
Avantages de Terraform | Inconvénients de Terraform |
Open Source | Demande un temps d’adaptation |
Syntaxe uniforme pour l’Infrastructure as Code | Pas de fonction de retour en arrière automatique en cas de modification incorrecte des ressources |
Prise en charge de diverses solutions de cloud computing | Fonctions de collaboration et de sécurité disponibles uniquement dans des solutions entreprise onéreuses |
Possibilité d’intégrer de nombreuses extensions | |
Fonction de stockage et d’importation pour les architectures existantes | |
Possibilité de générer des graphiques de dépendance |
Télécharger Terraform
À propos des vrtice TechLunch
L’objectif de ces Meetup, dédiés à la communauté de développeurs du Tarmac et de la région grenobloise, est de favoriser le partage de connaissances technologiques, axées principalement logiciel mais pas seulement. Son ambition est d’organiser des sessions régulières sur inovallée dans le but de faire progresser les participants.
Ce groupe est animé par la startup vrtice, mais il s’adresse à tous ceux qui veulent venir partager un bout de tech le temps d’une pause déjeuner. Aucune cotisation, ou frais de participation ne sont requis pour ces évènements.
Rejoindre les vrtice Tech Lunch