Accéder au contenu principal

Créez votre première pile AWS CDK : Un tutoriel pour les débutants

Apprenez à construire et à déployer votre première pile AWS CDK à l'aide de Python. Ce guide pour débutants couvre l'installation, les constructions, le déploiement, les tests et CI/CD.
Actualisé 22 mai 2025  · 15 min de lecture

La gestion de l'infrastructure cloud avec des modèles JSON ou YAML bruts peut s'avérer fastidieuse et sujette aux erreurs. Le kit de développement cloud AWS (CDK) change la donne en vous permettant de définir des ressources cloud à l'aide de langages de programmation modernes tels que Python, TypeScript, Java et C#.

Avec CDK, l'infrastructure devient un code réutilisable, testable et contrôlé par version. Il vous permet de penser comme un développeur, même lors du provisionnement de systèmes cloud complexes.

Dans ce tutoriel, vous apprendrez à mettre en place un projet AWS CDK à l'aide de Python. Nous verrons comment écrire votre première pile, ajouter une ressource AWS essentielle et la déployer sur votre compte AWS. À la fin, vous comprendrez clairement comment fonctionne CDK et comment l'utiliser pour gérer l'infrastructure d'une manière conviviale pour les développeurs, avec du code.

Pour mieux comprendre les pratiques qui sous-tendent des outils comme AWS CDK, explorez les principes fondamentaux dans notre cours Concepts DevOps.

Conditions préalables

Avant de commencer à écrire du code avec AWS CDK, assurez-vous que votre environnement est correctement configuré. Voici ce dont vous aurez besoin :

Compte AWS pour l'expérimentation

Vous devez avoir accès à un compte AWS pour déployer l'application que nous allons créer. Si votre système est déjà configuré avec les informations d'identification d'un utilisateur de niveau administrateur, n'hésitez pas à passer à l'étape suivante.

Si vous n'avez pas encore de compte AWS, créez-en un ici.

Pour un cursus d'apprentissage structuré couvrant les fondamentaux d'AWS, le parcours AWS Cloud Practitioner est un excellent point de départ.

Utilisateur administrateur

Vous aurez besoin d'un utilisateur disposant d'un accès programmatique et de permissions complètes pour suivre le processus.

  1. Connectez-vous à votre compte AWS.
  2. Ouvrez la console IAM.
  3. Créez un nouvel utilisateur - vous pouvez le nommer quelque chose comme "dataCamp-cdk"
  4. Choisir Accès programmatique.
  5. Cliquez sur Next : Permissions.
  6. Choisissez Joindre directement les politiques existantes et cochez Accès administrateur.
  7. Cliquez sur Suivant : Tags,Suivant : Consultez le site , puiscréez un utilisateur.

Sur le dernier écran, notez votre ID de clé d'accès et votre clé d'accès secrète. Vous en aurez besoin à l'étape suivante.

Configurez vos identifiants AWS

Ouvrez un terminal et exécutez :

aws configure

Vous serez invité à saisir les informations d'identification de la console IAM :

AWS Access Key ID [None]: <your access key ID>
AWS Secret Access Key [None]: <your secret access key>
Default region name [None]: us-east-1
Default output format [None]: 

Choisir un IDE pour le développement

Le CDK AWS permet aux développeurs de travailler dans un environnement de programmation complet au lieu de modèles YAML ou JSON. Cet environnement complet vous permet d'utiliser votre IDE préféré tout en bénéficiant de fonctionnalités de complétion de code, de linting en temps réel et d'outils de refactorisation pour une gestion efficace du code de l'infrastructure.

Pour obtenir la meilleure expérience de développement avec le CDK Python, je vous suggère d'utiliser un IDE qui prend en charge les éléments suivants :

  • Mise en évidence de la syntaxe
  • Achèvement du code
  • Navigation intelligente et suggestions
  • Soutien à l'environnement virtuel

Installez Python et pip

Pour utiliser AWS CDK avec Python, la version 3.8 ou supérieure de Python doit être installée sur votre système. Si vous ne l'avez pas encore, vous pouvez télécharger la dernière version sur le site officiel de Python.

Si vous êtes sous Windows, assurez-vous que Python est ajouté à la variable d'environnement PATH de votre système. Pour vérifier, ouvrez un terminal ou une invite de commande et exécutez :

python --version

Si vous voyez un "command not found" ou une erreur similaire, Python n'est probablement pas sur votre PATH. La solution la plus simple consiste à cocher la case "Add Python 3.x to PATH" lors de l'installation.

