AWS CloudFormation et Terraform — pas sûr de lequel choisir ? Cet article vous aidera à prendre une décision éclairée.
Le cloud computing a révolutionné le monde du DevOps. Ce n’est plus un mot à la mode ; il est là pour changer la façon dont nous développons et maintenons nos applications. Bien qu’il existe d’innombrables raisons d’utiliser le cloud computing pour toutes les tailles d’entreprises, il y a une légère limitation : vous devez provisionner votre infrastructure manuellement.
Vous devez vous rendre sur les consoles de vos fournisseurs de cloud et leur dire exactement ce que vous voulez. Cela fonctionne bien pour des cas d’utilisation simples, mais que se passe-t-il si différentes personnes apportent des modifications de configuration dans la console ? Vous pourriez vous retrouver avec une infrastructure super compliquée qui ne fera que devenir de plus en plus difficile à maintenir. Il n’existe pas de moyen efficace de collaborer ou de suivre les modifications de l’infrastructure cloud. Eh bien, il y a l’Infrastructure as Code.
L’Infrastructure as Code (IaC) est un terme à la mode dans le cloud computing. C’est le processus de gestion de votre IT IaC. Oui, c’est exact. Au lieu d’aller sur la console et de tout faire manuellement, l’IaC vous permet d’écrire des fichiers de configuration pour provisionner votre infrastructure cloud. L’IaC nous offre des avantages tels que la cohérence, une maintenance facile et rapide, et aucune marge pour les erreurs humaines.
Utiliser l’IaC avec Amazon Web Services
AWS est le principal service de cloud computing au monde, avec le double de la part de marché du prochain fournisseur de cloud. Il propose plus de 200 services pouvant répondre à des centaines voire des milliers de cas d’utilisation.
Lorsque vous commencez à utiliser l’IAC avec AWS, vous avez souvent le choix entre AWS CloudFormation et l’outil open-source Terraform. Si vous souhaitez choisir entre les deux, comprendre la multitude de fonctionnalités offertes par ces outils peut être écrasant. Dans cet article, nous examinerons les différences entre AWS CloudFormation et Terraform pour vous aider à décider quel outil convient le mieux à vos besoins.
Terraform vs AWS CloudFormation : Différences
Modularité
En utilisant l’IAC dans de grandes organisations, la modularité peut être un facteur significatif dans le choix du bon outil.
CloudFormation
CloudFormation n’a pas de prise en charge native des modules. Au lieu de cela, il vous permet d’utiliser quelque chose appelé empilements imbriqués en tant que modules.
Par exemple, vous pouvez créer un modèle standard CloudFormation pour la provision d’un bucket S3 dans votre organisation. Lorsque les utilisateurs finaux souhaitent créer un bucket S3, ils peuvent utiliser ce modèle CloudFormation comme une pile imbriquée pour provisionner le bucket S3 standard.
Il existe également un service AWS, le Catalogue de services AWS, qui peut aider à la modularité pour CloudFormation. Le Catalogue de services AWS est conçu pour les organisations qui ont besoin de limiter la portée des services AWS pour répondre aux exigences de conformité, de sécurité, de coût ou de performance. Il utilise des modèles CloudFormation en arrière-plan.
Essayons de comprendre cela rapidement avec un exemple. Si elle n’est pas utilisée correctement, les buckets S3 peuvent rapidement devenir catastrophiques pour vos données confidentielles. Prenons le même exemple. Vous souhaitez avoir une manière standard d’utiliser S3 dans votre organisation. La première option est de créer le modèle de pile imbriquée, qui peut être utilisé dans d’autres piles CloudFormation et qui est tout aussi efficace.
Alternativement, vous pouvez utiliser le Catalogue de services AWS, qui permet aux utilisateurs d’utiliser ce modèle standard depuis l’interface utilisateur de la console et de spécifier certains paramètres pour de légères personnalisations. Cela vous permettra de contrôler la façon dont l’infrastructure est provisionnée dans vos comptes AWS et d’éviter tout scénario indésirable.
L’utilisation des piles imbriquées et du Catalogue de services AWS par CloudFormation peut également soutenir des configurations standard dans de grandes organisations, bien que cela puisse nécessiter une configuration plus manuelle.
Terraform
Terraform prend en charge nativement les modules. Il vous permet de créer des configurations standard similaires à celles de CloudFormation AWS et de les utiliser dans d’autres configurations Terraform.
Depuis que Terraform est un outil open-source, vous pouvez également trouver et utiliser des modules open-source préfabriqués dans le Registre Terraform. Vous pouvez également créer vos propres modules avec vos propres configurations et les héberger sur un registre de modules privé.
Le support natif de Terraform pour les modules offre une approche simple de la modularité. Cependant, la gestion des modules au sein d’une grande équipe peut nécessiter une gouvernance supplémentaire pour garantir une utilisation appropriée.
L’utilisation d’une pile imbriquée dans CloudFormation n’est pas aussi simple que l’utilisation de modules dans Terraform. Le principal facteur est que le passage de données d’un modèle CFN à la pile imbriquée peut être compliqué.
CloudFormation ne dispose pas d’un référentiel centralisé pour le partage de modèles. Le AWS Service Catalog vous permet de gérer ce processus, mais applique principalement des règles via la console. Bien que les modèles CloudFormation puissent encapsuler des tâches complexes, les utilisateurs devraient encore spécifier des paramètres lors de la création de ressources.
En revanche, Terraform a une méthode définie pour créer, maintenir et partager des modules. Vous pouvez voir les exigences exactes des modules dans le Registre des Modules Terraform et les utiliser facilement dans vos fichiers Terraform.
Contrôle et Gouvernance sur l’Infrastructure
Si vous souhaitez limiter les ressources que vos collaborateurs peuvent créer dans vos comptes AWS, AWS CloudFormation et Terraform vous offrent les moyens de le faire.
CloudFormation
CloudFormation offre un contrôle via les politiques IAM, vous permettant de gérer l’accès des utilisateurs aux ressources. Cependant, ce contrôle est spécifique à AWS, ce qui peut être idéal si votre infrastructure est entièrement centrée sur AWS.
Dans notre exemple de bucket S3, vous voudrez peut-être limiter toutes les autorisations de création « S3 » pour les utilisateurs et ne leur permettre que de créer des buckets S3 à partir du Catalogue de Services AWS ou de Stacks Imbriqués.
Terraform
Terraform vous permet de contrôler quelles ressources vos utilisateurs peuvent créer en utilisant un outil de politique en tant que code, Sentinel. Sentinel vous permettra d’appliquer des politiques logiques fines pour autoriser ou refuser des actions utilisateur via Terraform. Par exemple, vous pouvez refuser toutes les ressources qui créent des buckets S3 et autoriser seulement les utilisateurs à créer des buckets S3 à partir d’un module standard.
Gestion de l’État
AWS CloudFormation et Terraform doivent suivre les ressources qu’ils gèrent.
Terraform
Terraform stocke l’état de votre infrastructure dans un fichier d’état. Ce fichier est stocké localement par défaut; cependant, vous pouvez le stocker sur des backends distants comme S3 et permettre à plusieurs utilisateurs d’apporter des modifications au même ensemble d’infrastructures.
CloudFormation
CloudFormation gère l’état en interne en arrière-plan, de sorte que les utilisateurs n’ont pas besoin de se soucier de gérer manuellement un fichier d’état. C’est idéal pour ceux qui veulent un service entièrement géré.
À la fois AWS CloudFormation et Terraform vous permettent de vérifier les modifications qui seront apportées à votre infrastructure. Dans Terraform, vous pouvez exécuter la commande « terraform plan » pour voir comment Terraform prévoit d’appliquer vos modifications de configuration. Dans CloudFormation, les utilisateurs peuvent voir ces informations via les ensembles de modifications.
Langage
Terraform
Terraform utilise le HashiCorp Configuration Language, HCL, un langage créé par HashiCorp. Il est très similaire à JSON, avec des fonctionnalités et des capacités supplémentaires intégrées.
CloudFormation
Les modèles CloudFormation sont écrits en formats YAML ou JSON.
Journalisation et Rollbacks
À la fois AWS CloudFormation et Terraform ont de bonnes capacités de journalisation. D’après mon expérience, les erreurs et les problèmes ont été clairs (pour la plupart).
CloudFormation
Par défaut, CloudFormation annule toutes vos modifications en cas d’échec d’un changement de pile. C’est une bonne fonctionnalité, mais elle peut être désactivée à des fins de débogage.
Terraform
Terraform ne reviendra pas automatiquement en arrière sur vos modifications s’il échoue. Ce n’est pas un problème, car vous pouvez toujours exécuter la commande Terraform destroy pour supprimer la configuration à moitié provisionnée et redémarrer à nouveau une exécution Terraform.
Portée
Terraform
Le support multi-cloud de Terraform vous permet de déployer des infrastructures sur AWS, Azure, Google Cloud et d’autres plateformes et offre de la flexibilité si vous travaillez dans un environnement multi-cloud.
CloudFormation
CloudFormation est étroitement intégré à AWS, ce qui en fait une bonne option pour les infrastructures exclusivement AWS mais limité pour les configurations multi-cloud.
Support des fonctionnalités
CloudFormation
AWS CloudFormation reçoit généralement les mises à jour en premier pour les nouveaux services et fonctionnalités, en raison de son intégration étroite avec AWS.
Terraform
Dans les cas où Terraform manque de certaines fonctionnalités AWS, vous pouvez intégrer directement des stacks CloudFormation dans votre code Terraform comme solution de contournement.
Support technique
CloudFormation
Le plan de support technique payant d’AWS couvre également le support CloudFormation.
Terraform
HashiCorp propose également des plans payants pour le support technique sur Terraform.
Conclusion
AWS CloudFormation et Terraform sont tous deux des outils robustes et pleinement développés, chacun avec ses propres avantages. Les différences ci-dessus peuvent vous aider à déterminer quel outil correspond le mieux à vos besoins. Si vous prévoyez d’utiliser plusieurs plateformes cloud, Terraform offre un support multi-cloud, tandis qu’AWS CloudFormation est un excellent choix pour les environnements spécifiques à AWS. En fin de compte, les deux outils sont équivalents et peuvent gérer efficacement l’IaC. Le bon choix dépend de vos exigences, que vous vous concentriez uniquement sur AWS ou que vous travailliez avec plusieurs fournisseurs de cloud.
Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform