Comprendre les outils IaC : AWS CDK contre Terraform

Photo of author

By pierre



Vous hésitez entre AWS CDK et Terraform ? Cet article est conçu pour vous éclairer et vous aider à faire le meilleur choix.

Le cloud computing a profondément transformé le paysage informatique et technologique. De la façon dont les applications sont déployées et maintenues, jusqu’aux méthodologies de développement, tout a été profondément affecté par cette révolution. Aujourd’hui, les nouvelles applications sont conçues pour être natives du cloud et tirer parti de ses services.

Le cloud computing permet de développer des architectures hautement disponibles, évolutives et efficientes, ce qui explique la demande croissante pour les services cloud. Avec cet essor du cloud, il devient impératif de gérer l’infrastructure via du code. La gestion manuelle des ressources cloud, à travers la console, peut s’avérer fastidieuse et complexe, et difficile à suivre.

L’infrastructure en tant que code (IaC) est la solution à ce problème. En utilisant l’IaC, il est possible de définir les ressources sous forme de code, qui sera utilisé pour provisionner les services cloud. L’IaC facilite la collaboration des développeurs sur l’infrastructure et le suivi des changements apportés.

L’infrastructure en tant que code au sein d’AWS

AWS, leader mondial du cloud computing, propose son propre outil IaC, AWS CloudFormation (ou AWS CDK), tout en permettant l’utilisation d’outils IaC tiers, comme Terraform, pour le provisionnement des ressources. Au moment de choisir les outils IaC pour AWS, Terraform, un outil externe, rivalise avec les outils proposés par AWS, à savoir AWS CloudFormation et AWS CDK.

Face à cette pléthore d’options, choisir l’outil IaC idéal peut être un véritable défi. Cet article se propose d’explorer les différences entre AWS CDK et Terraform. Puisque AWS CDK repose sur CloudFormation, pour une analyse plus approfondie de CloudFormation et de Terraform, veuillez consulter l’article connexe : Comprendre les outils IaC : CloudFormation vs Terraform.

Terraform

Terraform est un outil d’infrastructure en tant que code open source, initialement développé par Hashicorp. Cet outil, très précis et mature, prend en charge non seulement AWS, mais également d’autres fournisseurs de cloud. Terraform est compatible avec tous les services AWS, et la communauté de développeurs s’empresse d’intégrer toute nouvelle fonctionnalité ajoutée par AWS. Il permet l’écriture de code dans le langage développé par Hashicorp (HCL). HCL est un langage de type JSON utilisé pour définir les ressources d’infrastructure.

AWS CDK

AWS CDK est une surcouche d’AWS CloudFormation. Pour comprendre comment AWS CDK fonctionne, il est essentiel de connaître le fonctionnement d’AWS CloudFormation. AWS CloudFormation est un outil proposé par AWS qui permet de définir l’infrastructure AWS en format YML ou JSON. Bien que les formats JSON et YML soient faciles à lire, ils ne sont pas de véritables langages de programmation. Ils ne prennent pas en charge nativement les boucles et les fonctions, ce qui rend la gestion d’infrastructures de grande taille de plus en plus complexe. C’est ici qu’AWS CDK entre en jeu.

AWS CDK est une surcouche d’AWS CloudFormation qui permet d’utiliser des langages de programmation courants, tels que Java ou Python, pour provisionner l’infrastructure. Cela facilite l’écriture et la maintenance du code.

Terraform et AWS CDK : les différences

#1. Langage et facilité d’utilisation

Le langage et la facilité d’utilisation sont des facteurs essentiels pour comprendre les différences entre AWS CDK et Terraform.

Commençons par Terraform. Terraform utilise un langage de type JSON pour définir les ressources et autres données, le HCL (HashiCorp Configuration Language). Ce langage est relativement simple, et sa documentation est facile à comprendre et à suivre, même pour les débutants.

Voici un exemple de code pour créer un bucket S3 :

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Le code est simple à lire, et vous trouverez tous les paramètres possibles pour cette ressource dans la documentation Terraform.

Comme mentionné précédemment, AWS CDK est une surcouche de CloudFormation qui permet de définir les ressources à l’aide de langages de programmation. Voici un exemple de code AWS CDK pour créer un bucket S3 :

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

export class BucketStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: 'my-first-bucket',
    });
 }
}

Le code Terraform peut sembler un peu plus lisible que le CDK, mais les codes des deux outils restent simples. Pour un petit projet, Terraform et CDK sont d’excellentes options en termes de langage et de facilité d’utilisation.