Vous aurez également besoin de pip, le programme d'installation de paquets Python, pour installer ultérieurement les dépendances du CDK AWS. La plupart des distributions Python modernes sont livrées avec pip préinstallé.

pip --version

S'il n'est pas installé, suivez le guide d'installation officiel de Pip.

Premiers pas avec AWS CDK

Avant d'écrire le moindre code, il est essentiel de comprendre ce qu'est AWS CDK, pourquoi il existe et comment il s'inscrit dans le monde plus large de l'infrastructure en tant que code (IaC). Cette section vous présentera les concepts de base du CDK et vous montrera comment il se compare à d'autres outils IaC populaires.

Qu'est-ce que le CDK AWS et pourquoi est-il utilisé ?

AWS Cloud Development Kit (CDK) est un framework open-source qui permet aux utilisateurs de créer une infrastructure cloud par le biais de langages de programmation familiers, notamment Python, TypeScript, Java et C#. 

Le CDK permet aux utilisateurs de générer des modèles CloudFormation de manière programmatique par le biais d'un code réel au lieu de nécessiter l'écriture manuelle de modèles JSON ou YAML.

Cela signifie que vous pouvez :

  • Réutiliser la logique à l'aide de boucles et de fonctions.
  • Organisez votre infrastructure à l'aide de modules et de classes.
  • Votre IDE fournit des outils de complétion de code, de vérification des erreurs et de remaniement.

Le CDK s'articule autour de trois concepts principaux :

  • App - Le point d'entrée de votre projet CDK. Il peut contenir une ou plusieurs piles.
  • Pile - Une unité de déploiement qui correspond à une pile CloudFormation. Chaque pile définit un ensemble de ressources à créer.
  • Structure - L'élément constitutif de la CDK. Les constructions représentent les composants du cloud comme les buckets S3, les fonctions Lambda, les VPC et les modèles complexes combinant plusieurs ressources.

Diagramme illustrant la structure AWS CDK : une application contient une pile (par exemple, MyStack), qui comprend trois constructions - Bucket S3, Lambda Function et VPC - connectées dans une hiérarchie descendante.

Hiérarchie visuelle d'une application AWS CDK

CDK vs Terraform vs CloudFormation

Le tableau suivant décrit les différences entre les outils disponibles dans AWS pour gérer l'infrastructure.

Fonctionnalité

AWS CDK

Terraform

AWS CloudFormation

Soutien linguistique

Python, TypeScript, Java, C#

HCL (déclaratif)

YAML / JSON

Niveau d'abstraction

Élevé (OOP + bibliothèques)

Moyen

Faible

Modularité

Fort (constructions, classes)

Fort (modules)

Faible (piles imbriquées)

Gestion de l'État

Géré par CloudFormation

Géré par Terraform (tfstate)

Géré par CloudFormation

Multi-cloud

AWS uniquement

Oui

AWS uniquement

Langues prises en charge et conditions préalables

Le CDK AWS prend en charge plusieurs langages de programmation, ce qui permet aux développeurs de choisir celui avec lequel ils sont le plus à l'aise :

  • TypeScript
  • Python
  • Java
  • C#/.NET
  • Allez

Dans ce tutoriel, nous nous concentrerons sur Python, mais les concepts de base s'appliquent à tous les langages pris en charge.

Installation et configuration

Maintenant que votre environnement est prêt, il est temps d'utiliser Python pour échafauder votre première application AWS CDK. La commande CDK init met en place toute la structure du projet, y compris les fichiers, les répertoires et un environnement virtuel, pour vous aider à démarrer rapidement.

Créer un répertoire de projet

Ouvrez votre terminal et exécutez la commande suivante pour créer un nouveau répertoire et y naviguer :

mkdir cdk_datacamp && cd cdk_datacamp

Initialiser l'application CDK

cdk init sample-app --language python

Cela crée un projet de démarrage préconfiguré avec un exemple de base qui comprend :

  • Un exemple de pile (cdk_datacamp_stack)
  • Une file d'attente SQS souscrite à un sujet SNS
  • Un fichier cdk.json qui configure l'exécution de votre application CDK.
  • Un environnement virtuel (dans .venv) pour les dépendances de Python

Une fois la commande terminée, vous obtiendrez un résultat similaire à celui-ci :

Sortie du terminal AWS CDK pour l'initialisation d'un projet Python, y compris les étapes pour créer et activer manuellement un environnement virtuel, installer les exigences et exécuter cdk synth.

