Comprendre les outils IaC : Cloudformation vs Terraform

AWS CloudFormation et Terraform – vous ne savez pas lequel choisir ? Cet article vous aidera à prendre une décision intelligente.

Le Cloud Computing a révolutionné le monde du DevOps. Ce n’est plus seulement un mot à la mode; il est là et il est là pour changer la façon dont nous développons et maintenons nos applications. Bien qu’il existe d’innombrables raisons pour lesquelles vous devriez utiliser le cloud computing pour toutes les échelles d’entreprises, il existe 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 les petits cas d’utilisation, mais que se passe-t-il si différentes personnes modifient la configuration de la console. Vous pourriez vous retrouver avec une infrastructure super compliquée qui deviendra de plus en plus difficile à maintenir. Il n’existe aucun moyen efficace de collaborer ou de suivre les modifications apportées à l’infrastructure dans le cloud. Eh bien, en fait, il y en a. L’infrastructure en tant que code.

L’infrastructure en tant que code est un terme très populaire dans le cloud computing. C’est le processus de gestion de votre infrastructure informatique à l’aide de code. Oui, c’est correcte. Au lieu d’aller sur la console et de tout faire manuellement ; L’infrastructure en tant que code, alias IAAC ou IAC, vous permet d’écrire des fichiers de configuration, qui provisionnent ensuite votre infrastructure cloud. IAC nous offre des avantages tels que la cohérence, une maintenance facile et rapide et aucune place pour les erreurs humaines.

Utilisation d’IAC avec Amazon Web Services

AWS est le premier service de cloud computing au monde, avec une part de marché deux fois supérieure à celle du fournisseur de cloud suivant. Il existe plus de 200 services sur AWS qui peuvent répondre à des centaines et des milliers de cas d’utilisation.

Lorsque vous commencez à utiliser IAC avec AWS, vous limitez souvent vos choix aux AWS CloudFormation et l’outil open-source, Terraforme. Lorsque vous essayez de faire un choix entre les deux, comprendre la multitude de fonctionnalités offertes par les deux outils peut être assez écrasant. Dans cet article, nous examinerons les différences entre AWS CloudFormation et Terraform pour vous aider à choisir l’outil le mieux adapté à vos besoins.

Terraform et AWS CloudFormation : différences

Modularité

Lors de l’utilisation d’IAC dans de grandes organisations, la modularité peut être un facteur important pour choisir le bon outil.

CloudFormation

CloudFormation n’a pas de support natif pour les modules. Il vous permet d’utiliser ce qu’on appelle des piles imbriquées en tant que modules.

Par exemple, vous pouvez avoir une configuration standard de la façon dont vous souhaitez provisionner un compartiment S3 dans votre organisation. Ainsi, vous créez un modèle CloudFormation standard qui crée des compartiments S3. Désormais, lorsqu’un utilisateur final souhaite créer le compartiment S3, il peut utiliser ce modèle CloudFormation en tant que pile imbriquée et créer un compartiment S3 standard.

Il existe également un service moins connu d’AWS, le Catalogue de services AWS qui peuvent vous aider avec la modularité de votre AWS CloudFormation. Service Catalog est un service AWS conçu spécifiquement pour les organisations qui souhaitent limiter la portée des services AWS pour répondre aux exigences de conformité, de sécurité, de coût ou de performances. Et devine quoi? AWS Service Catalog utilise des modèles CloudFormation dans le backend.

Comprenons cela rapidement avec un exemple. Les compartiments S3, s’ils ne sont pas utilisés correctement, peuvent rapidement être catastrophiques pour vos données confidentielles. Prenons le même exemple, vous voulez avoir une manière standard d’utiliser S3 dans votre organisation. La première option consiste à créer le modèle de pile imbriqué, qui peut être utilisé dans d’autres piles CloudFormation et est tout aussi bon.

Si vous ne souhaitez pas que les utilisateurs aient à utiliser ce modèle standard en tant que pile imbriquée, vous pouvez utiliser AWS Service Catalog. Service Catalog permettra aux utilisateurs d’utiliser ce modèle standard à partir de 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 manière dont l’infrastructure est provisionnée dans vos comptes AWS et d’éviter tout scénario indésirable.

Terraforme

Terraform a un support natif pour les modules. Il vous permet de créer des configurations standard similaires à AWS CloudFormation et de les utiliser dans d’autres configurations de terraform.

Étant donné que Terraform est un outil open source, vous pouvez également trouver et utiliser des modules open source prédéfinis 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é.

Personnellement, je préférerais utiliser Terraform plutôt que CloudFormation si la modularité était une exigence importante.

L’utilisation d’une pile imbriquée dans CloudFormation n’est pas aussi simple que l’utilisation de modules dans Terraform. Le principal facteur étant que la transmission de données d’un modèle CFN à la pile imbriquée peut être assez compliquée.

Il n’y a pas d’endroit standard où les modèles CloudFormation peuvent être partagés. Vous disposez d’AWS Service Catalog, mais ce n’est qu’un moyen pour vous d’appliquer certaines règles de création d’infrastructure via la console. Nous sommes tous sur le code. Lors de l’utilisation de Service Catalog, bien que certaines tâches compliquées soient encapsulées par des fichiers CloudFormation, vous devez toujours passer par la tâche manuelle consistant à accéder à la console et à spécifier les paramètres pour créer votre infrastructure.

