Vous hésitez entre AWS CloudFormation et Terraform ? Cet article est conçu pour éclairer votre choix et vous guider vers la solution la plus adaptée.
L’essor du Cloud Computing a profondément transformé l’univers du DevOps, devenant bien plus qu’une simple tendance. Cette technologie influence désormais notre approche du développement et de la maintenance applicative. Bien que les avantages du cloud soient indéniables pour les entreprises de toutes tailles, une contrainte subsiste : la nécessité de provisionner l’infrastructure manuellement.
En effet, il est souvent nécessaire d’interagir directement avec les consoles des fournisseurs de cloud pour spécifier les ressources souhaitées. Cette approche, bien que viable pour des besoins limités, peut devenir complexe et difficile à maintenir si plusieurs personnes modifient simultanément la configuration. La collaboration et le suivi des changements apportés à l’infrastructure cloud peuvent rapidement se transformer en casse-tête. C’est là qu’intervient l’Infrastructure as Code.
L’Infrastructure as Code (IaC) est un concept central dans le cloud computing. Il s’agit de gérer votre infrastructure informatique à travers du code. Au lieu d’une gestion manuelle via une console, l’IaC vous permet de définir votre infrastructure dans des fichiers de configuration qui seront ensuite utilisés pour provisionner votre environnement cloud. L’IaC offre des avantages considérables : cohérence, maintenance simplifiée et minimisation des erreurs humaines.
L’utilisation de l’IaC avec Amazon Web Services
AWS, leader mondial du cloud computing, propose une multitude de services, couvrant un large éventail de cas d’utilisation. Sa part de marché est deux fois supérieure à celle de son plus proche concurrent.
Lorsque vous débutez avec l’IaC sur AWS, votre choix se limite souvent à deux outils principaux : AWS CloudFormation et Terraform, un outil open source. La multitude de fonctionnalités offertes par ces deux solutions peut rendre le choix difficile. Cet article met en lumière les différences entre AWS CloudFormation et Terraform pour vous aider à déterminer l’outil le plus adapté à vos besoins spécifiques.
Terraform et AWS CloudFormation : Les distinctions
Modularité
La modularité est un critère important dans le choix d’un outil IaC, particulièrement pour les grandes organisations.
CloudFormation
CloudFormation ne propose pas de prise en charge native des modules. L’approche préconisée est celle des piles imbriquées.
Imaginez que vous souhaitiez standardiser le provisionnement des compartiments S3 dans votre organisation. Vous pouvez créer un modèle CloudFormation dédié à cette tâche. Ensuite, chaque utilisateur souhaitant créer un compartiment S3 utilisera ce modèle comme pile imbriquée pour garantir la conformité.
Il existe également AWS Service Catalog, un service moins connu, mais qui peut aider à la modularité. Ce service est conçu pour limiter l’utilisation des services AWS afin de répondre à des exigences de conformité, de sécurité, de coût ou de performance. Service Catalog utilise les modèles CloudFormation en interne.
Pour illustrer cela, considérons les compartiments S3, dont une mauvaise utilisation pourrait mettre en péril vos données. Reprenons l’exemple de la standardisation de l’utilisation de S3. Vous pouvez opter pour un modèle de pile imbriquée, utilisable dans d’autres piles CloudFormation.
Si vous souhaitez éviter l’utilisation directe de piles imbriquées, vous pouvez utiliser AWS Service Catalog. Ce service permettra aux utilisateurs d’employer ce modèle standard via l’interface de la console, avec la possibilité de personnaliser certains paramètres. Cela vous donne un contrôle précis sur le provisionnement de l’infrastructure et évite des situations non souhaitées.
Terraform
Terraform offre une prise en charge native des modules, permettant de créer des configurations standard et de les réutiliser dans d’autres configurations Terraform.
En tant qu’outil open source, Terraform donne accès à des modules prédéfinis sur le registre Terraform. Vous avez également la possibilité de créer vos propres modules et de les héberger sur un registre privé.
Personnellement, si la modularité est un critère important, je choisirais Terraform plutôt que CloudFormation. L’utilisation de piles imbriquées dans CloudFormation peut être plus complexe que l’utilisation de modules dans Terraform, notamment en raison de la complexité de la transmission de données entre les modèles.
Il n’existe pas de moyen standard de partager des modèles CloudFormation. Bien qu’AWS Service Catalog soit une solution pour appliquer des règles lors de la création d’infrastructure, il nécessite toujours une intervention manuelle via la console pour spécifier des paramètres. Le monde du code est un pilier central.
Terraform, en revanche, propose une méthodologie définie pour la création, la gestion et le partage de modules. Le registre des modules Terraform détaille les exigences et permet une intégration simple dans vos fichiers Terraform.
Contrôle et gouvernance de l’infrastructure
Si vous souhaitez limiter les ressources que vos employés peuvent créer dans vos comptes AWS, AWS CloudFormation et Terraform offrent tous deux des solutions.
CloudFormation ne propose pas directement de contrôle sur l’utilisation des modèles, mais vous pouvez utiliser les politiques AWS IAM pour limiter l’accès des utilisateurs aux modèles standard. Dans l’exemple du compartiment S3, vous pourriez interdire toutes les actions de création de S3, tout en autorisant la création de compartiments via AWS Service Catalog ou des piles imbriquées.
Terraform, quant à lui, permet de contrôler les ressources créées par les utilisateurs grâce à l’outil de code Sentinel. Sentinel vous permet d’appliquer des politiques basées sur la logique pour autoriser ou refuser les actions des utilisateurs. Par exemple, vous pouvez interdire la création directe de compartiments S3, et n’autoriser la création que par un module standard.
Gestion de l’état
AWS CloudFormation et Terraform doivent tous deux assurer le suivi des ressources qu’ils gèrent.
Terraform sauvegarde l’état de votre infrastructure dans un fichier d’état, local par défaut, mais stockable sur des backends distants comme S3. Cela permet à plusieurs utilisateurs de modifier la même infrastructure.
CloudFormation, en tant que service géré, gère l’état en arrière-plan et ne maintient pas de fichier d’état accessible.
AWS CloudFormation et Terraform vous permettent de vérifier les modifications qui seront apportées à votre infrastructure. Terraform utilise la commande « terraform plan » et CloudFormation utilise les ensembles de modifications pour la prévisualisation des changements.
Langue
Terraform utilise HCL, le langage de configuration d’HashiCorp, qui est proche de JSON, mais avec des fonctionnalités supplémentaires.
Les modèles CloudFormation sont écrits en YAML ou en JSON.
Journalisation et restaurations
AWS CloudFormation et Terraform disposent tous deux de bonnes capacités de journalisation. Mon expérience montre que les erreurs et les problèmes sont généralement faciles à identifier et à résoudre.
CloudFormation annule automatiquement les modifications en cas d’échec d’une mise à jour de pile. C’est une fonctionnalité utile qui peut être désactivée pour le débogage.
Terraform n’annule pas automatiquement les modifications. Cependant, la commande « terraform destroy » permet de supprimer une configuration incomplète. Vous pouvez ensuite relancer l’exécution.
Portée
Terraform ne se limite pas au cloud AWS, il prend en charge d’autres fournisseurs et services cloud. C’est un facteur déterminant si vous envisagez une approche multi-cloud.
CloudFormation est un outil puissant mais limité à l’écosystème AWS. En optant pour Terraform, vous pouvez déployer votre infrastructure et votre application sur plusieurs plateformes cloud, améliorant ainsi la disponibilité et la robustesse de votre application.
Prise en charge des fonctionnalités
Les nouvelles fonctionnalités AWS sont souvent prises en charge plus rapidement par CloudFormation que par Terraform. Les deux outils couvrent la plupart des services et fonctionnalités, mais cette légère différence pourrait être un inconvénient mineur de Terraform.
Une solution existe : vous pouvez intégrer une pile CloudFormation directement dans votre code Terraform si nécessaire.
Soutien technique
Les plans de support technique payants d’AWS couvrent également le support CloudFormation.
HashiCorp propose également des plans de support technique pour Terraform.
Conclusion
AWS CloudFormation et Terraform sont deux outils puissants et matures. Les différences décrites dans cet article vous aideront à faire un choix éclairé en fonction de vos besoins. Si vous prévoyez une utilisation multi-cloud, ou si vous en utilisez déjà, Terraform est le choix idéal. Si votre besoin se limite à AWS, CloudFormation et Terraform sont deux excellentes options.
Si vous souhaitez apprendre Terraform, voici des cours en ligne à consulter.