Échafaudage du projet Python CDK 

Configuration de l'environnement virtuel

Si le processus cdk init ne crée pas automatiquement un environnement virtuel, vous pouvez le faire manuellement :

python3 -m venv .venv
source .venv/bin/activate

Une fois activé, installez les dépendances nécessaires :

pip install -r requirements.txt

Comprendre les concepts CDK

Avant de plonger plus profondément dans le code, explorons la manière dont les principaux composants d'AWS CDK - applications, piles et constructions - fonctionnent ensemble dans la pratique. Maintenant que vous savez ce que chacun représente, il est essentiel de voir comment ils interagissent pour former une infrastructure modulaire et évolutive. 

Nous décomposerons également les différents niveaux de construction (L1, L2, L3) et examinerons les bibliothèques de CDK qui rendent cela possible.

Applications, piles et constructions

Maintenant que vous savez ce que sont App, Stack et Construct dans les sections précédentes, nous allons comprendre comment ils fonctionnent ensemble dans une application CDK.

Pensez-y comme à la construction d'une maison :

  • L'App est le projet de construction dans son ensemble.
  • Chaque pile est comme un bâtiment ou une structure distincte dans ce projet.
  • Chaque structure est un composant, comme les murs, les portes ou la plomberie, qui entre dans une pile.

Dans le code, la relation se présente comme suit :

# app.py

from aws_cdk import App
from my_project.my_stack import MyStack

# Initialize the CDK application
app = App()

# Instantiate the stack and add it to the app
MyStack(app, "MyFirstStack")

# Synthesize the CloudFormation template
app.synth()
# my_stack.py

from aws_cdk import Stack
from aws_cdk import aws_s3 as s3
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # Define an Amazon S3 bucket with default settings
        s3.Bucket(self, "MyBucket")

Ici, l'application instancie une pile, qui comprend des constructions telles qu'un seau S3.

Comprendre les niveaux de construction : L1, L2 et L3

Dans AWS CDK, les constructions se déclinent en trois niveaux d'abstraction, ce qui vous offre une certaine souplesse en fonction du degré de contrôle ou de simplicité dont vous avez besoin.

Niveau 1 (L1) - Constructions CloudFormation

Il s'agit des blocs de construction bruts générés directement à partir de la spécification AWS CloudFormation. Chaque ressource AWS dans CloudFormation a une construction L1 équivalente dans CDK ; leurs noms commencent toujours par "Cfn".

Les constructions L1 exposent toutes les options de configuration possibles, mais n'offrent aucune abstraction ou valeur par défaut. Elles sont idéales lorsque vous avez besoin d'un contrôle total ou que vous utilisez des fonctionnalités AWS plus récentes qui ne sont pas encore intégrées dans des constructions de niveau supérieur.

  • Exemple : s3.CfnBucket

Niveau 2 (L2) - Constructions natives d'AWS CDK

Les constructions L2 offrent une abstraction de plus haut niveau et plus conviviale pour les développeurs que les constructions L1. Il s'agit de composants à opinion, avec des valeurs par défaut raisonnables et des méthodes intégrées qui simplifient les tâches quotidiennes. Elles sont conçues pour une utilisation quotidienne et permettent de réduire le nombre de tâches répétitives tout en offrant un bon niveau de personnalisation.

  • Exemple : s3.Bucket - Vous pouvez créer un seau versionné en une seule ligne de code.

Niveau 3 (L3) - Constructions de modèles

Les constructions L3 sont des abstractions qui regroupent plusieurs ressources AWS dans des modèles architecturaux communs. Ils peuvent être fournis par AWS ou construits en tant que composants réutilisables par la communauté ou par vous-même. Utilisez les constructions L3 pour encapsuler la complexité et réutiliser les modèles d'infrastructure dans les projets ou les équipes.

  • Exemple : aws_s3_deployment.BucketDeployment - Combine un seau S3 et une stratégie de déploiement pour automatiser les téléchargements de ressources.

La plupart des développeurs commencent par des constructions L2 et n'introduisent L1 qu'en cas de besoin. L3 devient pratique lorsque votre projet prend de l'ampleur et que vous souhaitez abstraire les modèles répétés pour en faire des composants réutilisables.

Bibliothèques et modules CDK

