L’infrastructure en tant que code est un grand buzz dans l’industrie informatique en ce moment, et lorsqu’il s’agit d’IaC, Terraform vs CloudFormation est un sujet brûlant à discuter. Terraform et CloudFormation sont appelés logiciels qui définissent l’infrastructure, ce qui aide votre équipe informatique à provisionner et à gérer votre infrastructure avec différents outils. L’automatisation de l’infrastructure est l’un des piliers de la mise en œuvre des pratiques DevOps dans votre projet.
Lorsqu’on leur demande quels sont les meilleurs outils pour automatiser le provisionnement de l’infrastructure, deux noms courants viennent à l’esprit : Terraform et AWS CloudFormation. Ce blog traite en détail des différents aspects de Terraform vs CloudFormation.
1. CloudFormation
Amazon CloudFormation est un outil fantastique qui donne à l’équipe de développement et d’exploitation la liberté d’automatiser facilement la fourniture de l’infrastructure d’AWS. Il s’agit d’un service AWS géré qui vous permet de concevoir et de provisionner des ressources AWS et tierces pour votre environnement cloud. CloudFormation gère la configuration dans un format JSON appelé modèles. Ces modèles permettent à l’utilisateur d’atteindre la réutilisabilité et l’évolutivité de l’infrastructure. Les modèles CloudFormation peuvent également être au format YAML.
2. Terraformer
Un produit HashiCorp, Terraform, est une solution open source qui permet le développement d’une infrastructure en tant que code. C’est un outil puissant qui aide les employés à travailler dans les opérations informatiques, la fourniture, la mise à niveau et la maintenance de l’infrastructure. Terraform a son langage spécifique au domaine appelé HashiCorp Configuration Language (HCL). Il s’agit d’un langage entièrement compatible JSON qui aide les professionnels DevOps à définir l’infrastructure en tant que code.
3. Terraform vs CloudFormation
La première question qui nous vient à l’esprit est pourquoi avons-nous besoin d’outils comme Terraform et CloudFormation alors que nous avons déjà des outils de gestion de configuration comme Ansible et Puppet ? Ces outils CM peuvent gérer presque toutes les configurations liées au système. Que se passe-t-il si un utilisateur doit maintenir une couche d’abstraction entre les composants nus sous-jacents et les services. Dans de tels cas, les deux outils puissants, CloudFormation et Terraform, entrent en scène.
Faisons une comparaison côte à côte de Terraform et CloudFormation :
Facilité d’utilisation
Alors que CloudFormation se limite aux services offerts par AWS, Terraform s’étend sur plusieurs fournisseurs de services cloud comme AWS, Azure, Google Cloud Platform et bien d’autres. Terraform couvre la plupart des ressources AWS.
Langue
CloudFormation utilise JSON ou YAML. Cela rend CloudFormation facile à lire et à gérer. Mais il existe une contrainte qui ne permet pas aux développeurs AWS de créer des modèles CloudFormation d’une taille supérieure à 51 Mo. Si le modèle dépasse cette limite de taille, les développeurs doivent créer une pile imbriquée pour les modèles.
D’autre part, Terraform utilise le langage propriétaire de HashiCorp appelé HCL (HashicCorp Configuration Language). Il s’agit également d’un langage compatible JSON.
État-gestion
Étant donné que CloudFormation est un service AWS géré, il vérifie l’infrastructure de manière cohérente pour détecter si l’infra provisionnée conserve son état ou non. CloudFormation reçoit une réponse détaillée si quelque chose change.
D’autre part, Terraform stocke l’état de l’infrastructure sur la machine de provisionnement, qu’il s’agisse d’une machine virtuelle ou d’un ordinateur distant. L’état est enregistré sous la forme d’un fichier JSON, qui sert de carte pour Terraform décrivant les ressources qu’il gère.
Pour résumer, dans CloudFormation, l’état est régi par CloudFormation prêt à l’emploi, ce qui empêche les modifications conflictuelles. Dans Terraform, l’état est stocké sur un disque local, ce qui aide à synchroniser l’état. Une autre bonne pratique pour la gestion des états est que les états Terraform peuvent également être enregistrés dans des services de stockage comme S3. Cela doit être défini dans le backend, ce qui le rend plus facile et plus sûr à gérer.
Coût
La meilleure partie de ces deux outils est qu’ils sont tous deux gratuits. Ces deux outils ont de grandes communautés avec beaucoup de soutien et d’exemples. CloudFormation n’a pas de prix. Les seuls frais encourus par les utilisateurs sont le coût du service AWS fourni par CloudFormation. Terraform est un outil gratuit et open source. Terraform, cependant, propose une version d’entreprise payante qui propose des options de collaboration et de gouvernance supplémentaires.
Intégration multi-cloud
Si vous cherchez à fournir des services sur plusieurs plates-formes cloud, Terraform est votre option de prédilection. Alors que Terraform prend en charge tous les fournisseurs de cloud comme AWS, GCP, Azure et bien d’autres, CloudFormation se limite uniquement à AWS. Ainsi, si votre environnement implique plusieurs déploiements cloud, CloudFormation n’est pas pour vous. Supposons que vous utilisiez des ressources AWS telles que EC2, S3, etc. ; il est préférable de s’en tenir à CloudFormation.
Pour gérer la compatibilité d’AWS, la dernière version de Terraform prend désormais entièrement en charge tous les services d’AWS. Cette version de Terraform est considérée comme comparable à CloudFormation pour gérer les ressources cloud AWS.
4. Terraform vs CloudFormation : où s’intègrent-ils dans votre infrastructure ?
Il est impératif de comprendre où et comment ces deux solutions IaC s’intègrent dans votre infrastructure. Parlons d’abord de Terraform.

