Ce support sur Terraform s’adresse aussi bien aux « Devs » qu’aux « Ops », débutants ou disposant déjà de notions de base, qui souhaitent maîtriser le développement d’une infrastructure sur le cloud. Le lecteur y trouvera des cas d’usage illustrés par des exemples de code variés lui permettant d’être à l’aise avec son langage, son utilisation et son écosystème. Dans les premiers chapitres du support, l’auteur présente les fondamentaux de Terraform, de la présentation des notions générales de...
Ce support sur Terraform s’adresse aussi bien aux « Devs » qu’aux « Ops », débutants ou disposant déjà de notions de base, qui souhaitent maîtriser le développement d’une infrastructure sur le cloud. Le lecteur y trouvera des cas d’usage illustrés par des exemples de code variés lui permettant d’être à l’aise avec son langage, son utilisation et son écosystème.
Dans les premiers chapitres du support, l’auteur présente les fondamentaux de Terraform, de la présentation des notions générales de l’infrastructure as code, à l’architecture de Terraform avec le fonctionnement du CLI, du registry, du state et des providers, en passant par le langage Terraform (HCL) expliqué en détail pour permettre la lecture et l’écriture de code simple. Au travers de 7 cas d’usage, le lecteur peut ensuite découvrir des utilisations différentes de Terraform sur des plateformes variées : Google Cloud Platform, AWS, MongoDB, OVH, Scaleway, GitHub et GitLab.
La suite du support permet au lecteur d’aller plus loin dans l’apprentissage de Terraform. Le partage et la réutilisation de code sont mis en pratique avec l’utilisation et le développement de modules. Les éléments du langage avancés ainsi que les bonnes pratiques de développement sont présentés en détail. La gestion du state et les opérations permettant de le manipuler sont ensuite expliquées avant de passer à l’écriture de tests (souvent mise à l’écart) présentée avec l’implémentation de tests d’intégration. Enfin, le développement d’un provider permet de s’interfacer avec n’importe quel service.
À l’instar de nombreuses entreprises qui utilisent HCP Terraform pour exécuter le code Terraform, le lecteur appréhende l’exécution managée de Terraform. L’intégration de Terraform à des pipelines de CI/CD est également présentée avec des exemples pour GitLab CI et GitHub Actions. Toutes ces connaissances cumulées ainsi que de précieux conseils pour bien se préparer permettent au lecteur de pouvoir préparer et passer la certification Terraform.
Pour finir, des outils open source complémentaires sont présentés pour compléter l’outillage de développement et quelques ressources et liens sont donnés pour se maintenir à jour sur les nouveautés de l’écosystème.
Avant-propos
L’histoire d’une entreprise qui découvre le cloud
Pourquoi avoir écrit ce livre ?
À qui est destiné cet ouvrage ?
Quels sont les prérequis ?
Comment est construit ce livre ?
Conseils de lecture
Les exemples de code
Terraform et OpenTofu
Infrastructure as Code
Cloud et l’émergence de l’IaC
L’Infrastructure as Code - SDKs et CLIs
Terraform
1. L’aspect multicloud
2. L’approche déclarative
Conclusion
Architecture et CLI Terraform
L’architecture globale
1. Le CLI
2. Le registry Terraform
3. Les providers
4. Le state
Le CLI, installation et utilisation
1. Installer le CLI
2. L’exécution de commandes
Le workflow et les commandes principales
1. Téléchargement des providers avecterraform init
2. Validation du code source avec terraform validate
3. Construction du plan d’exécutionavec terraform plan
4. Appliquer des changements avec terraform apply
5. Détruire l’infrastructure avec terraformdestroy
6. Exporter le plan d’exécution
7. Formatage du code source avec terraform fmt
8. Passer des variables en paramètre
9. Consulter les valeurs en sortie
Naviguer dans la documentation officielle
1. La documentation Terraform
2. La documentation du registry
Conclusion
Écrire du code Terraform
Le langage déclaratif HCL
Les fichiers .tf
Les blocs resource et data
1. Le bloc resource
2. Le bloc data
Les blocs variable, locals et output
1. Le bloc variable
2. Les variables locales
3. Le bloc output
Les expressions
1. Les expressions simples
2. Les références
3. Accès aux valeurs de listes ou de maps
4. L’interpolation de chaînes de caractères
5. Les fonctions
Le bloc provider
1. Dépendances aux providers
2. Configuration des providers
Les commentaires
Conventions de nommage
Conclusion
Dans la pratique
Des exemples variés d’infrastructure
Un cluster k8s sur Scaleway
Une zone DNS chez OVH
Un groupe GitLab avec des repositories
Des repositories sur GitHub
Une base de données PostgreSQL sur Google Cloud
Des serveurs EC2 et un load-balancer sur AWS
Une base de données MongoDB sur Atlas
Conclusion
Utiliser et développer des modules
Pourquoi réutiliser du code ?
Le root module
La structure d’un module
Modules et providers
Utiliser des modules
1. Structure d’un bloc module
2. Source
3. Paramètres et outputs
Publier un module sur le registry Terraform
Conclusion
Concepts avancés de Terraform
Constructions et usages avancés
L’argument count
1. Utilisation de l’index
2. Création de ressources conditionnelles
for_each
Expression for
1. Expression for pour créer des listes
2. Expression for pour créer des map
3. Itérer sur des listes
4. Itérer sur des map ou des objets
5. Filtrer des éléments
Expressions splat
Les dynamic blocks
Le bloc lifecycle et l’attribut depends_on
1. create_before_destroy
2. prevent_destroy
3. depends_on
Validation des variables
L’argument provider
Attributs, variables et outputs sensitives
1. Attributs sensitives
2. Variables sensitives
3. Outputs sensitive
Applications partielles
Conclusion
La gestion du state
L’état des ressources
Le fichier de state
1. serial et lineage
2. outputs
3. resources et datas
Le backend
1. Configuration d’un backend
2. Migrer de backend
Adresses des ressources et modules
Opérations sur le state
1. Sauvegarde et restauration
2. Lister les ressources existantes
3. Renommer des ressources
4. Importer des ressources
5. Supprimer des ressources
6. Refresh
taint et recréations forcées
1. taint / untaint
2. replace
Workspaces
1. Manipuler des workspaces
2. Adapter le code
Conclusion
Tester le code Terraform
Pourquoi tester ?
1. Tests d’intégration
2. Checks
Tests d’intégration
Tests de plan
Tests avec des mocks
1. Mock de provider
2. Mocks ciblés (override)
Checks
Conclusion
Développer un provider
Provider et API
Les prérequis
La structure du code d’un provider
1. Le framework
2. Metadata()
3. Schema()
4. Configure()
5. Read(), Create(), Update(), Delete()
Développer le provider
1. Le développement du type Provider
a. La fonction Metadata()
b. Modèle de données et Schema()
c. La fonction Configure()
d. Constructeurs Resources() et DataSources()
2. Le développement d’une data
a. La fonction Metadata()
b. Modèle de données et Schema()
c. La fonction Configure()
d. Constructeur
e. La fonction Read()
3. Le développement d’une ressource
a. La fonction Metadata()
b. Modèle de données et Schema()
c. La fonction Configure()
d. Constructeur
e. La fonction Read()
f. La fonction Create()
g. La fonction Update()
h. La fonction Delete()
Générer la documentation
La publication du provider sur le Terraform Registry
1. Connexion au Registry
2. Générer la clé de signatureGPG
3. Publication du provider
Conclusion
HCP Terraform
Le service cloud de HashiCorp
Exécuter du code Terraform
1. Version Control Workflow
a. Créer le workflow
b. Configurer des variables
c. Exécuter le Workspace
d. Mises à jour du Workspace
2. CLI-Driven Workflow
a. Créer le workflow
b. Récupérer les credentials
c. Configurer les variables
d. Exécuter le Workspace
Le registry privé
1. Publier un module
2. Consommer un module privé
Conclusion
Intégrer Terraform dans une CI/CD
Les principes de la CI/CD
Configurer les providers et backend
1. Configurer le provider AWS et le S3
2. Configurer le provider Google GCP et le backend GCS
3. Configurer le provider Azure et le backend Blobs
Positionner les variables
1. Paramètres de ligne de commande
2. Fichiers tfvars et auto.tfvars
3. Variables d’environnement
Exporter le plan d’exécution et le transmettre à terraform apply
Bonnes pratiques générales
Déployer de l’infrastructure avec GitLab CI
1. L’écriture du pipeline
2. La configuration des variables d’environnement
Publier un module avec GitLab CI
Déployer de l’infrastructure avec Github Actions
1. L’écriture du workflow
2. La configuration des variables
Conclusion
Passer la certification Terraform
Pourquoi passer la certification ?
Les modalités de passage
Les compétences et connaissances testées
La préparation
Les prérequis de l’examen
1. Les prérequis de votre environnement
2. Les prérequis de votre ordinateur
Le jour J
1. Connexion à la plateforme
2. Vérification de votre identité etde l’environnement
L’écran de certification
Conseils pour le jour J
Conseils pendant l’examen
Après l’examen
Conclusion
Outils externes
La boîte à outils du développeur
.gitignore
Git hooks
tfenv
tflint
1. Installation
2. Utilisation
3. Configuration
4. Dans une intégration continue
terraform-docs
1. Installation
2. Utilisation
3. Ajout de texte descriptif
Checkov
1. Installation
2. Exécution
3. Dans une intégration continue
TerraGrunt
1. Installation
2. Utilisation
Autres outils notables
Conclusion
Faire sa veille
Blogs et newsletter
1. Terraform Blog
2. HashiCorp newsletter
3. Spacelift Blog
4. Terraform Weekly
Communautés et sites web
1. Terraform Best Practices
2. Discuss Terraform
3. Awesome Terraform
4. Dev.to
5. Medium.com
6. Reddit
Vidéos
1. Webinars HashiCorp
2. YouTube - Weekly Dose of Terraform
GitHub Issues & Release notes
Conclusion
Julien WITTOUCK
Julien WITTOUCK est architecte solution et développeur indépendant, associé dans l’ESN Lilloise EKITÉ, avec près de 15 ans d’expérience. Il enseigne également le développement Java et Spring Boot à l’Université de Lille depuis plus de 10 ans. Speaker occasionnel sur ses sujets de prédilection comme Java, Docker et Kubernetes, Terraform et le Cloud, il participe à l’organisation de la conférence Lilloise Cloud Nord. Au cours de ses différentes expériences, il a eu l’occasion d’accompagner des entreprises sur des migrations Cloud sur AWS et GCP et de développer des plateformes composées de dizaines de modules Terraform utilisés en self-service par des équipes de développeurs. Ce livre est le fruit de ces expériences !