Skip to content
Infrastructure as Code avec AWS CDK : une approche moderne du provisionnement cloud
← ← Retour aux Réflexions Cloud

Infrastructure as Code avec AWS CDK : une approche moderne du provisionnement cloud

Gerer manuellement une infrastructure cloud est devenu un anti-pattern reconnu. L'Infrastructure as Code (IaC) a resolu bon nombre de problemes lies a la coherence et a la reproductibilite, mais la premiere generation d'outils -- notamment AWS CloudFormation avec ses templates YAML verbeux -- a introduit ses propres frictions. Le AWS Cloud Development Kit (CDK) represente l'etape suivante : definir l'infrastructure avec de vrais langages de programmation plutot qu'avec des fichiers de configuration.

Cet article explore pourquoi CDK est devenu le choix privilegie des equipes qui construisent sur AWS, comment demarrer, et comment il se compare aux alternatives comme Terraform.

Pourquoi le YAML CloudFormation montre ses limites

CloudFormation a ete une avancee majeure lors de son lancement. Declarer son infrastructure dans un template et laisser AWS gerer le provisionnement representait un progres considerable. Mais quiconque a maintenu un projet CloudFormation de taille moyenne connait les points de friction.

Les templates YAML deviennent rapidement ingerables. Une application moderement complexe peut necessiter des milliers de lignes de configuration. Il n'y a pas de support natif pour les boucles, les conditions sont maladroites, et la reutilisabilite repose sur des nested stacks ou des macros personnalisees qui ajoutent de la complexite. Le refactoring est risque -- une indentation mal placee ou une faute de frappe dans une propriete de ressource peut provoquer des echecs de deploiement difficiles a diagnostiquer. Le support IDE est limite : au mieux du syntax highlighting, mais pas d'autocompletion pour les proprietes des ressources, pas de verification de types, pas de validation a la compilation.

CDK resout tous ces problemes en permettant d'ecrire les definitions d'infrastructure en TypeScript, Python, Java, C# ou Go. On dispose de toute la puissance d'un langage de programmation : variables, fonctions, classes, heritage, boucles et conditions. L'IDE fournit l'autocompletion, la documentation en ligne et la securite de typage. Les erreurs sont detectees avant le deploiement, pas pendant.

Concepts fondamentaux : Constructs, Stacks et Apps

CDK organise l'infrastructure autour de trois abstractions cles.

Les Constructs sont les briques de base. Ils representent une ou plusieurs ressources AWS configurees ensemble. CDK propose trois niveaux de constructs. Les constructs L1 sont des mappings directs vers les ressources CloudFormation -- ils offrent un controle total mais exigent la configuration de chaque propriete. Les constructs L2 sont des abstractions de niveau superieur avec des valeurs par defaut judicieuses. Par exemple, un construct L2 pour un bucket S3 configure automatiquement le chiffrement et bloque l'acces public, sauf indication contraire explicite. Les constructs L3, parfois appeles patterns, combinent plusieurs ressources en architectures courantes, comme un service Fargate avec load balancer.

Les Stacks sont l'unite de deploiement, equivalents a un stack CloudFormation. Chaque stack se traduit en un seul template CloudFormation lors de la synthese. On peut definir plusieurs stacks dans une meme application CDK et gerer les dependances entre eux.

Les Apps constituent la racine de l'arbre de constructs. Une app contient un ou plusieurs stacks et sert de point d'entree pour la CLI CDK.

Demarrer avec CDK

La mise en place d'un projet CDK est simple. Il faut avoir Node.js installe (meme si l'on prevoit d'ecrire en Python ou dans un autre langage, la CLI CDK fonctionne sur Node). On installe la CLI CDK globalement, puis on initialise un nouveau projet avec cdk init en choisissant le langage et le template souhaites.

Le workflow typique suit un cycle previsible. On ecrit les definitions d'infrastructure dans le code, on execute cdk synth pour generer le template CloudFormation, on examine le resultat, puis on execute cdk deploy pour provisionner les ressources. La commande cdk diff est particulierement precieuse -- elle montre exactement quels changements seront appliques avant de s'engager dans un deploiement.

En TypeScript, definir l'infrastructure se fait naturellement. On cree une classe qui etend Stack, on instancie des constructs dans le constructeur et on configure les proprietes via des objets types. Si l'on tente de passer une propriete invalide, le compilateur la detecte immediatement. Si l'on a besoin de creer dix ressources similaires avec de legeres variations, on ecrit une boucle. Si l'on souhaite partager des configurations communes entre projets, on extrait un construct dans une bibliotheque partagee et on le publie comme paquet npm.

