Gestion des sources d'assemblage cloud de la bibliothèque AWS CDK Toolkit - AWS Kit de développement Cloud (AWS CDK) v2

Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestion des sources d'assemblage cloud de la bibliothèque AWS CDK Toolkit

Utilisez la bibliothèque du kit d'outils AWS CDK pour configurer les sources d'assemblage dans le cloud et personnaliser la façon dont vous déployez vos applications CDK. Ce guide explique comment configurer les sources d'assemblage dans le cloud pour répondre à vos exigences de déploiement et à vos besoins en matière de flux de travail.

Avant d'utiliser le kit d'outils CDK, spécifiez une source d'assemblage cloud. Une source d'assemblage cloud fournit des instructions pour générer un assemblage cloud à partir de votre application CDK. L'assemblage cloud qui en résulte contient les artefacts d'infrastructure synthétisés sur lesquels le CDK Toolkit est déployé. AWS

La bibliothèque CDK Toolkit propose plusieurs approches pour configurer les sources d'assemblage dans le cloud, chacune adaptée à différents scénarios et flux de travail.

Sélection d'une source d'assemblage dans le cloud

Méthode Idéal pour Considération

fromCdkApp

Travailler avec des applications CDK existantes dans n'importe quelle langue prise en charge.

Nécessite l'installation du langage d'exécution approprié.

fromAssemblyBuilder

Création de constructions CDK en ligne avec un contrôle total sur le processus de synthèse.

Fournit un accès de bas niveau aux fonctionnalités du CDK et peut être utilisé pour créer des versions personnalisées d'autres méthodes telles que. fromCdkApp

fromAssemblyDirectory

Utilisation d'assemblages cloud présynthétisés.

Exécution plus rapide car l'étape de synthèse est ignorée.

Source personnalisée

Scénarios extrêmement spécialisés nécessitant une mise en œuvre personnalisée complète.

Nécessite l'implémentation de l'ICloudAssemblySourceinterface à partir de zéro ; manque de fonctionnalités intégrées telles que les recherches contextuelles ; rarement nécessaire dans la plupart des cas d'utilisation.

Configuration de votre source d'assemblage dans le cloud

À partir d'une application CDK existante

Utilisez fromCdkApp cette méthode pour travailler avec des applications CDK écrites dans n'importe quelle langue prise en charge. Cette approche est idéale lorsque vous avez une application CDK existante et que vous souhaitez la déployer par programmation.

import { App } from 'aws-cdk-lib'; import { Toolkit } from '@aws-cdk/toolkit-lib'; // Create a toolkit instance const toolkit = new Toolkit(); // TypeScript app const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Deploy a specific stack from the assembly await toolkit.deploy(cloudAssemblySource, { stacks: ['MyStack'] }); // Other language examples: // JavaScript app // const cloudAssemblySource = await toolkit.fromCdkApp("node app.js"); // Python app // const cloudAssemblySource = await toolkit.fromCdkApp("python app.py"); // Java app // const cloudAssemblySource = await toolkit.fromCdkApp("mvn -e -q exec:java -Dexec.mainClass=com.mycompany.app.App");

À partir d'un constructeur d'assemblages en ligne

Créez une application CDK directement dans votre code à l'aide d'une fonction de création d'assemblages. Cette approche est utile pour les déploiements simples ou les scénarios de test dans lesquels vous souhaitez définir votre infrastructure en ligne.

import { App, Stack, RemovalPolicy, StackProps } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { Toolkit } from '@aws-cdk/toolkit-lib'; import { Construct } from 'constructs'; // Create a cloud assembly source from an inline CDK app const cloudAssemblySource = await toolkit.fromAssemblyBuilder(async () => { const app = new App(); // Define a simple stack with an S3 bucket class MyStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Create an S3 bucket new Bucket(this, 'MyBucket', { versioned: true, removalPolicy: RemovalPolicy.DESTROY, autoDeleteObjects: true }); } } // Instantiate the stack new MyStack(app, 'MyInlineStack'); return app.synth(); }); // Deploy using the cloud assembly source await toolkit.deploy(cloudAssemblySource, { stacks: ['MyInlineStack'] });

À partir d'un répertoire d'assemblage existant

