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

Lecloud computing a révolutionné le monde de l’information et de la technologie. De la manière dont nous déployons et maintenons les applications aux pratiques de développement, tout a été fortement impacté par le Cloud Computing. Toutes les nouvelles applications sont développées pour être “cloud-native” et compatibles avec les services “cloud”.

L’informatique en nuage nous aide à développer des architectures hautement disponibles, évolutives et efficaces, ce qui rend les services en nuage de plus en plus demandés. L’essor de l’informatique en nuage s’accompagne de la nécessité de maintenir l’infrastructure en tant que code. La maintenance manuelle des ressources en nuage via une console peut s’avérer une tâche complexe et très difficile à suivre.

L‘infrastructure en tant que code, aussi appelée IAC ou IAAC, résout ce problème. En utilisant l’IAC, nous pouvons définir nos ressources en tant que code et utiliser ce code pour fournir des services en nuage. L’utilisation de l’infrastructure en tant que code permet à plusieurs développeurs de collaborer sur l’infrastructure et de suivre les modifications apportées par les développeurs.

L’infrastructure en tant que code dans AWS

AWS est le fournisseur de services en nuage le plus important et le plus utilisé au monde. Il dispose de son propre outil IAC, AWS CloudFormation ou AWS CDK, et permet également à des outils IAC tiers tels que Terraform de provisionner des ressources. Lorsque vous choisissez des outils IAC pour AWS, Terraform, un outil tiers, est un concurrent solide des outils gérés par AWS, AWS CloudFormation et AWS CDK.

Avec autant de choix et de fonctionnalités que chacun de ces outils, choisir le bon outil de CAI peut s’avérer difficile. Dans cet article, nous allons examiner la différence entre AWS CDK et Terraform. AWS CDK utilise Cloudformation en interne, donc pour une vue plus approfondie de Cloudformation et Terraform, veuillez vous référer à l’article connexe, Comprendre les outils de CAI : CloudFormation vs. Terraform.

Terraform

Terraform est un outil open-source d’Infrastructure as a Code initialement développé par Hashicorp. Il s’agit d’un outil très précis et mature qui prend en charge non seulement AWS, mais aussi d’autres fournisseurs de cloud. Terraform prend en charge tous les services AWS, et la communauté des développeurs est prompte à adopter toute nouvelle fonctionnalité ajoutée par AWS à ses services. Terraform nous permet d’écrire du code en langage développé Hashicorp (HCL). HCL est un langage de type JSON pour définir les ressources d’infrastructure.

AWS CDK

AWS CDK est un wrapper autour de AWS CloudFormation. Pour comprendre le fonctionnement de l’AWS CDK, vous devez en savoir un peu plus sur AWS CloudFormation. AWS CloudFormation est un outil géré par AWS qui nous permet de définir l’infrastructure AWS au format YML ou JSON. Même si la lecture de JSON et de YML est facile, il ne s’agit pas de véritables langages de programmation. Il n’y a pas de support natif pour les boucles et les fonctions, ce qui rend la maintenance des grandes infrastructures de plus en plus difficile. C’est là qu’intervient AWS CDK.

AWS CDK est une enveloppe autour de AWS CloudFromation qui vous permet d’utiliser des langages de programmation familiers tels que JAVA ou Python pour provisionner votre infrastructure. Cela facilite l’écriture et la maintenance du code.

Terraform vs. AWS CDK : différences

#1. Langage et facilité d’utilisation

Le langage et la facilité d’utilisation sont essentiels pour comprendre la différence entre AWS CDK et Terraform.

Parlons d’abord de Terraform. Terraform utilise un langage de type JSON pour définir les ressources et autres données, le HCL (HashiCorp Configuration Language). C’est assez simple, et la documentation est facile à comprendre et à suivre, même pour les débutants.

Voyons un code pour créer un seau S3.

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

  tags = {
    Name = "Mon seau"
    Environnement = "Dev"
  }
}

Le code est assez simple à lire, et vous pouvez voir d’autres paramètres que cette ressource prend en charge dans la documentation de Terraform.