CDK vs. Terraform : choisir le bon outil

Terraform est l'outil IaC le plus largement adopte, et a juste titre. Il supporte plusieurs fournisseurs cloud, dispose d'un ecosysteme massif de modules communautaires, et sa gestion d'etat est bien comprise. La comparaison avec CDK demande de la nuance.

CDK est specifique a AWS. Si l'infrastructure s'etend sur plusieurs fournisseurs cloud, Terraform (ou CDK for Terraform, cdktf) est probablement un meilleur choix. CDK excelle quand les workloads sont principalement ou exclusivement sur AWS. Il s'integre profondement avec les services AWS, et les nouvelles fonctionnalites sont souvent disponibles dans CDK des le jour de leur lancement.

La difference de langage compte plus qu'il n'y parait. Le HCL de Terraform est concu specifiquement pour la configuration. Il est lisible et coherent, mais il manque de l'expressivite d'un langage generaliste. La logique complexe en HCL mene souvent a des contournements alambiques. CDK permet d'utiliser le meme langage que celui de l'application, ce qui reduit le changement de contexte et facilite la contribution des developpeurs applicatifs au code d'infrastructure.

La gestion d'etat est un autre facteur de differenciation. Terraform maintient son propre fichier d'etat qui doit etre stocke de maniere securisee et verrouille pendant les operations. CDK s'appuie sur la gestion d'etat integree de CloudFormation, ce qui elimine toute une categorie de preoccupations operationnelles.

En revanche, le workflow plan/apply de Terraform est plus mature que le cycle diff/deploy de CDK. L'ecosysteme de providers Terraform couvre des services et plateformes que CDK ne peut tout simplement pas atteindre. Et les equipes ayant une expertise Terraform etablie peuvent trouver le cout de migration difficile a justifier.

Conseils pratiques pour la migration

Si l'on envisage de passer de CloudFormation YAML ou Terraform a CDK, une approche progressive fonctionne le mieux.

Commencer par les nouveaux projets. Ne pas tenter de reecrire toute l'infrastructure d'un coup. Choisir un nouveau service ou microservice et construire son infrastructure en CDK en partant de zero. Cela permet a l'equipe d'apprendre l'outil sans la pression de migrer des workloads de production.

Utiliser cdk import pour placer des ressources existantes sous la gestion de CDK sans les recreer. Cette fonctionnalite permet d'adopter CDK de maniere incrementale, ressource par ressource, sans interruption de service.

Investir tot dans des bibliotheques de constructs partagees. L'une des plus grandes forces de CDK est la reutilisabilite. Si l'organisation a des standards pour la configuration des bases de donnees, des files d'attente ou des API, il faut encoder ces standards dans des constructs personnalises L2 ou L3. Les equipes peuvent ensuite utiliser ces constructs et obtenir une infrastructure conforme par defaut.

Ecrire des tests pour l'infrastructure. CDK supporte le snapshot testing (pour detecter les changements non intentionnels) et le assertion testing granulaire (pour verifier des configurations specifiques de ressources). C'est quasiment impossible avec des templates YAML bruts et difficile avec Terraform.

Mettre en place un pipeline CI/CD pour les deploiements CDK. Utiliser cdk diff dans les verifications de pull request pour que les reviewers puissent voir les changements d'infrastructure avant le merge. Deployer via un pipeline, pas depuis les postes des developpeurs.

Quand utiliser CDK

CDK est le choix le plus pertinent quand l'equipe construit principalement sur AWS, valorise la securite de typage et l'ergonomie pour les developpeurs, et souhaite exploiter le meme langage de programmation pour le code applicatif et l'infrastructure. Il est particulierement adapte aux organisations qui veulent imposer des standards d'infrastructure a travers des bibliotheques de constructs partagees.

Il est moins adapte aux environnements multi-cloud, aux equipes profondement investies dans l'ecosysteme Terraform, ou aux projets simples ou quelques lignes de YAML suffiraient.

L'Infrastructure as Code n'est plus optionnelle pour les operations cloud serieuses. CDK la rend plus accessible, plus maintenable et plus puissante que les alternatives qui l'ont precedee. Pour ceux qui ne l'ont pas encore explore, c'est le moment ideal pour commencer.