Vous n'interagissez pas directement avec CloudFormation brut lorsque vous construisez avec AWS CDK. Au lieu de cela, vous utilisez les bibliothèques modulaires de CDK, qui fournissent des constructions pour les services AWS tels que S3, Lambda, IAM, et plus encore. Tous les modules de service AWS sont regroupés dans le paquet de base appelé aws-cdk-lib, et sont ensuite organisés par service.

Bibliothèques couramment utilisées en Python

Vous trouverez ci-dessous quelques-unes des bibliothèques (ou modules) les plus fréquemment utilisées à partir de aws-cdk-lib dans les projets Python :

  • aws_cdk.aws_s3 - Pour créer des buckets S3
  • aws_cdk.aws_lambda - Pour définir les fonctions Lambda
  • aws_cdk.aws_iam - Pour la gestion des rôles et des autorisations
  • aws_cdk.aws_dynamodb - Pour travailler avec les tableaux DynamoDB
  • aws_cdk.aws_ec2 - Pour les composants réseau tels que les VPC et les groupes de sécurité
  • aws_cdk.aws_sns / aws_cdk.aws_sns_subscriptions - Pour les sujets SNS et leurs abonnés

Ces modules ne sont importés qu'en cas de besoin, ce qui permet à votre projet de rester léger et modulaire.

Comment importer et utiliser un module CDK

Pour utiliser un service AWS spécifique, vous importez son module et appelez ses classes de construction. Par exemple, pour créer un godet S3 :

from aws_cdk import aws_s3 as s3

# Inside your stack
bucket = s3.Bucket(self, "MyBucket")

Cet exemple utilise la construction L2 s3.Bucket, qui comprend des valeurs par défaut intégrées telles que le cryptage et les options de versionnement.

Si vous devez utiliser un autre service, il vous suffit d'importer son module de la même manière :

from aws_cdk import aws_lambda as lambda_
from aws_cdk import aws_iam as iam

Note : Sur votre site requirements.txt, vous n'avez généralement besoin que d'une seule personne :

aws-cdk-lib==2.179.0
constructs>=10.0.0,<11.0.0

Ces deux packages vous donnent accès à toutes les constructions AWS CDK et aux fonctionnalités de base du framework.

Création de votre première pile CDK

Après avoir appris les opérations internes du CDK AWS, vous pouvez mettre en œuvre ces connaissances. La section suivante vous guide dans la construction d'une pile CDK opérationnelle à l'aide de Python. Avant de les déployer sur votre compte AWS, vous créerez une structure de projet par le biais du code et mettrez en œuvre des ressources AWS réelles, telles que des buckets S3 et des fonctions Lambda.

Echafaudage d'un nouveau projet

Lorsque vous exécutez la commande cdk init avec l'option --language python, elle met en place une structure de projet complète qui ressemble à ceci :

re vue d'un répertoire de projet AWS CDK avec des fichiers clés comme app.py, cdk.json, requirements.txt, et des dossiers pour le code source de cdk_datacamp et tests/unit/test_cdk_datacamp_stack.py.

Structure des dossiers d'un projet AWS CDK Python

Le fichier app.py est l'endroit où l'application est définie, et le fichier cdk_datacamp_stack.py est l'endroit où vous écrivez le code pour votre pile et vos constructions.

Conseil : Vous pouvez renommer le fichier de pile ou la classe en fonction de l'objectif de votre application, par exemple storage_stack.py ou monitoring_stack.py.

Ajouter des ressources AWS

Ajoutons maintenant quelques ressources AWS à votre pile CDK. Vous écrirez cela dans la méthode __init__() de votre classe Stack dans le fichier cdk_datacamp_stack.py.

Seau S3

from aws_cdk import aws_s3 as s3

# Create an S3 bucket with versioning and managed encryption
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

Fonction lambda

from aws_cdk import aws_lambda as lambda_

# Define a Lambda function using Python 3.9 runtime
lambda_function = lambda_.Function(
    self,
    "MyFunction",
    runtime=lambda_.Runtime.PYTHON_3_9,
    handler="index.handler",
    code=lambda_.Code.from_asset("lambda")  # Load code from local folder named 'lambda'
)

Déploiement de la pile

Une fois que vous avez ajouté vos ressources, il est temps de les déployer sur AWS.

Dans votre terminal, activez votre environnement virtuel et exécutez :

cdk deploy

Ce sera le cas :

  1. Synthétiser votre pile dans un modèle CloudFormation
  2. Téléchargez ce modèle sur AWS
  3. Approvisionner les ressources de votre compte

