Comprendre les outils IaC : AWS CDK contre Terraform

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

Le Cloud Computing a révolutionné le monde de l’information et de la technologie. De la façon 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 natives du cloud et compatibles avec les services cloud.

Le cloud computing nous aide à développer des architectures hautement disponibles, évolutives et efficaces, ce qui rend les services cloud de plus en plus demandés. Avec ce boom du cloud computing, il est nécessaire de maintenir l’infrastructure sous forme de code. La maintenance manuelle des ressources cloud via la console peut être une tâche complexe qui peut être très difficile à suivre.

L’infrastructure en tant que code, alias IAC ou IAAC, résout ce problème. En utilisant IAC, nous pouvons définir nos ressources en tant que code et utiliser ce code pour fournir des services cloud. 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.

Infrastructure en tant que code dans AWS

AWS est le fournisseur de cloud le plus important et le plus utilisé au monde. Il possède son propre outil IAC, AWS CloudFormation ou AWS CDK, et permet également à des outils IAC tiers comme Terraform de provisionner des ressources. Lors du choix des outils IAC pour AWS, Terraform, un outil tiers, est un solide concurrent 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 offre, choisir le bon outil IAC peut être difficile. Dans cet article, nous discuterons de 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 IAC : CloudFormation vs Terraform.

Terraforme

Terraform est une infrastructure open source en tant qu’outil de code initialement développé par Hashicorp. Il s’agit d’un outil hautement précis et mature qui prend en charge non seulement AWS, mais également d’autres fournisseurs de cloud. Terraform prend en charge tous les services AWS, et la communauté de développement s’empresse de saisir toute nouvelle fonctionnalité qu’AWS ajoute à ses services. Il nous permet d’écrire du code dans le langage développé Hashicorp (HCL). HCL est un langage de type JSON pour définir les ressources d’infrastructure.

CDK AWS

AWS CDK est un wrapper autour d’AWS CloudFormation. Pour comprendre le fonctionnement d’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 YML est facile, ce ne sont pas de véritables langages de programmation. Il n’y a pas de support natif pour les boucles et les fonctions, ce qui rend de plus en plus difficile la maintenance de grandes infrastructures. C’est là qu’AWS CDK entre en jeu.

AWS CDK est un wrapper autour d’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 et AWS CDK : différences

#1. Langue et facilité d’utilisation

La langue et la facilité d’utilisation sont essentielles 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 ou 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 compartiment S3.

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

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

Le code est assez simple à lire et vous pouvez voir d’autres paramètres pris en charge par cette ressource dans le Documentation Terraform.

Comme mentionné 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 compartiment 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 soigné que le CDK, mais les codes Terraform et CDK sont assez simples. Si vous envisagez d’utiliser IAC pour un petit projet, Terraform et CDK sont d’excellentes options en ce qui concerne la langue et la facilité d’utilisation.

Cependant, lors du choix du bon outil IAC pour un gros projet avec de nombreux développeurs, Terraform a un inconvénient. Aussi simple que soit Terraform, c’est un nouveau langage, et vous devrez former vos développeurs dans 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 d’autres langages de programmation. Par exemple, parcourir des listes et des objets et transformer des valeurs n’est pas aussi simple, surtout pour les débutants.

Personnellement, je préférerais AWS CDK à Terraform si l’on considère la facilité d’utilisation. Lors de l’utilisation de Terraform, j’ai parfois dû utiliser 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 possibilité de manipuler facilement les données dans les langages AWS CDK sont une grande victoire pour AWS CDK.

#2. Portée

Terraform est un outil IAC multi-cloud, ce qui signifie que vous pouvez non seulement utiliser Terraform 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 y a eu des moments où des plates-formes mondiales largement utilisées ont été interrompues en raison d’un problème dans les services du fournisseur de cloud. À l’heure actuelle, il est judicieux d’avoir plus d’un fournisseur de cloud pour vos applications.

AWS CDK est une offre AWS pour IAC. Aussi puissant et mature que soit le CDK, il se limite uniquement au cloud AWS.

Lorsque l’on considère la portée 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 plates-formes cloud.

#3. Performance

La performance n’est généralement pas le critère le plus important lors du choix du bon outil IAC, mais cela peut être important dans les grands projets. Terraform déploie des ressources à l’aide du kit SDK AWS, tandis 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 être utilisés pour créer des modules. Terraform a un support natif pour 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 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 plus dans AWS CDK car l’autre outil AWS IAC – CloudFormation ne vous permet pas de créer et de réutiliser du code en tant que 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.

Dans l’ensemble, les deux outils sont similaires dans 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 des stratégies IAM avec AWS CDK et Terraform pour autoriser et refuser certaines actions. IAM vous permet d’avoir un contrôle précis sur les actions pouvant être entreprises sur votre compte.

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

Conclusion

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

Dans l’ensemble, AWS CDK et Terraform sont des outils matures et puissants. Terraform a un léger inconvénient 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 cherchez à utiliser AWS comme fournisseur de cloud, AWS CDK est une excellente alternative.