Infrastructure en tant que code : Terraform vs Pulumi
Cliquer sur des boutons dans la console AWS est une dette technique. Comment gérer votre infrastructure Headless à l'aide de code, de fichiers d'état et de Git.
Vous configurez votre compartiment AWS S3 manuellement. Vous avez activé CORS manuellement. 6 mois plus tard, vous devez lancer un environnement de staging. Vous souvenez-vous exactement des cases que vous avez cochées ? Non. Infrastructure as Code (IaC) résout ce problème. Nous définissons nos serveurs, bases de données et enregistrements DNS dans des fichiers texte. Nous les confions à Git. Nous les appliquons de manière déterministe.
Pourquoi Maison Code en parle
Chez Maison Code Paris, nous agissons comme la conscience architecturale de nos clients. Nous héritons souvent de stacks “modernes” construites sans compréhension fondamentale de l’échelle.
Nous abordons ce sujet car il représente un point de pivot critique dans la maturité de l’ingénierie. Une mise en œuvre correcte différencie un MVP fragile d’une plateforme résiliente de niveau entreprise.
Le modèle déclaratif (Terraform)
Terraform est la norme de l’industrie. Il utilise HCL (HashiCorp Configuration Language). Vous décrivez l’État final. Terraform trouve comment y arriver.
#main.tf
fournisseur "aws" {
région = "us-east-1"
}
ressource "aws_s3_bucket" "actifs" {
bucket = "maison-code-assets-prod"
acl = "lecture publique"
cors_rule {
autorisé_headers = ["*"]
méthodes_autorisées = ["OBTENIR"]
autorisé_origines = ["https://maisoncode.paris"]
}
}
L’exécution de « terraform apply » crée le bucket.
Si je remplace allowed_methods par ["GET", "HEAD"] et que j’exécute à nouveau apply, Terraform met à jour l’API du bucket. Il active CI/CD pour l’infrastructure.
Le modèle impératif (Pulumi)
Terraform est génial, mais HCL est un langage dédié. Pulumi vous permet d’écrire une infrastructure en TypeScript. Cela vous donne des boucles, des fonctions et une logique distincte.
// index.ts
importer * en tant qu'aws depuis "@pulumi/aws" ;
const bucket = new aws.s3.Bucket("actifs", {
acl : "lecture publique",
règles cors : [{
En-têtes autorisés : ["*"],
Méthodes autorisées : ["GET"],
Origines autorisées : ["https://maisoncode.paris"],
}],
});
export const bucketName = bucket.id ;
État de gestion
Les outils IaC stockent « l’état » du monde dans un fichier (terraform.tfstate).
Ce fichier mappe votre code au monde réel (l’ID de ressource AWS).
Danger : Ne stockez jamais l’état localement. Si votre ordinateur portable tombe en panne, vous perdez l’accès aux infrarouges.
Stockez l’état dans un backend distant (Seau S3 avec verrouillage ou Terraform Cloud).
Détection de dérive
La « dérive » se produit lorsqu’un développeur junior se connecte à la console AWS et supprime manuellement une règle de pare-feu pour « corriger un bug ». Le code indique que le pare-feu est activé. La réalité dit que le pare-feu est désactivé. Nous exécutons une tâche cron quotidienne de « plan terraform ». S’il détecte des changements (Drift), il nous alerte sur Slack. “Avertissement : dérive d’infrastructure détectée sur le groupe de sécurité sg-123.”
Infrastructure immuable
Autrefois, nous nous connections en SSH aux serveurs pour mettre à jour PHP. Dans le monde IaC, nous traitons les serveurs comme du bétail, et non comme des animaux de compagnie. Pour mettre à jour l’application, nous détruisons l’ancien serveur et en créons un nouveau avec la nouvelle image. Cela garantit qu’aucune « dérive de configuration » ou aucun artefact caché ne s’accumule au fil des années.
Stratégie multi-cloud
Shopify est sur Google Cloud. Vos images sont sur AWS S3. Vos fonctions Edge sont sur Cloudflare. IaC les gère tous dans un seul fichier. Vous pouvez transmettre la sortie de l’un (URL AWS CloudFront) comme entrée à un autre (enregistrement DNS Cloudflare).
9. Gestion des secrets : pas de mot de passe dans Git
Vous devez transmettre le mot de passe de la base de données à la fonction Lambda.
JAMAIS écrivez-le dans main.tf.
JAMAIS commettre .env.
Solution : AWS Secrets Manager + Sources de données Terraform.
- Créez un secret dans la console AWS (ou via CLI).
- Terraform y fait référence :
data.aws_secretsmanager_secret_version.db_pass.secret_string. - Terraform l’injecte en tant que variable d’environnement dans Lambda au moment du déploiement. Le secret existe uniquement dans la RAM lors du déploiement. Il ne touche jamais le disque.
10. Politique en tant que code (Sentinel / OPA)
Comment empêcher un développeur junior de créer une instance GPU à 5 000 €/mois ?
Politique en tant que code.
Nous utilisons Open Policy Agent (OPA) pour analyser le plan Terraform avant de l’appliquer.
refuser si instance_type n'est pas dans ["t3.micro", "t3.small"].
Si le code enfreint la stratégie, le pipeline CI échoue.
Il s’agit de « garde-corps, pas de gardiens ».
11. Infrastructure de déploiement bleu-vert
IaC nous permet de créer un environnement en double.
- Live est “Vert” (v1).
- Terraform lance “Blue” (v2).
- Nous effectuons des tests E2E sur Blue.
- Terraform met à jour l’équilibreur de charge (ALB) pour qu’il pointe vers Blue.
- Si des alertes se déclenchent, Terraform ramène instantanément l’ALB au vert.
- Une fois stable, Terraform détruit Green. Cela offre une sécurité que les déploiements manuels ne peuvent jamais offrir.
12. Rotation des informations d’identification de la base de données
La conformité indique « Rotation des mots de passe tous les 30 jours ».
Les humains détestent ça.
Terraform adore ça.
Nous configurons aws_secretsmanager_secret_rotation.
Il fait tourner un Lambda qui :
- Connectez-vous à RDS.
- Créez l’utilisateur B.
- Mettre à jour le secret.
- Mettez à jour l’application.
- Supprimez l’utilisateur A. Zéro temps d’arrêt. Zéro implication humaine.
14. Reprise après sinistre (DR) sous forme de code
Et si « us-east-1 » tombait en panne ? (Ça arrive).
Avec IaC, DR est un script.
terraform apply -var="region=us-west-2".
En 15 minutes, toute votre infrastructure (Load Balancers, EC2, Databases) est répliquée à l’autre bout du pays.
Nous le vérifions chaque trimestre en organisant des « Game Days ».
Nous vérifions que nous pouvons faire tourner la pile à partir de zéro dans un compte AWS vide.
Si vous cliquez sur les boutons de la console, la DR est impossible. Vous serez en panne pendant des jours.
Avec IaC, vous êtes en panne pendant quelques minutes.
15. Pourquoi Maison Code ?
Chez Maison Code, nous croyons que L’infrastructure est un produit. Nous n’embauchons pas d‘“administrateurs système”. Nous embauchons des ingénieurs DevOps. Nous construisons une infrastructure auto-réparatrice, auto-évolutive et immuable. Nous vous remettons les clés (le Git Repo), pas une boîte noire. Nous permettons à votre équipe de déployer 10 fois par jour sans craindre de casser le réseau. Parce que la vitesse nécessite la sécurité.
16. Conclusion
L’Infrastructure as Code fait la différence entre un “Hobby Project” et une “Enterprise Platform”. Cela transforme les « Ops » en génie logiciel. Il vous offre auditabilité, rapidité et sécurité. Arrêtez de cliquer sur les boutons standard. Commencez à écrire du code.
Vous en avez assez de la configuration manuelle du serveur ?
Nous migrons l’infrastructure manuelle vers des pipelines Terraform/Pulumi robustes et vérifiables. Engagez nos Architectes.