Terraform, d’autre part, a une méthode définie pour créer, maintenir et partager les modules. Vous pouvez voir les exigences exactes des modules dans le registre des modules Terraform et les utiliser très facilement 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 vous fournissent tous les deux les moyens de le faire.

Parlons d’abord de CloudFormation. CloudFormation en soi n’offre aucun contrôle sur la façon dont les modèles sont utilisés, mais vous pouvez utiliser les politiques AWS IAM pour autoriser uniquement les utilisateurs de votre compte AWS à utiliser uniquement les modèles CloudFormation standard pour la création de ressources. Dans notre exemple de compartiment S3, vous souhaiterez peut-être limiter toutes les autorisations « S3 Create » pour les utilisateurs et leur permettre uniquement de créer des compartiments S3 à partir d’AWS Service Catalog ou de Nested Stacks.

Terraform vous permet de contrôler les ressources que vos utilisateurs peuvent créer en utilisant une politique comme outil de code Sentinelle. Sentinel vous permet d’appliquer des politiques précises basées sur la logique pour autoriser ou refuser les actions des utilisateurs via Terraform. Par exemple, vous pouvez refuser toutes les ressources qui créent des compartiments S3 et autoriser uniquement les utilisateurs à créer des compartiments S3 à partir d’un module standard.

Gestion de l’état

AWS CloudFormation et Terraform doivent tous deux suivre les ressources qu’ils gèrent.

Terraform stocke l’état de votre infrastructure dans un fichier d’état. Ce fichier est stocké localement par défaut, mais vous pouvez le stocker sur des backends distants comme S3 et demander à plusieurs utilisateurs d’apporter des modifications au même ensemble d’infrastructures.

CloudFormation ne maintient pas de fichier d’état, du moins pas celui que nous pouvons voir. CloudFormation est un service géré, il effectue donc toute la maintenance de l’état et les vérifications en arrière-plan.

AWS CloudFormation et Terraform vous permettent tous deux de vérifier les modifications qui seront apportées à votre infrastructure. Dans Terraform, vous pouvez exécuter une commande – « terraform plan » et comment Terraform prévoit d’appliquer vos modifications de configuration. Dans CloudFormation, les utilisateurs peuvent voir ces informations via des ensembles de modifications.

Langue

Terraform utilise le langage de configuration HashiCorp, HCL, un langage créé par HashiCorp. Il est très similaire à JSON avec des fonctionnalités et des capacités intégrées supplémentaires.

Les modèles CloudFormation sont écrits aux formats YAML ou JSON

Journalisation et restaurations

AWS CloudFormation et Terraform ont tous deux de bonnes capacités de journalisation. D’après mon expérience, les erreurs et les problèmes ont été simples (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é et peut être désactivée à des fins de débogage.

Terraform : Terraform n’annulera pas automatiquement vos modifications en cas d’échec. 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 une exécution de Terraform.

Portée

Terraform ne se limite pas au cloud AWS. Le facteur le plus important lors du choix entre Terraform et CloudFormation est que Terraform prend en charge d’autres fournisseurs et services cloud.

Donc, si vous envisagez d’utiliser IAC pour plusieurs plates-formes cloud, Terraform est votre meilleur choix. CloudFormation, bien qu’un outil puissant, n’est limité qu’à AWS. En utilisant Terraform, vous pouvez configurer une infrastructure et déployer votre application sur plusieurs plates-formes cloud, rendant ainsi votre application plus disponible et plus robuste.

Prise en charge des fonctionnalités

Habituellement, à mesure qu’AWS déploie de nouveaux services et fonctionnalités, CloudFormation sera mis à jour avant Terraform, car il s’agit d’un service AWS. À l’heure actuelle, les deux outils couvrent la plupart des services et fonctionnalités de ces services. Cela peut être un léger inconvénient de l’utilisation de Terraform, cependant, nous avons une solution.

Vous avez également la possibilité de créer une pile CloudFormation dans votre code Terraform. Ainsi, si vous utilisez Terraform et qu’il n’a pas de fonctionnalité, vous pouvez temporairement configurer une pile CloudFormation dans votre code Terraform.

Soutien technique

Le plan de support technique AWS payant couvre également le support CloudFormation.

HashiCorp a également payé des plans de support technique sur Terraform.

Conclusion

AWS CloudFormation et Terraform sont des outils puissants et entièrement développés. Les différences ci-dessus vous aideront à prendre une décision éclairée pour choisir l’outil en fonction de vos besoins. À titre de suggestion personnelle, si vous prévoyez d’utiliser plusieurs plates-formes cloud à l’avenir ou si vous utilisez actuellement plusieurs clouds, vous devez utiliser Terraform comme guichet unique pour tous vos besoins. Si vous recherchez un outil IAC uniquement pour AWS, AWS CloudFormation et Terraform conviennent parfaitement.

Si vous souhaitez apprendre Terraform, consultez ces cours en ligne.