C'est le AWS Guide du développeur 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.
Préservez les ressources déployées lors de la refactorisation du code CDK
Important
La refactorisation du CDK est en version préliminaire et est sujette à modification.
Avec AWS Kit de développement cloud (AWS Grâce à la refactorisation (CDK), vous pouvez refactoriser votre code CDK, par exemple en renommant des constructions, en déplaçant des ressources entre les piles et en réorganisant votre application, tout en préservant les ressources déployées au lieu de les remplacer. Cette fonctionnalité vous permet de maintenir les bonnes pratiques d'ingénierie logicielle sans entraîner de remplacements involontaires de ressources.
Qu'est-ce que le refactoring CDK avec préservation des ressources ?
Lorsque vous déployez une application CDK, AWS CloudFormation identifie les ressources par leurs identifiants logiques. Le AWS CDK génère ces identifiants logiques en fonction de l'ID de construction et de son chemin dans l'arbre de construction. Si vous modifiez l'identifiant d'une construction ou si vous la déplacez vers un autre emplacement dans votre code, AWS CloudFormation interprète généralement cela comme une demande de création d'une nouvelle ressource et de suppression de l'ancienne. Pour les ressources avec état telles que les bases de données, les compartiments de stockage ou les files d'attente, ce remplacement peut entraîner des interruptions de service ou des pertes de données.
Astuce
Vous pouvez empêcher de manière proactive les modifications d'ID logiques lorsque vous extrayez des ressources dans des constructions de niveau supérieur. En utilisant Default en tant qu'ID de construction pour la ressource principale dans une construction wrapper, l'ID logique reste inchangé. Pour plus d'informations, voir Heuristique des composants du chemin d'identification logique.
La refactorisation du CDK permet de relever ce défi en :
-
Détecter quand des ressources ont été déplacées ou renommées dans votre code.
-
En utilisant AWS CloudFormationcapacités de refactorisation pour préserver les ressources physiques sous-jacentes.
-
Mettre à jour les identifiants logiques sans remplacer les ressources réelles.
-
Maintien des références entre les ressources de vos piles.
Vous pouvez effectuer la refactorisation du CDK à l'aide de l'interface de ligne de commande CDK cdk refactor commande de la bibliothèque CDK Toolkit refactor action. Ce guide traite principalement de l'approche CLI, mais les principes sous-jacents s'appliquent aux deux méthodes. Pour plus d'informations sur l'utilisation de la bibliothèque de boîtes à outils, voir Effectuez des actions programmatiques à l'aide de la bibliothèque CDK Toolkit.
Important
Les opérations de refactorisation doivent être effectuées seules, séparément des autres actions, telles que l'ajout de nouvelles ressources, la suppression de ressources ou la modification de propriétés de ressources.
Si vous devez ajouter, supprimer ou modifier des ressources ainsi que les refactoriser, vous devez d'abord déployer ces modifications séparément, puis utiliser la refactorisation pour réorganiser vos ressources.
Avantages du refactoring CDK
Le refactoring CDK offre les avantages suivants pour AWS Développeurs CDK :
-
Améliorer l'organisation du code — Renommez les constructions et réorganisez la structure de votre application CDK sans remplacer les ressources.
-
Créez des composants réutilisables — Extrayez le code dupliqué dans des constructions L3 réutilisables tout en préservant les ressources déployées.
-
Améliorez la séparation architecturale — Déplacez les ressources entre les piles pour mieux isoler les différentes parties de votre application.
-
Empêcher le remplacement accidentel des ressources — Évitez de recréer involontairement des ressources lorsque vous renommez des constructions.
-
Atténuer les modifications apportées aux bibliothèques tierces — Protégez votre application contre les modifications d'ID logiques dans les bibliothèques de construction dont vous dépendez.
-
Appliquer les meilleures pratiques d'ingénierie logicielle — Refactorisez votre code sans compromettre votre infrastructure déployée.
Comment fonctionne la CLI CDK refactor cdk la commande fonctionne
Important
Vous devez fournir le --unstable=refactor option avec toutes les commandes utilisant cette fonctionnalité.
Tout d'abord, vous déployez votre application CDK initiale pour établir des ressources de base dans votre AWS compte. Après avoir remanié votre code CDK, par exemple en renommant des constructions ou en déplaçant des ressources entre les piles, utilisez cdk refactor commande pour démarrer le processus de refactorisation de vos ressources déployées.
Lorsque vous exécutez la commande refactor, la CLI CDK détecte vos modifications locales en comparant votre code actuel à l'état déployé. Il vérifie que votre application CDK contient exactement le même ensemble de ressources que l'état déployé, avec des différences uniquement par leur emplacement dans l'arbre de construction. La CLI CDK génère ensuite un plan de refactorisation qui met en correspondance les anciens emplacements des ressources avec leurs nouveaux emplacements. La CLI CDK vous montre les modifications proposées et, après votre confirmation, utilise AWS CloudFormationde l'API de refactorisation pour mettre à jour les identifiants logiques des ressources sans les remplacer.
Dans les coulisses, la CLI CDK détermine quelles ressources ont été déplacées en comparant leurs propriétés et leurs dépendances, en identifiant les ressources qui sont fonctionnellement équivalentes mais qui ont des chemins différents dans l'arbre de construction. S'il détecte des ajouts, des suppressions ou des modifications de ressources, l'opération de refactorisation sera rejetée avec un message d'erreur.
Exemple de préservation des ressources lors de la refactorisation du code CDK
Dans cet exemple, nous préservons les ressources déployées tout en refactorisant notre code CDK à l'aide de la CLI CDK cdk refactor commande.
Notre exemple d'application CDK consiste en une pile unique contenant un compartiment S3, un CloudFront distribution et une fonction Lambda. L'arbre de construction est structuré comme suit :
App └─ MyStack ├─ Bucket ├─ Distribution └─ Function
Voici un exemple de code de notre application :
const app = new cdk.App(); const myStack = new cdk.Stack(app, 'MyStack'); const bucket = new s3.Bucket(myStack, 'Bucket'); const distribution = new cloudfront.Distribution(myStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Maintenant, imaginez que vous vouliez refactoriser ce code pour :
-
Renommez le compartiment à partir de
Bucketvers le plus descriptifWebsiteOrigin. -
Déplacer le godet et la distribution vers un nouveau
WebStackpile.
Après refactorisation, l'arbre de construction ressemblerait à ceci :
App ├─ WebStack │ ├─ WebsiteOrigin │ └─ Distribution └─ MyStack └─ Function
Et le code refactorisé serait :
// Refactored structure const app = new cdk.App(); // New WebStack with the bucket and distribution const webStack = new cdk.Stack(app, 'WebStack'); const bucket = new s3.Bucket(webStack, 'WebsiteOrigin'); const distribution = new cloudfront.Distribution(webStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); // Original MyStack with just the function const myStack = new cdk.Stack(app, 'MyStack'); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Sans la refactorisation du CDK, ces modifications entraîneraient AWS CloudFormation pour créer de nouvelles ressources et supprimer les anciennes, car les identifiants logiques changeraient :
-
MyStack/Bucket/ResourcedeviendraitWebStack/WebsiteOrigin/Resource. -
MyStack/Distribution/ResourcedeviendraitWebStack/Distribution/Resource.
Avec le refactoring CDK, la CLI CDK détecte ces changements de chemin et utilise AWS CloudFormationses capacités de refactorisation afin de préserver les ressources sous-jacentes. Quand tu cours cdk refactor, la CLI vous montre les modifications qu'elle va apporter :
$ cdk refactor The following resources were moved or renamed: ┌───────────────────────────────┬───────────────────────────────┬───────────────────────────────────┐ │ Resource Type │ Old Construct Path │ New Construct Path │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::S3::Bucket │ MyStack/Bucket/Resource │ WebStack/WebsiteOrigin/Resource │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::CloudFront::Distribution │ MyStack/Distribution/Resource │ WebStack/Distribution/Resource │ └───────────────────────────────┴───────────────────────────────┴───────────────────────────────────┘ Do you wish refactor these resources (y/n)?
Lorsque vous confirmez en saisissant y, la CLI CDK indique la progression de l'opération de refactorisation :
Refactoring... ✅ Stack refactor complete
Après confirmation, la CLI CDK exécute l'opération de refactorisation, préservant les deux ressources tout en mettant à jour leurs identifiants logiques pour qu'ils correspondent à votre nouvelle structure de code.
Le même mappage est également affiché dans la sortie du cdk diff commande, organisée par pile :
Stack MyStack Resources [-] AWS::S3::Bucket Bucket Bucket1234567 destroy (OR move to WebStack.WebsiteOrigin1234567 via refactoring) [-] AWS::CloudFront::Distribution Distribution Distribution1234567 destroy (OR move to WebStack.Distribution1234567) ... Stack WebStack Resources [+] AWS::S3::Bucket WebsiteOrigin WebsiteOrigin1234567 (OR move from MyStack.Bucket1234567) [+] AWS::CloudFront::Distribution Distribution Distribution1234567 (OR move from MyStack.Distribution1234567) ...
Commencez à refactoriser le CDK
Pour commencer à refactoriser, remplissez les conditions préalables suivantes :
- Bootstrap votre environnement avec le dernier modèle
-
La fonctionnalité de refactorisation du CDK nécessite de nouvelles autorisations dans la pile d'amorçage. Pour vous assurer que vous disposez des autorisations nécessaires, démarrez votre environnement avec le dernier modèle :
cdk bootstrapPour plus d'informations sur le bootstrapping, voir Environnements d'amorçage pour AWS CDK.
- Installez la dernière version de la CLI CDK
-
Le refactoring du CDK nécessite une version récente de l'interface de ligne de commande du CDK. Pour vous assurer que vous disposez de la dernière version :
npm install -g aws-cdkPour des instructions d'installation détaillées, voir Commencer à utiliser le kit de développement AWS.
Utiliser des fichiers de remplacement pour résoudre les ambiguïtés lors de la refactorisation
La CLI CDK calcule automatiquement tous les mappages de ressources en comparant votre code aux ressources déployées. Dans la plupart des cas, cette détection automatique fonctionne bien, mais dans certains cas, la CLI peut rencontrer des ambiguïtés qu'elle ne peut résoudre seule. Pour fournir des conseils à la CLI CDK, utilisez un fichier de remplacement.
- Créez un fichier de remplacement pour résoudre les ambiguïtés
-
Un fichier de remplacement est un fichier JSON qui fournit des mappages lorsque la CLI CDK n'est pas en mesure de déterminer une résolution de refactorisation pour les ressources. Le fichier contient des mappages de ressources organisés par environnement :
{ "environments": [ { "account": "123456789012", "region": "us-east-2", "resources": { "StackA.OldName": "StackB.NewName", "StackC.Foo": "StackC.Bar" } } ] }Dans ce dossier :
-
Le
environmentsle tableau contient une ou plusieurs entrées d'environnement avec le compte et la région. -
Dans chaque environnement,
resourcesl'objet contient les mappages. -
Les clés représentent les emplacements actuels dans le format
<stack name>.<logical ID>. -
Les valeurs représentent les nouveaux emplacements dans le même format.
Pour utiliser un fichier de remplacement avec l'interface de ligne de commande CDK :
cdk refactor --override-file=overrides.json -
Refactorisation des piles dans plusieurs environnements
Une application CDK peut contenir plusieurs piles déployées dans différents environnements (AWS comptes et régions). Lors de la préservation des ressources lors de la refactorisation de telles applications, la CLI CDK gère les environnements d'une manière spécifique :
-
La CLI regroupe les piles par environnement et effectue la refactorisation séparément dans chaque environnement.
-
Vous pouvez déplacer des ressources entre les piles pendant la refactorisation, mais toutes les piles impliquées dans le déplacement doivent se trouver dans le même environnement.
-
Toute tentative de déplacement de ressources d'un environnement à l'autre entraînera une erreur.
Ce comportement garantit que les ressources restent dans leur état d'origine AWS compte et région, ce qui est nécessaire car CloudFormation les ressources ne peuvent pas être déplacées physiquement au-delà des limites du compte ou de la région.
Par exemple, si votre application CDK définit des piles pour les environnements de développement et de production, l'opération de refactorisation sera effectuée indépendamment dans chaque environnement. Les ressources peuvent être déplacées entre les piles au sein de l'environnement de développement ou de production, mais pas du développement à la production ou vice versa.
Gestion des ressources destinées à être remplacées
Certaines constructions CDK s'appuient sur CloudFormationdu comportement de remplacement des ressources dans le cadre de leur conception. Par exemple, API Gateway Deployment et Lambda Version les constructions sont conçues pour créer de nouvelles ressources lorsque leurs propriétés changent.
Lors de la refactorisation, n'incluez aucune modification susceptible d'entraîner le remplacement des ressources. Dans le cas contraire, la CLI CDK peut détecter et préserver ces ressources. Cela signifie que les ressources conçues pour être remplacées doivent être gérées séparément des opérations de refactoring.
Pour gérer correctement les ressources destinées à être remplacées :
-
Tout d'abord, déployez votre application pour remplacer ces ressources selon les besoins.
-
Effectuez ensuite vos opérations de refactorisation séparément pour réorganiser votre code.
Cette approche en deux étapes garantit que les ressources destinées à être remplacées sont gérées correctement, tout en vous permettant de bénéficier de la refactorisation du CDK pour les autres ressources.
Considérations générales et limites
Lorsque vous préservez des ressources lors de la refactorisation du CDK, tenez compte des considérations suivantes :
-
Contraintes environnementales: Les ressources ne peuvent être déplacées que d'une pile à l'autre dans le même environnement. Cross-environment les mouvements ne sont pas pris en charge.
-
Ambiguïté: Si plusieurs ressources identiques sont renommées simultanément, il est possible que la CLI CDK ne soit pas en mesure de déterminer automatiquement le mappage correct. Dans ces cas, vous devrez fournir un mappage explicite à l'aide d'un fichier de remplacement.
-
Exigences relatives à Bootstrap: pour préserver les ressources pendant le refactoring, vous devez mettre à jour votre pile d'amorçage avec la dernière version qui inclut les autorisations nécessaires.
-
Certaines constructions exclues: Certaines constructions, comme celle d'API Gateway
Deploymentet LambdaVersiondépendent du remplacement des ressources et sont automatiquement exclus du refactoring.
Refactorisation avec CI/CD pipelines
Pour utiliser la fonction de refactorisation dans CI/CD pipelines, vous devez être capable d'exécuter la CLI CDK dans le cadre de votre pipeline. Voici quelques considérations importantes à prendre en compte pour intégrer le refactoring dans votre CI/CD flux de travail.
- Conditions préalables à l'utilisation de la refactorisation dans CI/CD
-
Vous devez être en mesure d'utiliser la CLI CDK dans votre CI/CD environnement pour bénéficier de cette fonctionnalité.
- Intégrer le refactoring dans le flux de travail de votre pipeline
-
Si vous utilisez l'interface de ligne de commande pour le déploiement dans votre CI/CD pipeline, votre script ressemble généralement à ceci :
... cdk deploy <stack filter> ...Si vous souhaitez inclure la refactorisation dans le flux de travail, voici un exemple de base :
... cdk refactor <stack filter> cdk deploy <stack filter> ...Vous pouvez également faire de la refactorisation une étape distincte de votre pipeline.
- Gestion des échecs de refactorisation
-
Sachez que
cdk refactoréchouera si votre code inclut des modifications de ressources réelles en plus de la refactorisation. Puisque vous appelez refactor automatiquement dans votre pipeline, vous devez gérer les défaillances potentielles :# Allow refactoring to fail but continue the pipeline cdk refactor <stack filter> || true cdk deploy <stack filter>Vous pouvez également vous assurer qu'aucun déploiement n'a lieu tant que vous n'avez pas effectué une refactorisation réussie :
# Only deploy if refactoring succeeds cdk refactor <stack filter> && cdk deploy <stack filter> - Meilleures pratiques pour CI/CD environnements
-
Pour utiliser efficacement le refactoring dans CI/CD canalisations :
-
Refactorisation distincte des autres modifications: N'oubliez pas que les opérations de refactorisation doivent être distinctes des ajouts, suppressions ou modifications de ressources. Dans votre pipeline, pensez à disposer de commits et de déploiements dédiés au refactoring.
-
Utilisez les fichiers de remplacement de manière appropriée: Sachez que les fichiers de remplacement ne sont utilisés par la CLI CDK que comme solution de secours pour résoudre les cas d'ambiguïté.
-
Pas besoin de
--forcedans les canalisations: dans des environnements non interactifs tels que CI/CD pipelines, la commande CDK refactor se poursuit automatiquement sans demander de confirmation. Le--forcel'option n'est nécessaire que dans les environnements interactifs.
-
Ressources connexes
Pour plus d'informations sur les options et les arguments de la CLI CDK cdk refactor commande, voir
cdk refactor
.
Pour commencer à utiliser la bibliothèque CDK Toolkit refactor action, voir Effectuez des actions programmatiques à l'aide de la bibliothèque CDK Toolkit.