Vous serez invité à approuver les modifications si c'est la première fois que vous déployez la pile.

Après le déploiement, vous pouvez :

  1. Ouvrez la console AWS
  2. Naviguez vers le service concerné (par exemple, S3, Lambda).
  3. Consultez les ressources que le CDK vient de créer

Travailler avec des constructions CDK

Les applications AWS CDK s'appuient sur des constructions en tant qu'éléments structurels essentiels. Votre code d'infrastructure deviendra plus modulaire, plus facile à maintenir et plus lisible lorsque vous maîtriserez les constructions, que vous utilisiez les constructions de services intégrées ou que vous créiez vos propres modèles réutilisables.

Cette section vous apprend à utiliser les constructions L2 (de haut niveau) et à développer des constructions personnalisées qui réduisent les schémas répétitifs.

Utiliser les concepts de la L2

Les constructions L2 sont des abstractions natives de CDK qui sont plus faciles à utiliser que CloudFormation brut (L1). Ils ont des valeurs par défaut raisonnables et une sécurité de type, ce qui nécessite souvent moins de lignes de code pour configurer une ressource AWS.

Pourquoi utiliser des constructions en L2 ?

  • Moins de formulaires standard - moins de champs obligatoires par rapport à L1
  • Un code Python plus lisible et idiomatique
  • Comprend des méthodes utilitaires telles que .add_to_role_policy() ou .add_event_notification()
  • Gestion automatique des dépendances entre les ressources

Exemple : Création d'un seau S3 à l'aide de L2

from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

La construction équivalente en L1, s3.CfnBucket, nécessiterait que toutes les propriétés soient définies manuellement et que la configuration soit définie sous forme de dictionnaires bruts, ce qui est beaucoup moins intuitif.

Parmi les autres constructions courantes de la L2, on peut citer

  • lambda_.Function() pour AWS Lambda
  • dynamodb.Table() pour DynamoDB
  • sqs.Queue() pour SQS
  • sns.Topic() pour le SNS

Créer des constructions personnalisées

Votre infrastructure se développera avec des schémas récurrents, comme la création de fonctions Lambda avec des autorisations et des buckets S3 particuliers. Les constructions personnalisées constituent la solution idéale pour ce scénario spécifique.

Les constructions personnalisées vous permettent de combiner des ressources connexes en une seule unité logique, qui peut être réutilisée dans des piles ou des projets.

Quand créer une construction personnalisée :

  • Lorsque vous avez plus de 3 ressources qui sont toujours provisionnées ensemble
  • Lorsque vous souhaitez encapsuler une logique réutilisable
  • Lorsque vous souhaitez réduire la duplication du code entre les piles

Exemple : Un modèle S3 + Lambda réutilisable

from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
    def __init__(self, scope: Construct, id: str) -> None:
        super().__init__(scope, id)
        # S3 bucket
        self.bucket = s3.Bucket(self, "MyBucket")

        # Lambda function
        self.function = lambda_.Function(
            self,
            "MyFunction",
            runtime=lambda_.Runtime.PYTHON_3_9,
            handler="index.handler",
            code=lambda_.Code.from_asset("lambda")
        )
        # Grant Lambda access to the S3 bucket
        self.bucket.grant_read_write(self.function)

Vous pouvez maintenant utiliser cette construction à l'intérieur de n'importe quelle pile comme ceci :

from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")

Avant d'exécuter l'opération ci-dessus, créez un dossier nommé lambda à la racine du projet et créez un fichier index.py avec le contenu suivant :

def handler(event, context):
    return {
        "statusCode": 200,
        "body": "Hello from Lambda!"
    }

Conseils de réutilisation

  • Préfixez les fichiers par construct_ ou placez-les dans un dossier constructs/.
  • Exposez des sorties telles que self.bucket ou self.function pour plus de flexibilité.
  • Veillez à ce que chaque construction se concentre sur une seule responsabilité

Test et synthèse des applications CDK

Après avoir écrit votre code d'infrastructure, il est essentiel de vérifier ce que le CDK va déployer et, idéalement, de tester que vos piles se comportent comme prévu. Le CDK AWS fournit des outils pour synthétiser les modèles CloudFormation et écrire des tests automatisés pour détecter les mauvaises configurations avant le déploiement.

Synthèse des modèles

La commande cdk synth génère le modèle CloudFormation à partir de votre code CDK.

cdk synth

