L'infrastructure as Code avec Terraform
Déployez votre infrastructure sur le Cloud
Julien Wittouck
Avant-propos
1. L'histoire d'une entreprise qui découvre le cloud13
2. Pourquoi avoir écrit ce livre ?14
3. À qui est destiné cet ouvrage ?16
4. Quels sont les prérequis ?17
5. Comment est construit ce livre ?18
6. Conseils de lecture22
7. Les exemples de code22
8. Terraform et OpenTofu23
Partie 1 : Les bases de Terraform
Chapitre 1-1
Infrastructure as Code
1. Cloud et l'émergence de l'IaC25
2. L'Infrastructure as Code - SDKs et CLIs27
3. Terraform30
3.1 L'aspect multicloud30
3.2 L'approche déclarative31
4. Conclusion33
Chapitre 1-2
Architecture et CLI Terraform
1. L'architecture globale35
1.1 Le CLI36
1.2 Le registry Terraform36
1.3 Les providers38
1.4 Le state40
2. Le CLI, installation et utilisation41
2.1 Installer le CLI41
2.2 L'exécution de commandes43
3. Le workflow et les commandes principales44
3.1 Téléchargement des providers avec terraform init46
3.2 Validation du code source avec terraform validate49
3.3 Construction du plan d'exécution avec terraform plan51
3.4 Appliquer des changements avec terraform apply57
3.5 Détruire l'infrastructure avec terraform destroy60
3.6 Exporter le plan d'exécution62
3.7 Formatage du code source avec terraform fmt64
3.8 Passer des variables en paramètre65
3.9 Consulter les valeurs en sortie67
4. Naviguer dans la documentation officielle69
4.1 La documentation Terraform69
4.2 La documentation du registry73
5. Conclusion77
Chapitre 1-3
Écrire du code Terraform
1. Le langage déclaratif HCL79
2. Les fichiers. tf81
3. Les blocs resource et data82
3.1 Le bloc resource82
3.2 Le bloc data84
4. Les blocs variable, locals et output85
4.1 Le bloc variable85
4.2 Les variables locales87
4.3 Le bloc output88
5. Les expressions89
5.1 Les expressions simples89
5.2 Les références90
5.3 Accès aux valeurs de listes ou de maps92
5.4 L'interpolation de chaînes de caractères93
5.5 Les fonctions94
6. Le bloc provider98
6.1 Dépendances aux providers98
6.2 Configuration des providers100
7. Les commentaires101
8. Conventions de nommage102
9. Conclusion104
Chapitre 1-4
Dans la pratique
1. Des exemples variés d'infrastructure105
2. Un cluster k8s sur Scaleway106
3. Une zone DNS chez OVH111
4. Un groupe GitLab avec des repositories114
5. Des repositories sur GitHub116
6. Une base de données PostgreSQL sur Google Cloud118
7. Des serveurs EC2 et un load-balancer sur AWS124
8. Une base de données MongoDB sur Atlas131
9. Conclusion137
Partie 2 : Concepts avancés de Terraform
Chapitre 2-1
Utiliser et développer des modules
1. Pourquoi réutiliser du code ?139
2. Le root module141
3. La structure d'un module141
4. Modules et providers143
5. Utiliser des modules144
5.1 Structure d'un bloc module144
5.2 Source146
5.3 Paramètres et outputs154
6. Publier un module sur le registry Terraform155
7. Conclusion160
Chapitre 2-2
Concepts avancés de Terraform
1. Constructions et usages avancés163
2. L'argument count164
2.1 Utilisation de l'index165
2.2 Création de ressources conditionnelles168
3. for_each169
4. Expression for172
4.1 Expression for pour créer des listes173
4.2 Expression for pour créer des map174
4.3 Itérer sur des listes174
4.4 Itérer sur des map ou des objets175
4.5 Filtrer des éléments175
5. Expressions splat176
6. Les dynamic blocks178
7. Le bloc lifecycle et l'attribut depends_on181
7.1 create_before_destroy181
7.2 prevent_destroy183
7.3 depends_on185
8. Validation des variables187
9. L'argument provider189
10. Attributs, variables et outputs sensitives190
10.1 Attributs sensitives191
10.2 Variables sensitives193
10.3 Outputs sensitive195
11. Applications partielles198
12. Conclusion199
Chapitre 2-3
La gestion du state
1. L'état des ressources201
2. Le fichier de state202
2.1 serial et lineage203
2.2 outputs205
2.3 resources et datas206
3. Le backend209
3.1 Configuration d'un backend211
3.2 Migrer de backend215
4. Adresses des ressources et modules218
5. Opérations sur le state221
5.1 Sauvegarde et restauration221
5.2 Lister les ressources existantes223
5.3 Renommer des ressources223
5.4 Importer des ressources227
5.5 Supprimer des ressources232
5.6 Refresh234
6. taint et recréations forcées236
6.1 taint / untaint236
6.2 replace237
7. Workspaces239
7.1 Manipuler des workspaces239
7.2 Adapter le code243
8. Conclusion244
Chapitre 2-4
Tester le code Terraform
1. Pourquoi tester ?245
1.1 Tests d'intégration246
1.2 Checks247
2. Tests d'intégration247
3. Tests de plan250
4. Tests avec des mocks251
4.1 Mock de provider254
4.2 Mocks ciblés (override)256
5. Checks257
6. Conclusion260
Chapitre 2-5
Développer un provider
1. Provider et API261
2. Les prérequis263
3. La structure du code d'un provider264
3.1 Le framework266
3.2 Metadata ()267
3.3 Schema ()268
3.4 ConfigureO268
3.5 Read (), Create (), Update (), Delete ()269
4. Développer le provider269
4.1 Le développement du type Provider270
4.1.1 La fonction Metadata ()270
4.1.2 Modèle de données et Schema ()271
4.1.3 La fonction Configure ()272
4.1.4 Constructeurs Resources () et DataSources ()273
4.2 Le développement d'une data274
4.2.1 La fonction Metadata ()275
4.2.2 Modèle de données et Schema ()275
4.2.3 La fonction Configure ()276
4.2.4 Constructeur277
4.2.5 La fonction Read ()277
4.3 Le développement d'une ressource278
4.3.1 La fonction Metadata ()279
4.3.2 Modèle de données et Schema ()280
4.3.3 La fonction Configure ()281
4.3.4 Constructeur282
4.3.5 La fonction Read ()282
4.3.6 La fonction Create ()283
4.3.7 La fonction Update ()285
4.3.8 La fonction Delete ()285
5. Générer la documentation286
6. La publication du provider sur le Terraform Registry288
6.1 Connexion au Registry288
6.2 Générer la clé de signature GPG292
6.3 Publication du provider296
7. Conclusion298
Partie 3 : L'univers étendu
Chapitre 3-1
HCP Terraform
1. Le service cloud de HashiCorp301
2. Exécuter du code Terraform304
2.1 Version Control Workflow305
2.1.1 Créer le workflow305
2.1.2 Configurer des variables307
2.1.3 Exécuter le Workspace310
2.1.4 Mises à jour du Workspace312
2.2 CLI-Driven Workflow313
2.2.1 Créer le workflow313
2.2.2 Récupérer les credentials314
2.2.3 Configurer les variables316
2.2.4 Exécuter le Workspace316
3. Le registry privé318
3.1 Publier un module319
3.2 Consommer un module privé322
4. Conclusion323
Chapitre 3-2
Intégrer Terraform dans une CI/CD
1. Les principes de la CI/CD325
2. Configurer les providers et backend328
2.1 Configurer le provider AWS et le S3328
2.2 Configurer le provider Google GCP et le backend GCS330
2.3 Configurer le provider Azure et le backend Blobs331
3. Positionner les variables332
3.1 Paramètres de ligne de commande333
3.2 Fichiers tfvars et auto. tfvars333
3.3 Variables d'environnement334
4. Exporter le plan d'exécution et le transmettre à terraform apply335
5. Bonnes pratiques générales336
6. Déployer de l'infrastructure avec GitLab CI338
6.1 L'écriture du pipeline339
6.2 La configuration des variables d'environnement346
7. Publier un module avec GitLab CI349
8. Déployer de l'infrastructure avec Github Actions352
8.1 L'écriture du workflow353
8.2 La configuration des variables357
9. Conclusion360
Chapitre 3-3
Passer la certification Terraform
1. Pourquoi passer la certification ?361
2. Les modalités de passage362
3. Les compétences et connaissances testées363
4. La préparation365
5. Les prérequis de l'examen366
5.1 Les prérequis de votre environnement366
5.2 Les prérequis de votre ordinateur367
6. Le jour J368
6.1 Connexion à la plateforme369
6.2 Vérification de votre identité et de l'environnement369
7. L'écran de certification372
8. Conseils pour le jour J373
9. Conseils pendant l'examen374
10. Après l'examen375
11. Conclusion377
Chapitre 3-4
Outils externes
1. La boîte à outils du développeur379
2. gitignore379
3. Git hooks380
4. tfenv382
5. tflint386
5.1 Installation386
5.2 Utilisation387
5.3 Configuration388
5.4 Dans une intégration continue389
6. terraform-docs390
6.1 Installation390
6.2 Utilisation391
6.3 Ajout de texte descriptif391
7. Checkov393
7.1 Installation394
7.2 Exécution394
7.3 Dans une intégration continue396
8. TerraGrunt400
8.1 Installation400
8.2 Utilisation401
9. Autres outils notables408
10. Conclusion409
Chapitre 3-5
Faire sa veille
1. Blogs et newsletter411
1.1 Terraform Blog411
1.2 HashiCorp newsletter412
1.3 Spacelift Blog412
1.4 Terraform Weekly413
2. Communautés et sites web414
2.1 Terraform Best Practices414
2.2 Discuss Terraform415
2.3 Awesome Terraform416
2.4 Dev. to417
2.5 Medium. com418
2.6 Reddit419
3. Vidéos420
3.1 Webinars HashiCorp420
3.2 YouTube - Weekly Dose of Terraform420
4. GitHub Issues & Release notes421
5. Conclusion423
Index425