Préservez les ressources déployées lors de la refactorisation du code CDK - 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.

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.

Grâce à la refactorisation du AWS Cloud Development Kit (AWS CDK), vous pouvez refactoriser votre code CDK, par exemple en renommant des constructions, en déplaçant des ressources entre des piles et en réorganisant votre application, tout en préservant les ressources déployées au lieu de les remplacer. Cette fonctionnalité vous aide à maintenir les bonnes pratiques d'ingénierie logicielle sans entraîner le remplacement involontaire des ressources.

Qu'est-ce que le refactoring CDK avec préservation des ressources ?

Lorsque vous déployez une application CDK, elle AWS CloudFormation identifie les ressources en fonction de leur logique IDs. Le AWS CDK génère ces logiques en IDs fonction de l'ID de construction et de son chemin dans l'arbre de construction. Si vous modifiez l'ID d'une construction ou si vous la déplacez vers un autre emplacement dans votre code, cela est AWS CloudFormation généralement interprété comme une demande de création d'une nouvelle ressource et de suppression de l'ancienne. Pour les ressources dynamiques 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.

Le refactoring CDK répond à ce défi en :

  • Détecter le moment où des ressources ont été déplacées ou renommées dans votre code.

  • Utilisation des capacités AWS CloudFormation de refactorisation pour préserver les ressources physiques sous-jacentes.

  • Mettre à jour la logique IDs sans remplacer les ressources réelles.

  • Maintenir les références entre les ressources de vos piles.

Vous pouvez effectuer une refactorisation du CDK à l'aide de la cdk refactor commande CDK CLI ou de l'action de la bibliothèque du kit d'outils CDK. refactor 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 Exécuter des actions de programmation à l'aide de la bibliothèque de boîtes à outils CDK.

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 des propriétés des 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 le refactoring pour réorganiser vos ressources.

Avantages du refactoring CDK

La refactorisation des CDK offre les avantages suivants aux développeurs de CDK : AWS

  • Améliorez l'organisation du code : renommez les constructions et réorganisez la structure de votre application CDK sans remplacement de ressources.

  • Création de 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.

  • Limitez les modifications apportées aux bibliothèques tierces : protégez votre application contre les modifications d'identifiant logique dans les bibliothèques de construction dont vous dépendez.

  • Appliquez les meilleures pratiques d'ingénierie logicielle : refactorisez votre code sans compromettre votre infrastructure déployée.

Fonctionnement de la cdk refactor commande CDK CLI

Important

Vous devez fournir l'--unstable=refactoroption avec toutes les commandes qui utilisent cette fonctionnalité.

Tout d'abord, vous déployez votre application CDK initiale pour établir les ressources de base de votre AWS compte. Après avoir refactorisé votre code CDK, par exemple en renommant des constructions ou en déplaçant des ressources entre des piles, utilisez la cdk refactor commande pour commencer 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é, les différences se limitant à leur emplacement dans l'arbre de construction. La CLI CDK génère ensuite un plan de refactorisation qui mappe 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 CloudFormation l'API de refactorisation pour mettre à jour la logique IDs 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 commande CDK CLI. cdk refactor

Notre exemple d'application CDK consiste en une pile unique contenant un compartiment S3, une CloudFront distribution et une fonction Lambda. L'arbre de construction est structuré comme suit :

App └─ MyStack ├─ Bucket ├─ Distribution └─ Function

Voici un exemple du 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 :

  1. Renommez le compartiment de la Bucket manière la plus descriptiveWebsiteOrigin.

  2. Déplacez le compartiment et la distribution vers une nouvelle WebStack pile.

Après la 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 la création AWS CloudFormation de nouvelles ressources et la suppression des anciennes, car la logique IDs changerait :

  • 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 les capacités de refactorisation AWS CloudFormation du CDK pour préserver les ressources sous-jacentes. Lorsque vous l'exécutezcdk refactor, la CLI vous indique 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 entranty, 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 leur logique IDs pour qu'elle corresponde à votre nouvelle structure de code.

Le même mappage est également affiché dans la sortie de la cdk diff commande, organisé 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 avec le refactoring des CDK

Pour commencer à refactoriser, remplissez les conditions préalables suivantes :

Démarrez votre environnement avec le dernier modèle

La fonctionnalité de refactorisation du CDK nécessite de nouvelles autorisations dans la pile bootstrap. Pour vous assurer que vous disposez des autorisations nécessaires, démarrez votre environnement avec le dernier modèle :