Lorsque vous exécutez ce programme, le CDK :

  • Charge votre application (via app.py)
  • Résout toutes les constructions et les piles
  • Produit des modèles CloudFormation YAML/JSON bruts.

modèle AWS CloudFormation synthétisé avec des ressources comprenant une file d'attente SQS, une politique de file d'attente permettant à SNS d'envoyer des messages et une ressource d'abonnement SNS référençant la file d'attente.

Modèle CloudFormation synthétisé 

Par défaut, la sortie s'effectue dans votre terminal, mais vous pouvez également l'effectuer dans un fichier si nécessaire :

cdk synth > template.yaml

Ceci est utile lorsque :

  • Vous souhaitez inspecter le modèle réel avant de le déployer
  • Vous déboguez la structure d'une pile
  • Vous partagez le modèle avec des équipes qui n'utilisent pas CDK

Infrastructure de test

Bien que le test de l'infrastructure en tant que code puisse sembler inhabituel, il est bénéfique, en particulier lorsque vos piles deviennent importantes ou comprennent une logique conditionnelle, des boucles ou des constructions réutilisables.

Le CDK AWS propose le module assertions pour tester les piles synthétisées.

Écrire un test simple avec pytest

Voici un exemple de test qui vérifie si une ressource spécifique (comme un seau S3) est incluse dans la pile :

# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
    app = cdk.App()
    stack = CdkDatacampStack(app, "TestStack")
    template = Template.from_stack(stack)
    # Assert that an S3 bucket exists
    template.resource_count_is("AWS::S3::Bucket", 1)

Pour exécuter les tests, assurez-vous que pytest est installé :

pip install -U pytest

Ensuite, courez :

pytest

Si tout se passe bien, vous verrez apparaître une coche verte. Si ce n'est pas le cas, le résultat du test vous indiquera ce qui manque.

Sortie de pytest sur un environnement Linux utilisant Python 3.11.11 et pytest 8.3.5, montrant que les trois cas de test ont réussi avec des indicateurs verts et un temps d'exécution de 2,89 secondes.      

Sortie de Pytest montrant l'exécution réussie de tous les cas de test pour la pile AWS CDK

Vous pouvez également inclure la validation dans votre pile CDK. Les tests de validation sont des vérifications au moment de l'exécution dans votre code de construction ou de pile qui valident les entrées avant le déploiement. Ils permettent de détecter les mauvaises configurations ou d'appliquer des contraintes dès le début du cycle de développement.

Supposons que nous voulions transmettre le site bucket_name en tant que variable de contexte, mais que nous voulions le valider :

  • Le nom du seau n'est pas vide
  • Il respecte les règles de dénomination du S3 (par exemple, minuscules uniquement).

Créez un fichier nommé test/test_storage_with_lambda.py et ajoutez-y ce qui suit :

import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda

def test_missing_bucket_name():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="bucket_name is required"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name=None)

def test_bucket_name_uppercase():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="must be lowercase"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")

 Pour tester la validation, exécutez la commande suivante :

test/test_storage_with_lambda.py

Sortie de pytest sur un environnement Linux utilisant Python 3.11.11 et pytest 8.3.5, montrant que les trois cas de test ont été réussis avec des indicateurs verts.        

Sortie de Pytest montrant l'exécution réussie de tous les cas de test pour la pile AWS CDK

Quand utiliser les tests ?

  • Vous créez des constructions ou des modèles réutilisables.
  • La mise en œuvre de tests permet d'établir des exigences techniques standard parmi les membres de l'équipe.
  • Vous souhaitez détecter les régressions ou les changements involontaires pendant le processus CI/CD.

Vous souhaitez renforcer vos connaissances sur les CDK lors d'un entretien ? Ces principales questions d'entretien AWS DevOps peuvent vous aider à vous préparer.

Meilleures pratiques et conseils pour travailler avec le CDK AWS

Après avoir maîtrisé la création et le déploiement de la pile CDK, vous devez suivre les meilleures pratiques pour que le code de votre infrastructure reste propre, sécurisé et évolutif. Cette section aborde la manière de structurer les grands projets, de gérer correctement la sécurité et d'intégrer CDK dans les pipelines CI/CD.

Organiser de grands projets

Au fur et à mesure que votre application CDK se développe, il devient essentiel d'organiser le code en unités gérables.

Utilisez plusieurs piles

Répartissez votre infrastructure en fonction de vos préoccupations. Par exemple :

  • NetworkingStack : VPC, sous-réseaux, groupes de sécurité
  • ComputeStack : EC2, Lambda
  • StorageStack : S3, DynamoDB

