Vue d'ensemble d'AWS CDK, exemples en TypeScript et en Python ainsi que les performances
Outil pratique pour l'ingénierie de plateforme sur AWS
Le AWS Cloud Development Kit (AWS CDK)
est un framework qui permet de définir et de provisionner l’infrastructure cloud à l’aide de langages de programmation familiers tels que
TypeScript,
Python,
Java et
Go.
Ce framework open source simplifie le code de l’infrastructure en vous permettant de modéliser les ressources AWS avec des constructions de haut niveau, puis de les synthétiser en modèles CloudFormation pour le déploiement.
Cela rend plus facile le développement, le déploiement et l’itération sur votre infrastructure AWS de manière plus maintenable et testable.
Voici quelques exemples courts de code pour AWS CDK en TypeScript et en Python :
Exemple en TypeScript :
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY
});
}
}
Cet exemple crée un bucket S3 avec la versionning activé.
Exemple en Python :
from aws_cdk import (
Stack,
aws_s3 as s3,
RemovalPolicy
)
from constructs import Construct
class MyStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "MyFirstBucket",
versioned=True,
removal_policy=RemovalPolicy.DESTROY)
Cet exemple crée de la même manière un bucket S3 versionné avec une politique de suppression pour supprimer lors de la suppression de la pile.
Ces exemples illustrent comment AWS CDK utilise des constructions familières, des classes et des objets pour définir l’infrastructure, qui peut ensuite être déployée facilement via cdk deploy
.
AWS CDK prend en charge d’autres ressources et des modèles d’infrastructure plus complexes que ces exemples simples. Il s’intègre également bien avec les IDE, les frameworks de test et les pipelines CI/CD pour améliorer l’expérience du développeur et l’automatisation.
TypeScript vs Python pour AWS CDK
TypeScript et Python sont tous deux des langages pleinement pris en charge pour le développement et le déploiement avec AWS CDK, mais ils présentent certaines différences notables :
TypeScript
- AWS CDK est initialement implémenté en TypeScript, ce qui fournit une vérification de type native, des interfaces et un typage statique fort.
- TypeScript bénéficie de la documentation officielle la plus complète, d’exemples et de soutien communautaire. Cela rend plus facile de trouver des ressources et de résoudre des problèmes.
- Des IDE comme Visual Studio Code offrent un excellent support pour TypeScript avec des complétions intelligentes, un repérage d’erreurs et du refactorage.
- Puisque CDK lui-même est écrit en TypeScript, son utilisation tend à se sentir plus « native » et fluide avec moins d’abstractions.
- Le typage statique de TypeScript détecte de nombreux problèmes tôt à l’étape de build, évitant certains erreurs à l’exécution.
- Les développeurs souhaitant une sécurité de type stricte et des ressources communautaires plus importantes peuvent préférer TypeScript pour CDK.
Python
- Le support Python est stable et fonctionnel mais s’agit d’une liaison sur le noyau TypeScript via jsii, reposant sur le typage dynamique avec des annotations de type optionnelles.
- Python utilise les conventions de nommage snake_case au lieu du camelCase de TypeScript, donc des ajustements syntaxiques mineurs sont nécessaires lors de la traduction des exemples.
- Python a moins d’exemples officiels et de ressources communautaires, ce qui peut rendre l’apprentissage et le débogage plus difficiles pour les débutants.
- Le typage dynamique signifie que certains erreurs de type apparaissent uniquement à l’exécution plutôt qu’à la compilation, ce qui peut retarder la détection d’erreurs. Cependant, les modules Python ont des annotations de type qui peuvent être utilisées avec des outils d’IDE ou d’analyse statique comme MyPy.
- Les développeurs Python apprécient les outils familiers tels que les environnements virtuels (virtualenv) et pip pour la gestion des paquets.
- Python est préféré si votre équipe ou votre projet est déjà fortement basé sur Python, même si la documentation et le soutien communautaire sont quelque peu plus légers.
Développement et déploiement
- Le CDK Toolkit (
cdk deploy
) fonctionne de la même manière indépendamment du choix du langage, car CDK synthétise les modèles AWS CloudFormation sous le capot. - Les deux langages prennent en charge l’ensemble des ressources AWS et des constructions.
- Le choix entre eux dépend souvent de l’expertise linguistique de votre équipe, du soutien communautaire disponible et de la préférence pour le typage statique ou dynamique.
Résumé
- TypeScript offre l’expérience la plus mûre et polie avec une documentation plus riche, un typage fort et une intégration native, puisque CDK est construit dessus.
- Python offre une fonctionnalité robuste et une facilité d’utilisation pour les programmeurs Python, mais avec moins d’exemples et certains défis supplémentaires dus au typage dynamique et aux traductions entre les idiomes linguistiques.
- Si vous souhaitez un développement rapide avec des ressources extensives, TypeScript est souvent recommandé. Si votre projet ou votre équipe est centré sur Python, Python reste un bon choix pleinement pris en charge malgré quelques compromis mineurs.
Cela correspond aux retours de la communauté et à la documentation officielle d’AWS décrivant leurs avantages et inconvénients respectifs pour le développement et le déploiement avec AWS CDK. Les deux langages peuvent être utilisés efficacement ; votre choix dépend de vos priorités en matière de discipline de typage, de familiarité avec le langage et de soutien de l’écosystème.
Langues officiellement prises en charge pour AWS CDK
Le AWS Cloud Development Kit (AWS CDK) prend officiellement en charge les langages de programmation suivants :
- TypeScript
- JavaScript
- Python
- Java
- C# (.NET)
- Go
Ces langages sont tous pleinement pris en charge, avec le CDK initialement développé en TypeScript puis étendu à d’autres langages à l’aide d’un outil appelé JSII, qui génère des liaisons de langage pour faire ressentir le CDK naturellement dans la syntaxe et les conventions de chaque langage.
En ce qui concerne le choix du langage, cela dépend de vos préférences et de votre contexte :
-
TypeScript est souvent recommandé comme le meilleur choix car AWS CDK est initialement construit en TypeScript. Il dispose de l’écosystème le plus mûr, de la documentation officielle la plus riche et d’exemples communautaires. Son typage statique et son soutien IDE fort améliorent la productivité des développeurs et détectent de nombreux erreurs tôt.
-
Python est une alternative très populaire, surtout pour ceux qui viennent d’un arrière-plan Python. Il a une syntaxe propre qui rend plus intuitive pour les débutants, bien que le typage dynamique signifie que certains erreurs ne sont détectées qu’à l’exécution. L’outiling et la disponibilité d’exemples sont solides mais pas aussi étendus que ceux de TypeScript.
-
Java, C# et Go sont pleinement pris en charge mais ont généralement moins d’exemples communautaires et une documentation moins étendue par rapport à TypeScript et Python. Ils sont adaptés si votre équipe est compétente dans ces langages.
En résumé :
- TypeScript offre l’expérience la plus native, polie et largement prise en charge pour le développement avec AWS CDK.
- Python fournit une syntaxe plus simple et une expérience plus conviviale pour les débutants, avec un soutien complet du CDK, mais avec un peu moins de polish outiling.
- Java, C# et Go sont de bons choix si ils correspondent à vos compétences existantes ou à vos besoins de projet, mais peuvent nécessiter plus d’efforts pour trouver des ressources d’apprentissage.
Votre choix devrait tenir compte de l’expertise linguistique de votre équipe, de la disponibilité d’exemples et de soutien, et de votre préférence pour le typage statique (TypeScript, Java, C#) ou dynamique (Python). À la fois TypeScript et Python tendent à être les plus populaires et recommandés pour les projets AWS CDK.
Performance des langages dans le développement et le déploiement avec AWS CDK
Lorsqu’on considère la meilleure performance dans le développement et le déploiement avec AWS CDK, il est important de préciser que la fonctionnalité centrale du AWS CDK — la synthèse de l’infrastructure comme code en modèles CloudFormation et le déploiement — est indépendante du langage. Tous les langages pris en charge (TypeScript, Python, Java, C#, Go) se compilent en modèles AWS CloudFormation identiques, donc la performance d’exécution pour le déploiement ne diffère pas selon le langage.
Cependant, en ce qui concerne la performance de développement — c’est-à-dire l’efficacité, la détection d’erreurs, le tooling et la facilité de codage — TypeScript est généralement considéré comme l’environnement de langage le plus performant pour le développement avec AWS CDK :
- TypeScript est le langage natif du AWS CDK, initialement développé en lui. Cela donne le tooling le plus fluide, le typage statique le plus fort et la détection d’erreurs la plus précoce pendant le développement, rendant le codage plus rapide et moins suceptible d’erreurs.
- La documentation la plus riche, les exemples communautaires et le soutien IDE (comme les complétions intelligentes et le refactorage de Visual Studio Code) existent pour TypeScript, accélérant la productivité des développeurs.
- Le code TypeScript détecte de nombreuses erreurs à la compilation, évitant les surprises à l’exécution et les problèmes de déploiement, ce qui accélère le développement itératif et le débogage.
Python est une alternative très proche pour l’expérience de développement, appréciée pour sa syntaxe plus simple et sa popularité en DevOps. Cependant, en raison de son typage dynamique et de sa nature de liaison JSII sur le noyau TypeScript, certaines erreurs ne surfacent qu’à l’exécution, ce qui peut ralentir légèrement le débogage et le développement.
D’autres langages comme Java, C# et Go sont pris en charge mais ont généralement moins de ressources, un tooling moins mûr et donc peuvent offrir une vitesse de développement moins élevée.
Résumé :
Aspect | TypeScript | Python | Autres (Java, C#, Go) |
---|---|---|---|
Implémentation native CDK | Oui | Non | Non |
Typage statique | Fort (à la compilation) | Dynamique (à l’exécution) | Fort (à la compilation) |
Tooling & support IDE | Meilleur (VS Code, complétions) | Bon, mais moins mûr | Moins mûr |
Ressources communautaires | Les plus abondantes | Bonnes, mais moins que TS | Limitées |
Vitesse de développement | Rapide, moins d’erreurs | Plus lente en raison du typage dynamique | Généralement plus lente |
Performance de déploiement | Identique (sortie CloudFormation) | Identique | Identique |
Par conséquent, TypeScript offre la meilleure performance de développement avec AWS CDK, rendant le codage d’infrastructure plus rapide, plus sûr et plus efficace. La performance de déploiement est identique pour tous les langages pris en charge car ils produisent tous les mêmes modèles CloudFormation.
Cela correspond aux directives officielles d’AWS et à l’expérience communautaire large qui soulignent le support natif et optimisé de TypeScript pour le développement avec AWS CDK. Python reste une alternative forte, surtout si votre équipe préfère ce langage ou valorise la simplicité de la syntaxe. D’autres langages sont viables mais généralement moins optimaux pour un développement rapide.
Liens liés à AWS CDK
- https://en.wikipedia.org/wiki/AWS_Cloud_Development_Kit
- https://github.com/aws/aws-cdk
- https://github.com/aws-samples/aws-cdk-examples
- https://docs.aws.amazon.com/cdk/v2/guide/languages.html
- https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/
Autres liens utiles
- Fiche de rappel TypeScript
- [Fiche de rappel Python]({{身 “/post/2024/08/python-cheat-sheet” >}} “Fiche de rappel Python”)
- Performance d’AWS Lambda : JavaScript vs Python vs Golang
- Lambda en couches avec AWS SAM et Python
- AWS SAM + AWS SQS + Python PowerTools
- uv - Nouveau gestionnaire de paquets, de projets et d’environnements Python