Cependant, lors du choix de l’outil IAC pour un grand projet impliquant de nombreux développeurs, Terraform présente un inconvénient. Bien que simple, Terraform utilise un nouveau langage, ce qui nécessite une formation des développeurs à un langage qui n’est pas similaire aux autres langages de programmation utilisés. De plus, la manipulation des données dans Terraform n’est pas aussi intuitive que dans d’autres langages de programmation. Par exemple, parcourir des listes et des objets et transformer des valeurs n’est pas une tâche facile, notamment pour les débutants.

Personnellement, je préfère AWS CDK à Terraform en termes de facilité d’utilisation. Lors de l’utilisation de Terraform, il m’est arrivé de devoir recourir à des solutions de contournement ou à des scripts complexes pour obtenir les résultats souhaités. La flexibilité offerte par les langages d’AWS CDK dans le contrôle et la manipulation des données est un avantage significatif.

#2. Portée

Terraform est un outil IaC multi-cloud, ce qui signifie qu’il peut être utilisé avec AWS, mais aussi avec d’autres fournisseurs de cloud comme Azure ou GCP. Terraform est un outil idéal pour réaliser des déploiements multi-cloud et bénéficier d’un nombre illimité de fournisseurs de cloud pour votre application.

Il est arrivé que des plateformes mondiales largement utilisées subissent des interruptions en raison d’un problème lié aux services du fournisseur de cloud. Par conséquent, il est judicieux d’avoir recours à plusieurs fournisseurs de cloud pour vos applications.

AWS CDK est une solution IaC propre à AWS. Bien qu’il soit puissant et mature, il se limite au cloud AWS.

En termes de portée, Terraform est le grand vainqueur. Il est plus logique que vos développeurs utilisent un seul outil pour toutes les plateformes cloud.

#3. Performance

La performance n’est généralement pas le critère principal lors du choix d’un outil IaC, mais elle peut être importante dans les grands projets. Terraform déploie les ressources à l’aide du SDK AWS, tandis que le code CDK est d’abord converti en modèles CloudFormation, avant d’être appliqué.

Terraform serait légèrement plus rapide qu’AWS CDK, notamment en raison du temps nécessaire à CDK pour convertir le code en modèle CloudFormation.

#4. Modularité

Terraform et AWS CDK permettent de créer des modules. Terraform prend en charge nativement les modules. Vous pouvez créer vos propres modules et les héberger sur un registre de modules privé pour une utilisation au sein de votre organisation. Terraform dispose également d’un registre de modules publics pour héberger et utiliser des modules publics.

Dans AWS CDK, vous pouvez créer des fonctions et des classes réutilisables et partager ce code au sein de votre organisation pour obtenir le même résultat. C’est un avantage considérable, car l’autre outil AWS IAC – CloudFormation – ne permet pas de créer et de réutiliser du code sous forme de modules. Vous pouvez utiliser des piles imbriquées dans CloudFormation pour répondre à cette exigence, mais l’utilisation d’AWS CDK est une approche beaucoup plus appropriée.

Dans l’ensemble, les deux outils sont similaires à cet égard.

#5. Contrôle et gouvernance

En fin de compte, tous les accès à la console AWS sont gérés par IAM, le service de gestion des identités d’AWS. Il est possible d’utiliser des politiques IAM avec AWS CDK et Terraform pour autoriser et refuser certaines actions. IAM permet un contrôle précis sur les actions qui peuvent être effectuées sur votre compte.

En plus de contrôler l’accès aux ressources du compte via IAM, Terraform propose un framework de politique en tant que code, Sentinel. Sentinel permet d’écrire des politiques spécifiques pour contrôler précisément les actions d’un utilisateur via Terraform.

Conclusion

Étant donné qu’AWS CDK utilise CloudFormation en interne, je vous suggère de lire l’article CloudFormation vs. Terraform pour mieux comprendre les différences entre AWS CDK et Terraform.

En résumé, AWS CDK et Terraform sont des outils matures et performants. Terraform présente un léger inconvénient en termes de manipulation des données. Cependant, d’après mon expérience, une fois familiarisé avec l’écriture en Terraform, il devient plus facile de mettre en place des solutions de contournement et d’effectuer des transformations de données. Pour les opérations multi-cloud, Terraform est un choix évident ; cependant, si vous comptez utiliser AWS comme unique fournisseur de cloud, AWS CDK est une excellente alternative.