Cela vous permet de déployer, de tester ou de détruire des parties de votre infrastructure de manière indépendante. Voici comment l'inclure dans le site app.py:

network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")

Vous pouvez également transmettre des ressources entre les piles à l'aide de sorties ou de références.

Créer des constructions imbriquées réutilisables

Encapsulez les ressources connexes (comme une Lambda et ses autorisations) dans une construction personnalisée, comme vous l'avez fait avec StorageWithLambda. Cela améliore la lisibilité et la réutilisation des piles ou des applications.

Utiliser une configuration spécifique à l'environnement

Prendre en charge plusieurs environnements (dev, staging, prod) en utilisant :

  • cdk.json avec des valeurs contextuelles
  • Remplacements de l'interface de programmation : cdk deploy -c env=prod
  • Logique conditionnelle dans vos piles
env = app.node.try_get_context("env")
if env == "prod":
    bucket_name = "mycompany-prod-logs"

Sécurité et autorisations

Tout projet d'infrastructure doit donner la priorité à la sécurité lors des processus de déploiement automatisé d'AWS CDK. La section suivante présente la gestion sécurisée des ressources IAM à l'aide des principes du moindre privilège.

Définir les rôles IAM au lieu d'utiliser les valeurs par défaut

Les constructions CDK, qui incluent des tâches Lambda ou ECS, créeront automatiquement des rôles IAM. Bien que pratique, elle peut limiter votre contrôle sur les autorisations et le nommage.

Définissez plutôt les rôles de manière explicite :

from aws_cdk import aws_iam as iam

execution_role = iam.Role(
    self,
    "LambdaExecutionRole",
    assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
    description="Custom role for Lambda with least privilege",
    managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
    ]
)

Par défaut, ce rôle n'autorise que la journalisation et rien d'autre.

Appliquer le principe du moindre privilège

Évitez d'utiliser "*" dans actions ou resources, sauf en cas d'absolue nécessité.

Exemple :

lambda_fn.add_to_role_policy(
    iam.PolicyStatement(
        actions=["*"],
        resources=["*"]
    )
)

Vous pouvez également utiliser des subventions spécifiques aux ressources lorsqu'elles sont disponibles :

bucket.grant_read(lambda_fn)

Cela génère automatiquement la politique nécessaire avec un accès limité au seau S3.

Utiliser des politiques gérées lorsque c'est possible

Les règles gérées par AWS simplifient la maintenance et réduisent les risques d'erreur.

iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")

Vous pouvez les associer à des rôles personnalisés pour des services tels que ECS, Batch ou Step Functions.

Intégration CI/CD

Le CDK AWS offre une puissance exceptionnelle grâce à sa capacité à s'intégrer aux pipelines CI/CD contemporains. CDK prend en charge la fourniture automatisée d'infrastructures grâce au déploiement de code contrôlé par version, qui fonctionne avec GitHub, GitLab et les services natifs d'AWS, y compris CodePipeline. Le système réduit les erreurs humaines tout en raccourcissant les cycles de retour d'information et permet un déploiement dans des environnements multiples.

Actions GitHub : Automatiser les déploiements de CDK

Vous pouvez utiliser les actions GitHub pour synthétiser, différencier, tester et déployer les piles CDK à chaque demande de téléchargement.

Jetez un coup d'œil à ce site .github/workflows/deploy.yml:

name: Deploy CDK App

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: 3.11

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          npm install -g aws-cdk

      - name: Run unit tests
        run: pytest

      - name: CDK Synth
        run: cdk synth -c environment=prod

      - name: Deploy to AWS
        run: cdk deploy --require-approval never
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

Utilisez cdk diff dans les PR pour prévisualiser les changements infra avant de les fusionner.

Pipelines CDK : CDK natif CI/CD avec CodePipeline

Pour les déploiements entièrement gérés au sein d'AWS, CDK fournit un module appelé aws_cdk.pipelines, qui vous permet de définir l'ensemble de votre pipeline CI/CD en tant que code, tout comme l'infrastructure.

Voici un exemple simplifié :

from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage  # replace with your actual stage import