Si vous disposez déjà d'un assemblage cloud synthétisé, vous pouvez l'utiliser directement. Cela est utile lorsque vous avez déjà exécuté cdk synth ou lorsque vous travaillez avec des assemblages cloud générés par des pipelines CI/CD.

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Create a toolkit instance const toolkit = new Toolkit(); // Use an existing cloud assembly directory const cloudAssemblySource = await toolkit.fromAssemblyDirectory("cdk.out"); // Deploy using the cloud assembly source await toolkit.deploy(cloudAssemblySource, { stacks: ['MyStack'] });

Utilisation d'assemblages cloud mis en cache

Lorsque vous travaillez avec des assemblages cloud, deux options s'offrent à vous :

  1. Utilisez directement une source d'assemblage dans le cloud (c'est simple mais peut être plus lent) :

    // Each operation triggers a new synthesis await toolkit.deploy(cloudAssemblySource, { /* options */ }); await toolkit.list(cloudAssemblySource, { /* options */ });
  2. Mettez en cache l'assemblage cloud (plus rapide pour plusieurs opérations) :

    // Synthesize once and reuse const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // Multiple operations use the same assembly await toolkit.deploy(cloudAssembly, { /* options */ }); await toolkit.list(cloudAssembly, { /* options */ }); } finally { // Clean up when done await cloudAssembly.dispose(); }

Utilisez des assemblages mis en cache lorsque :

  • Vous effectuez plusieurs opérations (déploiement, liste, comparaison, etc.).

  • Votre application CDK ne change pas fréquemment pendant les opérations.

  • Vous voulez des performances plus rapides.

Utilisez directement les sources d'assemblage dans le cloud lorsque :

  • Vous n'effectuez qu'une seule opération.

  • Votre application CDK change fréquemment.

  • Vous voulez un code plus simple et vous n'avez pas besoin de prioriser la vitesse de fonctionnement du Toolkit.

Important

La plupart des interactions avec le Toolkit doivent utiliser un assembly mis en cache pour de meilleures performances. Le seul moment où vous pouvez éviter la mise en cache est lorsque votre source change fréquemment et que la vérification des modifications s'avère coûteuse.

Comment créer, mettre en cache et réutiliser des assemblages cloud

Après avoir créé une source d'assemblage cloud, vous pouvez générer un assemblage cloud en le synthétisant. Un assembly cloud contient les AWS CloudFormation modèles et les ressources nécessaires au déploiement.

Nous vous recommandons de générer un assemblage cloud une seule fois et de le réutiliser pour plusieurs opérations du Toolkit. Cette approche de mise en cache est plus efficace que la régénération de l'assemblage pour chaque opération. Pensez à régénérer l'assemblage uniquement lorsque votre source change fréquemment.

Voici comment créer un assemblage cloud mis en cache :

// Generate a cloud assembly from your source const cloudAssembly = await toolkit.synth(cloudAssemblySource);

Vous pouvez ensuite effectuer diverses actions du Toolkit sur l'assembly cloud mis en cache, telles que list()deploy(), etdiff(). En mettant en cache les assemblages cloud, les actions suivantes du Toolkit sont exécutées plus rapidement, car la synthèse n'a lieu qu'une seule fois. Pour plus d'informations, consultez Synth - Generate cloud assemblies.

Éliminez les ressources d'assemblage dans le cloud

Éliminez toujours les assemblages cloud lorsque vous avez fini de les utiliser pour nettoyer des ressources temporaires. Nous vous recommandons d'utiliser un bloc try/finally pour garantir un nettoyage correct, en particulier lorsque vous effectuez plusieurs opérations :

// Generate a cloud assembly const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // Use the cloud assembly for multiple operations await toolkit.list(cloudAssembly); await toolkit.deploy(cloudAssembly); } finally { // Always dispose when done await cloudAssembly.dispose(); }

Voici un exemple montrant comment créer et supprimer un assembly cloud mis en cache :

import { Toolkit } from '@aws-cdk/toolkit-lib'; const toolkit = new Toolkit(); // Create cloud assembly source from a CDK app const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Create cloud assembly from source const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // List stacks in the assembly await toolkit.list(cloudAssembly); // Check for changes await toolkit.diff(cloudAssembly); // Deploy if needed await toolkit.deploy(cloudAssembly); } finally { // Always dispose when done await cloudAssembly.dispose(); }

Comprendre la durée de vie des assemblages dans le cloud