cdk bootstrap

Pour plus d'informations sur le bootstrap, consultez la section Environnements d'amorçage pour AWS CDK.

Installez la dernière version de la CLI CDK

La refactorisation du CDK nécessite une version récente de la CLI du CDK. Pour vous assurer que vous disposez de la dernière version :

npm install -g aws-cdk

Pour obtenir des instructions d'installation détaillées, consultez Getting started with the AWS CDK.

Utiliser des fichiers de remplacement pour résoudre les ambiguïtés liées à 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 il existe des situations dans lesquelles 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éation d'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 fichier :

  • Le environments tableau contient une ou plusieurs entrées d'environnement avec un compte et une région.

  • Dans chaque environnement, l'resourcesobjet 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 la CLI 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 du refactoring dans 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 le refactoring séparément dans chaque environnement.

  • Vous pouvez déplacer des ressources entre des piles lors de 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 AWS compte et leur région d'origine, ce qui est nécessaire car les CloudFormation 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 d'une pile à l'autre au sein de l'environnement de développement ou au sein de l'environnement de production, mais pas du développement à la production ou vice versa.

Gestion des ressources conçues pour être remplacées

Certaines constructions CDK s'appuient sur le comportement CloudFormation de remplacement des ressources dans le cadre de leur conception. Par exemple, les Version constructions d'API Gateway Deployment et de Lambda 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 traitées séparément des opérations de refactorisation.

Pour gérer correctement les ressources destinées à être remplacées :

  1. Déployez d'abord votre application pour remplacer ces ressources selon les besoins.

  2. Effectuez ensuite vos opérations de refactorisation séparément pour réorganiser votre code.

Cette approche en deux étapes garantit que les ressources conçues pour être remplacées sont correctement gérées, tout en vous permettant de bénéficier de la refactorisation CDK pour d'autres ressources.

Considérations générales et limites

Lorsque vous préservez les ressources lors de la refactorisation du CDK, tenez compte des considérations suivantes :

  • Contraintes liées à l'environnement : les ressources ne peuvent être déplacées que d'une pile à l'autre dans le même environnement. Les déplacements entre environnements ne sont pas pris en charge.

  • Ambiguïté : si plusieurs ressources identiques sont renommées simultanément, la CLI CDK risque de ne pas être 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 au bootstrap : pour préserver les ressources lors du refactoring, vous devez mettre à jour votre stack bootstrap avec la dernière version qui inclut les autorisations nécessaires.

  • Certaines constructions sont exclues : certaines constructions, telles que celles d'API Gateway Deployment et de Lambda, Version reposent sur le remplacement des ressources et sont automatiquement exclues de la refactorisation.

Refactorisation avec des pipelines CI/CD

Pour utiliser la fonctionnalité de refactorisation dans les CI/CD pipelines, vous devez être en mesure d'exécuter la CLI CDK dans le cadre de votre pipeline. Voici quelques points importants à 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 la CLI pour le déploiement dans votre CI/CD pipeline, votre script se présente généralement comme suit :

... cdk deploy <stack filter> ...

Si vous souhaitez inclure le refactoring dans le flux de travail, voici un exemple de base :

... cdk refactor <stack filter> cdk deploy <stack filter> ...

Vous pouvez également faire du refactoring une étape distincte de votre pipeline.

Gestion des défaillances de refactorisation

Sachez que cela cdk refactor échouera si votre code inclut des modifications réelles des ressources parallèlement à la refactorisation. Comme 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 exécuté un refactorisateur réussi :

# Only deploy if refactoring succeeds cdk refactor <stack filter> && cdk deploy <stack filter>
Bonnes pratiques pour les CI/CD environnements

Pour utiliser efficacement le refactoring dans CI/CD les pipelines :

  • Séparez le refactoring 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, envisagez d'avoir des validations et des déploiements dédiés pour le 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 d'être --force intégré aux pipelines : dans les environnements non interactifs tels que les CI/CD pipelines, la commande CDK refactor est exécutée automatiquement sans demande de confirmation. L'--forceoption n'est nécessaire que dans les environnements interactifs.

Ressources connexes

Pour plus d'informations sur les options et les arguments de la cdk refactor commande CDK CLI, consultez cdk refactor .

Pour commencer à utiliser l'refactoraction de la bibliothèque du kit d'outils CDK, voir Exécuter des actions de programmation à l'aide de la bibliothèque du kit d'outils CDK.