class PipelineStack(Stack):
    def __init__(
        self,
        scope: Construct,
        construct_id: str,
        **kwargs
    ) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Define the source of the pipeline from a GitHub repository
        source = pipelines.CodePipelineSource.git_hub(
            repo_string="your-org/your-repo",  # GitHub org/repo
            branch="main",
            authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
        )

        # Define the CodePipeline and its synthesis step
        pipeline = pipelines.CodePipeline(
            self,
            "MyAppPipeline",
            synth=pipelines.ShellStep(
                "Synth",
                input=source,
                commands=[
                    "pip install -r requirements.txt",
                    "npm install -g aws-cdk",
                    "cdk synth"
                ]
            )
        )

        # Add an application stage (e.g., production deployment)
        pipeline.add_stage(
            MyAppStage(self, "ProdStage")
        )

Dans le code ci-dessus :

  • SecretValue.secrets_manager("GITHUB_TOKEN") extrait en toute sécurité votre jeton GitHub de Secrets Manager.
  • MyAppStage doit être une classe qui étend Stage et qui englobe vos piles CDK réelles.

Si vous déployez des systèmes d'apprentissage automatique, l'intégration de CDK aux pratiques de déploiement continu est abordée dans notre cours CI/CD pour l'apprentissage automatique.

Conclusion

Ce tutoriel vous a montré comment construire et déployer une infrastructure cloud en Python grâce aux opérations du kit de développement cloud (CDK) d'AWS. Vous avez appris à.. :

  • Créez votre première pile CDK.
  • Définir et valider les buckets S3 et les fonctions Lambda en tant que ressources.
  • Organisez un projet à l'aide de constructions personnalisées et de modèles à plusieurs piles.
  • Appliquer les meilleures pratiques en matière de sécurité en appliquant le principe du moindre privilège.
  • Automatisez les déploiements en combinant les actions GitHub et les pipelines CDK.
  • Rédigez des tests pour valider la logique de votre infrastructure.

Maintenant que vous avez déployé votre première application CDK, voici quelques moyens de progresser :

  • Utiliser des environnements paramétrés pour dev/staging/prod
  • Ajouter des alarmes CloudWatch, API Gateway ou des fonctions Step
  • Explorez les constructions CDK telles que aws_s3_deployment, aws_ecs_patterns, et cdk.pipelines
  • Convertissez vos constructions en une bibliothèque Python interne afin de pouvoir les réutiliser.

Pour continuer à apprendre et à construire, consultez le cours Introduction à AWS Boto en Python.le cours Introduction à AWS Boto en Python!

FAQ

Qu'est-ce que AWS CDK et en quoi est-il différent de CloudFormation ou de Terraform ?

AWS CDK vous permet de définir l'infrastructure cloud à l'aide de langages de programmation comme Python, tandis que CloudFormation et Terraform s'appuient sur JSON/YAML ou HCL. Le CDK offre une plus grande abstraction et une meilleure réutilisation grâce à des constructions.

Dois-je connaître CloudFormation pour utiliser AWS CDK ?

Non, CDK fait abstraction de la majeure partie de la complexité de CloudFormation. Cependant, la compréhension de CloudFormation est utile lorsque vous utilisez des constructions de niveau inférieur ou que vous dépannez des déploiements.

Puis-je déployer plusieurs environnements (par exemple, dev, prod) avec AWS CDK ?

Oui ! CDK prend en charge la configuration spécifique à l'environnement à l'aide de valeurs de contexte et de drapeaux CLI tels que cdk deploy -c env=prod.

Comment puis-je tester mon code d'infrastructure CDK ?

Vous pouvez utiliser pytest avec les assertions de CDK et le module template pour écrire des tests unitaires qui vérifient les ressources et les configurations de votre pile avant le déploiement.

Que se passe-t-il dans les coulisses lorsque j'exécute cdk deploy ?

cdk deploy synthétise votre code Python dans un modèle CloudFormation, le télécharge sur AWS et provisionne les ressources définies dans votre compte.


Rahul Sharma's photo
Author
Rahul Sharma
LinkedIn
Twitter

Rahul Sharma est ambassadeur AWS, architecte DevOps et blogueur technique spécialisé dans le cloud computing, les pratiques DevOps et les technologies open-source. Avec une expertise dans AWS, Kubernetes et Terraform, il simplifie les concepts complexes pour les apprenants et les professionnels à travers des articles et des tutoriels engageants. Rahul est passionné par la résolution des défis DevOps et par le partage des connaissances afin d'aider la communauté technologique.

Sujets

Apprenez-en plus sur AWS grâce à ces cours !

Cours

AWS Concepts

2 h
29.3K
Discover the world of Amazon Web Services (AWS) and understand why it's at the forefront of cloud computing.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow