Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés dans le Cloud
1. CLOU
D
NORD
Retrouvez toutes les informations et la billetterie Cloud Nord sur : www.cloudnord.fr
VIRTUEL
7 & 8 Octobre
2021
REX Terraform sur des projets non triviaux
Pourquoi Terraform n’est pas le bon
outil pour les déploiements
automatisés dans le Cloud ?
2. Qui suis-je
2
• Architecte Azure freelance (Dev, Sec, Ops, k8s,
Terraform …)
• Evangéliste Apache Cassandra™ pour Datastax
7. TFstate, à quoi ça sert ?
7
Code Terraform
(.tf, .tfvars)
Tfstate
(.tfstate)
Le cloud
8. TFstate, à quoi ça sert ?
8
Ce que je veux
(.tf, .tfvars)
Ce qui a été fait
(.tfstate)
La réalité
9. TFstate, désynchronisation
9
• Ressources modifiées en dehors de l’écosystème
Terraform
• modifications humaines via le portail AWS/Azure/GCP
• modifications déclenchées par des stratégies de gouvernance
(Azure Policies)
• modifications régulières pour raison de sécurité (rotation de mot
de passe, certificats TLS …)
15. TFstate, comment faire ?
15
• Ex: restauration d’une VM via Azure Recovery Vault Service
16. TFstate, comment faire ?
16
• Ex: restauration d’une VM via Azure Recovery Vault Service
17. TFstate, comment faire ?
17
• Ex: restauration d’une VM via Azure Recovery Vault Service
18. TFstate, comment faire ?
18
• Ex: restauration d’une VM via Azure Recovery Vault Service
à supprimer
à supprimer
restauré
restauré
19. TFstate, comment faire ?
19
• Ex: restauration d’une VM via Azure Recovery Vault Service
20. TFstate, comment faire ?
20
• Ex: restauration d’une VM via Azure Recovery Vault Service
21. TFstate, comment faire ?
21
• Ex: restauration d’une VM via Azure Recovery Vault Service
22. TFstate, comment faire ?
22
• Ex: restauration d’une VM via Azure Recovery Vault Service
23. TFstate, comment faire ?
23
• Ex: restauration d’une VM via Azure Recovery Vault Service
24. TFstate, comment faire ?
24
• Ex: restauration d’une VM via Azure Recovery Vault Service
25. TFstate, comment faire ?
25
• Bidouille avec le tfstate
• lister tous les disques attachés à une VM après une restauration
• parser le Tfstate pour trouver l’ancien disque correspondant
• "terraform state rm <adresse_tf_disque>"
• "terraform import <adresse_tf_disque>
<nouveau_disque_resource_id>"
• Programme en Python (SDK Azure Python) pour
automatiser
28. TFstate, migration après code refactoring
28
• Les ressources ont été ré-organisées dans des modules
séparés
• Un cauchemar pour migrer le tfstate d’une infra existante
29. Tfstate, problèmes de conception
29
• Forcer le triplet : tf, tfstate & Cloud
• Le tfstate est statique (mis à jour au prochain "terraform
apply/refresh") mais le Cloud est dynamique
• Synchronisation des états dans un système distribué
(Cloud) == problème difficile connu depuis 50 ans
30. Tfstate et le marché
30
• Non, "le marché" n’a pas toujours raison !
• Trop d’effets de mode, pas assez de réflexion
• L’industrie commence à se rendre compte des soucis
posés par le Tfstate
34. Choix de conception conscient
34
• Terraform, c’est un gros "client" en GO
• Avantages
• facile à installer
• auto-suffisant (pas de dépendances à tirer partout) (GOLang)
• temps de prise en main express
35. Choix de conception conscient
35
• Terraform, c’est un gros "client" en GO
• Inconvénients
• pas d’API (REST, gRPC, XML etc …) en 2021
• Interopérabilité ~ 0
36. Exemples de bidouilles pour l’interopérabilité
36
• En entrée
• templating de fichiers tfvars
• passage d’arguments via variables d’ENV !
37. Exemples de bidouilles pour l’interopérabilité
37
• En sortie
• "terraform output -json" puis parsing JSON du stdout !
• tâche Azure DevOps "terraform output"
38. Exemples de bidouilles pour l’interopérabilité
38
• En sortie
• écrire les outputs dans un storage (AWS S3, Azure blob storage)
mais quid des outputs "sensibles" ???
• exporter les outputs comme variables d’env avec une ressource
"local-file"
42. Définition
42
• Control-plane
• gouverne la création et la configuration de l’infrastructure Cloud
• configuration du "contenant"
• Data-plane
• gouverne la gestion des "données" d’une ressource Cloud
• configuration du "contenu"
44. Le problème des “secrets” gérés par TF
44
• Un grand classique
Je génère mes secrets par TF
Je pousse mes secrets dans
le key vault de l’équipe
45. Le problème des “secrets” gérés par TF
45
1. Secrets générés par TF et poussés dans un key vault
2. Au bout d’1 an, la sécu demande de faire tourner tous les
secrets
3. "terraform apply"
51. Lock-in technologique
51
• HashiCorp est une VC-backed startup
• RoI attendu avec un effet multiplicateur de x10/x100
• But == étendre l’empreinte de Terraform en dehors de son
périmètre d’origine (k8s par ex)
52. Lock-in technologique
52
• HashiCorp est une VC-backed startup
• RoI attendu avec un effet multiplicateur de x10/x100
• But == étendre l’empreinte de Terraform en dehors de son
périmètre d’origine (k8s par ex)
64. Modification “programmatique” du HCL ?
64
• Quelqu’un connaît un parseur HCL à jour ???
• Besoin réel:
• mise à jour automatisée de la configuration d’infra suite à une
rotation de certificat
66. DevOps
66
• Terraform pour éviter un maximum le "code" à l’ancienne
car
• code = maintenance
• maintenance = équipe devs dédiée
• équipe devs dédiée = pérennité des compétences
67. Gouvernance informatique
67
• Tentative de régler le souci du manque de compétence par
un sur-investissement sur l’outillage (Terraform)
• Modules Terraform "maison" avec gouvernance
implémentée via TF
• Portail Cloud avec droits de lecture seul pour les projets …
68. Les besoins pertinents
68
• Politique de sécurité
• Azure policies
• automation pour remédiation
• logs d’audits
• Contrôle de la facturation (FinOps)
• API billing
• quotas + alertes
69. La réalité
69
• Test de non-regs à l’échelle impossible vis à vis de l’infra
existante quand on fait du refactoring sur les modules TF
• "terraform validate" ne suffit pas ! Ignore le tfstate !!!
• En pratique, "terraform plan" à la main sur les infra
existantes de prod pour s’assurer que rien ne casse
71. Du bon niveau d’abstraction
71
• Ce que les gens font souvent: Terraform = orchestrateur
Terraform (orchestrateur)
azurerm
provider
null
provider
helm
provider
azurerm
provider
azurerm
provider
Cluster k8s Fichier ENV Install charts Random credentials
Postgresql
Credentials -> keyvault
72. Du bon niveau d’abstraction
72
• Ce qu’il faut faire
Vrai orchestrateur (Azure DevOps, Apache Airflow, code maison …)
Terraform Helm/KubeCtl Script
Cluster k8s Install charts Random credentials Postgresql
Terraform
Az Cli
Credentials -> keyvault
73. Quand utiliser Terraform ?
73
• Create & forget
• cycle de vie = création -> destruction
• jamais de mise à jour (au revoir tfstate !)
• Infrastructure à taille humaine
• opérations manuelles envisageables (correction de tfstate,
refactoring code TF)
74. Quand utiliser Terraform ?
74
• Périmètre restreint
• TF utilisé uniquement pour de l’infra
• jamais de data-plane
• pas d’update
• entrées fournies par l’orchestrateur
• sorties récupérées par l’orchestrateur
75. Quand utiliser Terraform ?
75
• Infra immutable + déploiement blue/green
• apply + destroy
• requiert une grande maturité