Comme indiqué précédemment, AWS CDK est un wrapper CloudFormation qui nous permet de définir nos ressources dans des langages de programmation. Voyons un 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 : 'mon-premier-bucket',
    }) ;
 }
}

Le code Terraform peut sembler un peu plus soigné que le CDK, mais les codes Terraform et CDK sont tous deux assez simples. Si vous prévoyez d’utiliser IAC pour un petit projet, Terraform et CDK sont d’excellentes options en termes de langage et de facilité d’utilisation.

Cependant, lorsque vous choisissez le bon outil de CAI pour un grand projet avec de nombreux développeurs, Terraform présente un inconvénient. Aussi simple soit-il, Terraform est un nouveau langage, et vous devrez former vos développeurs à un tout nouveau langage qui n’est pas similaire aux autres langages de programmation utilisés. Plus important encore, la manipulation des données dans Terraform n’est pas aussi simple que dans les autres langages de programmation. Par exemple, l’itération dans les listes et les objets et la transformation des valeurs ne sont pas aussi simples, en particulier pour les débutants.

Personnellement, je préférerais AWS CDK à Terraform si l’on considère la facilité d’utilisation. Lorsque j’utilisais Terraform, il m’est arrivé de devoir recourir à des solutions de contournement ou à des scripts compliqués pour obtenir les résultats souhaités. Le contrôle que nous avons sur les données et la capacité de manipuler facilement les données dans les langages AWS CDK est une grande victoire pour AWS CDK.

#2. Portée

Terraform est un outil IAC multi-cloud, ce qui signifie que vous pouvez utiliser Terraform non seulement avec AWS mais aussi avec d’autres fournisseurs de cloud comme Azure ou GCP. Terraform est un excellent outil pour créer des déploiements multi-cloud et disposer d’un nombre illimité de fournisseurs de cloud pour votre application.

Il est arrivé que des plateformes mondiales largement utilisées tombent en panne à cause d’un problème dans les services du fournisseur de cloud. Aujourd’hui, il est judicieux d’avoir plus d’un fournisseur de cloud pour vos applications.

AWS CDK est une offre AWS pour l’IAC. Aussi puissant et mature que soit le CDK, il n’est limité qu’au nuage AWS.

Si l’on considère l’étendue des outils IAC, Terraform est le gagnant évident des deux. Il est très logique que vos développeurs utilisent un seul outil pour toutes les plateformes cloud.

#3. La performance

La performance n’est généralement pas le critère le plus important dans le choix d’un outil IAC, mais elle peut avoir son importance dans le cadre de projets de grande envergure. Terraform déploie des ressources à l’aide du SDK AWS, alors que le code CDK est d’abord converti en modèles CloudFormation, puis appliqué.

Terraform fonctionnerait légèrement plus rapidement 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 peuvent tous deux être utilisés pour créer des modules. Terraform prend en charge les modules en mode natif. 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 public pour l’hébergement et l’utilisation de 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 gros avantage d’AWS CDK car l’autre outil AWS IAC – CloudFormation ne vous 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 alternative beaucoup plus appropriée.

En fin de compte, les deux outils sont similaires sur cet aspect.

#5. Contrôle et gouvernance

En fin de compte, tous les accès à la console AWS sont contrôlés par IAM, le service de gestion des identités d’AWS. Vous pouvez utiliser les politiques IAM avec AWS CDK et Terraform pour autoriser ou refuser certaines actions. IAM vous permet de contrôler finement les actions qui peuvent être effectuées sur votre compte.

Outre l’utilisation d’IAM pour contrôler l’accès aux ressources du compte, Terraform offre un cadre de politique sous forme de code, Sentinel. Sentinel vous permet d’écrire des politiques fines pour contrôler correctement les actions d’un utilisateur via Terraform.

Conclusion

Comme 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.

Dans l’ensemble, AWS CDK et Terraform sont tous deux des outils matures et puissants. Terraform présente un léger désavantage en ce qui concerne la manipulation des données. Cependant, d’après mon expérience, une fois que vous êtes plus à l’aise avec l’écriture de Terraform, il devient plus facile d’utiliser 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 souhaitez utiliser AWS comme fournisseur de cloud, AWS CDK est une excellente alternative.