Lorsque vous créez un assemblage cloud mis en cache à l'aide desynth(), vous obtenez un type spécial qui sert à la fois de lisible CloudAssembly et deCloudAssemblySource. Tous les assemblages cloud produits à partir de cet assemblage mis en cache (par exemple, à partir d'opérations de liste ou de déploiement) sont liés à la durée de vie du parent :

  • Seul l'appel dispose () du parent nettoie réellement les ressources

  • Les assemblages cloud issus des opérations de liste/déploiement sont gérés par leur parent

  • Le fait de ne pas supprimer un assembly cloud mis en cache est considéré comme un bogue

Bonnes pratiques pour les sources d'assemblage dans le cloud

Lorsque vous travaillez avec des sources d'assemblage dans le cloud, tenez compte des meilleures pratiques suivantes :

  • Choisissez la bonne méthode source : sélectionnez l'approche qui correspond le mieux à votre flux de travail et à vos exigences.

  • Cache les assemblages cloud : générez un assemblage cloud une fois que vous l'utilisez synth() et réutilisez-le pour plusieurs opérations afin d'éviter toute synthèse inutile, en particulier pour les applications volumineuses.

  • Gestion des erreurs : implémentez une gestion des erreurs de base pour détecter et afficher les erreurs aux utilisateurs. Simplifiez la gestion des erreurs et concentrez-vous sur la fourniture de messages d'erreur clairs.

  • Compatibilité des versions : assurez-vous que la version de votre bibliothèque CDK Toolkit peut prendre en charge les assemblages cloud avec lesquels vous travaillez. Si la bibliothèque Construct utilisée pour créer l'assemblage cloud est plus récente que celle prise en charge par votre bibliothèque de boîtes à outils, vous recevrez un message d'erreur.

  • Variables d'environnement : sachez que certaines variables d'environnement peuvent affecter la synthèse et le déploiement des assemblages dans le cloud. Des variables telles que CDK_DEFAULT_ACCOUNTCDK_DEFAULT_REGION,CDK_OUTDIR, et CDK_CONTEXT_JSON peuvent remplacer les comportements par défaut. Assurez-vous qu'ils sont définis de manière appropriée pour votre environnement de déploiement.

L'exemple suivant montre comment implémenter la gestion des erreurs et un nettoyage approprié tout en réutilisant un assemblage cloud pour plusieurs opérations :

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Example with error handling and proper cleanup async function deployInfrastructure(): Promise<void> { let cloudAssembly; try { // Generate a cloud assembly once cloudAssembly = await toolkit.synth(cloudAssemblySource); // Reuse the same cloud assembly for multiple operations await toolkit.list(cloudAssembly); // Uses existing assembly await toolkit.deploy(cloudAssembly); // Uses existing assembly await toolkit.diff(cloudAssembly); // Uses existing assembly } catch (error) { console.error("Failed to deploy:", error); } finally { // Always dispose when done if (cloudAssembly) { await cloudAssembly.dispose(); } } } // Call the async function deployInfrastructure().catch(error => { console.error("Deployment failed:", error); process.exit(1); });

Résoudre les problèmes potentiels

Suivez ces étapes pour résoudre les problèmes potentiels liés aux sources d'assemblage dans le cloud :

  • Installer les dépendances manquantes : Exécutez npm install pour installer les dépendances requises pour votre application CDK.

  • Résoudre les problèmes de chemin : vérifiez que les chemins d'accès aux applications CDK et aux répertoires d'assemblage existent et sont accessibles.

  • Résolvez les incohérences de version : mettez à jour la version de votre bibliothèque CDK Toolkit pour qu'elle corresponde à la version de votre application CDK.

  • Corrigez les erreurs de synthèse : vérifiez le code de votre application CDK pour détecter les erreurs de syntaxe ou les configurations non valides.

Lorsque des erreurs se produisent pendant le fonctionnement du Toolkit, maintenez la gestion des erreurs simple et concentrez-vous sur l'envoi de messages d'erreur clairs aux utilisateurs. Éliminez toujours les assemblages cloud lorsque vous avez fini de les utiliser. Voici un exemple illustrant la gestion de base des erreurs avec un nettoyage approprié :

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Example with simple error handling try { // Create the cloud assembly source const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Synthesize the cloud assembly const cloudAssembly = await toolkit.synth(cloudAssemblySource); // Use the cloud assembly await toolkit.list(cloudAssembly); } catch (error) { // Display the error message console.error("Operation failed:", error.message); } finally { // Clean up resources await cloudAssembly.dispose(); }