Dans le diagramme ci-dessus, nous pouvons voir comment Terraform s’intègre au pipeline CI/CD standard. Terraform joue un rôle important dans la partie Déploiement continu du pipeline, où il est responsable du provisionnement des instances sur le cluster ECS d’Amazon. Terraform fait également tourner rapidement jusqu’à trois environnements parallèles Dev, UAT et Prod dans le scénario ci-dessus.
Le diagramme ci-dessous montre le flux de travail global du fonctionnement de CloudFormation.
CloudFormation comporte principalement quatre étapes :
1. Écriture de votre code : il s’agit du code défini en tant que modèle CloudFormation.
2. Ce modèle peut être enregistré dans n’importe quel référentiel de code. Dans ce scénario, le modèle est enregistré dans un compartiment S3.
3. AWS CloudFormation est ensuite utilisé via l’AWS CLI ou la console du navigateur pour créer la pile.
4. La sortie finale du modèle est le provisionnement sous la forme de piles d’infrastructure dans le cloud AWS.
Comment utiliser Terraform
Regardons un exemple où nous verrons comment nous pouvons provisionner des instances EC2 à l’aide de Terraform sur AWS. Voyons maintenant la partie configuration.
Conditions préalables:
1. Compte AWS
2. Terraform CLI
3. Informations d’identification AWS configurées localement. Les informations d’identification peuvent être stockées dans un fichier et le chemin peut être spécifié sur le fournisseur.
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 2.70" } } } provider "aws" { profile = "default" region = "us-west-2" } resource "aws_instance" "example" { ami = "ami-830c94e3" instance_type = "t.2.micro" }
Cette configuration implique que Terraform est prêt à créer une instance EC2. Cette configuration doit être copiée dans un fichier .tf, puis elle peut être exécutée.
Comment utiliser les modèles CloudFormation
La première condition préalable à l’utilisation de CloudFormation est que vous ayez besoin d’un modèle qui spécifie les ressources que vous souhaitez dans votre pile.
Vous trouverez ci-dessous un exemple de modèle CloudFormation pour provisionner une instance EC2 :
"Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { {" "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" } , { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [{ "Ref" : "Ec2securityGroup" }] , "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdal", "Ebs" : { "VolumeSize : "50" } },{ "DeviceName" : "/dev/sdm", "Ebs" : { "VolumeSize" : "100" } } ] } }
5. La bataille finale : avantages et inconvénients de Terraform vs CloudFormation
Bien que les deux outils soient robustes et présentent leurs avantages, examinons la liste complète des avantages et des inconvénients de Terraform vs CloudFormation.
Terraforme
Avantages
- Les modules Terraform nous permettent de séparer les ressources en modèles dédiés et réutilisables.
- Vous pouvez utiliser des versions spécifiques et différentes branches du même module, donc le modifier pour ajouter de nouvelles fonctionnalités est plus simple, ce qui offre de la flexibilité.
- Terraform dispose d’une CLI robuste qui permet de voir plus facilement l’état de l’infrastructure grâce à des commandes simples.
- Terraform prend en charge l’intégration multi-cloud. Les utilisateurs peuvent utiliser Terraform pour déployer des applications sur plusieurs plates-formes cloud.
- Il simplifie la gestion et l’orchestration de l’infrastructure multi-niveaux. CloudFormation présente également le même avantage en matière de gestion et d’orchestration des infras.
Désavantages
- Lorsqu’AWS lance de nouveaux services, il faut plus de temps pour obtenir des contrôles de conformité dans Terraform.
- La courbe d’apprentissage de Terraform est plus raide que celle de CloudFormation.
- La sécurité des « fichiers d’État » est une préoccupation. Les utilisateurs doivent s’assurer que les fichiers d’état sont gérés dans le backend distant car ils contiennent des informations confidentielles.
- En plus de la sécurité, les fichiers d’état sont une préoccupation car la gestion des ressources est impossible si l’état terraform est perdu ; l’utilisation d’un backend pour stocker les fichiers d’état est une bonne pratique.
Il existe de nombreux autres avantages à utiliser Terraform. Certains des principaux sont :
✔ Terraform prend en charge de nombreux outils de sécurité et de tests unitaires comme Terraform Lint, etc.
✔ Terraform prend en charge les conditions.
✔ Terraform dispose d’espaces de travail, ce qui facilite la gestion de plusieurs environnements.
✔ Terraform prend en charge plusieurs plugins. Ces plugins aident beaucoup à étendre les fonctionnalités de base de Terraform.
✔ L’approvisionneur local_exec vous permet d’exécuter les commandes localement. Cela étend encore les fonctionnalités de Terraform vous permettant d’exécuter des scripts bash, PowerShell et Python avant d’exécuter des fichiers .tf.
Formation Nuage
Avantages
- Fonctionne mieux pour les nouveaux services AWS.
- YAML est convivial et plus facile à utiliser et à configurer.
- De nombreux outils aident dans les tests unitaires pour les modèles CloudFormation. Cela facilite la recherche d’erreurs, d’avertissements et d’autres informations dans le code.
- Il s’intègre facilement avec d’autres solutions Infrastructure-as-a-code.5. Cloudformation prend en charge les conditions, qui permettent à l’utilisateur de décider de créer ou non une ressource.
Désavantages
- Les piles imbriquées ne sont pas aussi bonnes que Terraform. C’est un peu plus difficile à mettre en œuvre et à gérer. Les références CrossStacks, l’attribut DependsOn ou la fonction GetAtt peuvent aider à gérer les sorties d’un modèle en tant qu’entrée d’un autre modèle.
- Il y a une limite de taille de 51 Mo sur les piles qui ne fonctionnent pas tout le temps en faveur des développeurs.
- La modularisation du code dans CloudFormation n’est pas aussi mature que Terraform. Il s’agit d’une toute nouvelle fonctionnalité introduite par AWS dans CloudFormation.
6. Pensées de clôture
Après avoir passé en revue les différences entre Terraform et CloudFormation, concluons cet article avec quelques conseils utiles !
Les ressources personnalisées sont un avantage de CloudFormation. Vous pouvez utiliser les fonctions Lambda pour cela. Lorsque vous associez une fonction Lambda à une ressource personnalisée, la fonction est appelée chaque fois que la ressource personnalisée est créée, mise à jour ou supprimée. AWS CloudFormation appelle une API Lambda pour appeler la fonction et transmettre toutes les données de la demande (telles que le type de demande et les propriétés de la ressource).
Les fonctions de puissance et de personnalisation de Lambda combinées à AWS CloudFormation permettent un large éventail de scénarios, tels que…