Questa è la AWS CDK v2 Developer Guide. Il vecchio CDK v1 è entrato in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Conserva le risorse distribuite durante il refactoring del codice CDK
Importante
Il refactoring CDK è disponibile in anteprima ed è soggetto a modifiche.
Con il refactoring del AWS Cloud Development Kit (AWS CDK), puoi eseguire il refactoring del codice CDK, ad esempio rinominando i costrutti, spostando le risorse tra gli stack e riorganizzando l'applicazione, preservando al contempo le risorse distribuite anziché sostituirle. Questa funzionalità ti aiuta a mantenere buone pratiche di ingegneria del software senza comportare sostituzioni involontarie delle risorse.
Cos'è il refactoring CDK con conservazione delle risorse?
Quando si distribuisce un'applicazione CDK, AWS CloudFormation identifica le risorse in base ai loro ID logici. Il AWS CDK genera questi ID logici in base all'ID del costrutto e al relativo percorso nell'albero dei costrutti. Se si modifica l'ID di un costrutto o lo si sposta in una posizione diversa nel codice, in AWS CloudFormation genere lo interpreta come una richiesta di creazione di una nuova risorsa ed eliminazione di quella precedente. Per le risorse con stato come database, bucket di archiviazione o code, questa sostituzione può causare interruzioni del servizio o perdita di dati.
Suggerimento
È possibile impedire in modo proattivo le modifiche logiche degli ID quando si estraggono risorse in costrutti di livello superiore. Se viene utilizzato Default come ID di costrutto per la risorsa principale in un costrutto wrapper, l'ID logico rimane invariato. Per ulteriori informazioni, vedere Euristica dei componenti del percorso dell'ID logico.
Il refactoring CDK risolve questa sfida mediante:
-
Rileva quando le risorse sono state spostate o rinominate nel codice.
-
Utilizza le funzionalità AWS CloudFormation di refactoring per preservare le risorse fisiche sottostanti.
-
Aggiornamento degli ID logici senza sostituire le risorse effettive.
-
Mantenimento dei riferimenti tra le risorse nei tuoi stack.
È possibile eseguire il refactoring CDK utilizzando il cdk refactor comando CDK CLI o l'azione della libreria CDK Toolkit. refactor Questa guida illustra principalmente l'approccio CLI, ma i principi di base si applicano a entrambi i metodi. Per informazioni sull'uso della libreria Toolkit, consulta Eseguire azioni programmatiche utilizzando la libreria CDK Toolkit.
Importante
Le operazioni di refactoring devono essere eseguite da sole, separatamente dalle altre azioni, come aggiungere nuove risorse, eliminare risorse o modificare le proprietà delle risorse.
Se è necessario aggiungere, eliminare o modificare risorse oltre al refactoring, è necessario innanzitutto distribuire tali modifiche separatamente e quindi utilizzare il refactoring per riorganizzare le risorse.
Vantaggi del refactoring CDK
Il refactoring CDK offre i seguenti vantaggi per gli sviluppatori CDK: AWS
-
Migliora l'organizzazione del codice: Rename, costruisce e riorganizza la struttura dell'applicazione CDK senza sostituire le risorse.
-
Crea componenti riutilizzabili: estrai il codice duplicato in costrutti L3 riutilizzabili preservando le risorse distribuite.
-
Migliora la separazione architettonica: sposta le risorse tra gli stack per isolare meglio le diverse parti dell'applicazione.
-
Impedisci la sostituzione accidentale delle risorse: evita la ricreazione involontaria delle risorse quando rinomini i costrutti.
-
Riduci le modifiche alle librerie di terze parti: proteggi la tua applicazione dalle modifiche logiche degli ID nelle librerie di costrutti da cui dipendi.
-
Applica le migliori pratiche di ingegneria del software: rifattorizza il codice senza compromettere l'infrastruttura implementata.
Come funziona il comando CDK CLI cdk refactor
Importante
È necessario fornire all'--unstable=refactoropzione tutti i comandi che utilizzano questa funzionalità.
Innanzitutto, distribuisci l'applicazione CDK iniziale per stabilire le risorse di base nel tuo account. AWS Dopo aver eseguito il refactoring del codice CDK, ad esempio rinominando i costrutti o spostando le risorse tra gli stack, utilizzate il cdk refactor comando per iniziare il processo di refactoring delle risorse distribuite.
Quando eseguite il comando refactor, la CLI CDK rileva le modifiche locali confrontando il codice corrente con lo stato distribuito. Verifica che l'applicazione CDK contenga esattamente lo stesso set di risorse dello stato distribuito, con differenze solo per la loro posizione nell'albero di costruzione. La CLI CDK genera quindi un piano di refactoring che mappa le vecchie posizioni delle risorse nelle nuove posizioni. La CLI CDK mostra le modifiche proposte e, dopo la conferma, utilizza AWS CloudFormation l'API di refactoring per aggiornare gli ID logici delle risorse senza sostituirle.
Dietro le quinte, la CLI CDK determina quali risorse sono state spostate confrontando le loro proprietà e dipendenze, identificando le risorse funzionalmente equivalenti ma con percorsi diversi nell'albero dei costrutti. Se rileva aggiunte, eliminazioni o modifiche di risorse, l'operazione di refactoring verrà rifiutata con un messaggio di errore.
Esempio di conservazione delle risorse durante il refactoring del codice CDK
In questo esempio, conserviamo le risorse distribuite eseguendo il refactoring del nostro codice CDK utilizzando il comando CDK CLI. cdk refactor
La nostra applicazione CDK di esempio è costituita da un singolo stack contenente un bucket S3, una distribuzione e una funzione Lambda. CloudFront L'albero dei costrutti è strutturato come segue:
App └─ MyStack ├─ Bucket ├─ Distribution └─ Function
Di seguito è riportato un esempio del codice della nostra applicazione:
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();
Ora, immagina di voler rifattorizzare questo codice in:
-
Rinomina il bucket da uno
Bucketa più descrittivo.WebsiteOrigin -
Sposta il bucket e la distribuzione in un nuovo stack.
WebStack
Dopo il refactoring, l'albero dei costrutti sarebbe simile al seguente:
App ├─ WebStack │ ├─ WebsiteOrigin │ └─ Distribution └─ MyStack └─ Function
E il codice rifattorizzato sarebbe:
// 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();
Senza il refactoring CDK, queste modifiche comporterebbero la AWS CloudFormation creazione di nuove risorse e l'eliminazione di quelle vecchie, poiché gli ID logici cambierebbero:
-
MyStack/Bucket/Resourcediventerebbe.WebStack/WebsiteOrigin/Resource -
MyStack/Distribution/ResourcediventerebbeWebStack/Distribution/Resource.
Con il refactoring CDK, la CLI CDK rileva questi cambiamenti di percorso e utilizza le funzionalità di refactoring per preservare le AWS CloudFormation risorse sottostanti. Durante l'esecuzionecdk refactor, la CLI mostra le modifiche che 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)?
Quando confermate inserendoy, la CLI CDK mostra lo stato di avanzamento dell'operazione di refactoring:
Refactoring... ✅ Stack refactor complete
Dopo la conferma, la CLI CDK esegue l'operazione di refactoring, preservando entrambe le risorse e aggiornando i relativi ID logici in modo che corrispondano alla nuova struttura del codice.
La stessa mappatura è mostrata anche nell'output del comando, organizzato per stack: cdk diff
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) ...
Inizia con il refactoring CDK
Per iniziare con il refactoring, completa questi prerequisiti:
- Avvia il tuo ambiente con il modello più recente
-
La funzionalità di refactoring CDK richiede nuove autorizzazioni nello stack di bootstrap. Per assicurarti di disporre delle autorizzazioni necessarie, avvia il tuo ambiente con il modello più recente:
cdk bootstrapPer ulteriori informazioni sul bootstrap, consulta Bootstrapping Environments for AWS CDK.
- Installa la versione CDK CLI più recente
-
Il refactoring CDK richiede una versione recente della CDK CLI. Per assicurarti di disporre della versione più recente:
npm install -g aws-cdkPer istruzioni dettagliate sull'installazione, consulta Guida introduttiva all'AWS CDK.
Usa i file di override per risolvere le ambiguità nel refactoring
La CLI CDK calcola automaticamente tutte le mappature delle risorse in base al confronto del codice con le risorse distribuite. Nella maggior parte dei casi, questo rilevamento automatico funziona bene, ma ci sono situazioni in cui la CLI potrebbe riscontrare ambiguità che non è in grado di risolvere da sola. Per fornire una guida alla CLI CDK, utilizzate un file di override.
- Create un file di sostituzione per risolvere le ambiguità
-
Un file di override è un file JSON che fornisce mappature quando la CLI CDK non è in grado di determinare una risoluzione di refactoring per le risorse. Il file contiene le mappature delle risorse organizzate per ambiente:
{ "environments": [ { "account": "123456789012", "region": "us-east-2", "resources": { "StackA.OldName": "StackB.NewName", "StackC.Foo": "StackC.Bar" } } ] }In questo file:
-
L'
environmentsarray contiene una o più voci di ambiente con account e regione. -
All'interno di ogni ambiente, l'
resourcesoggetto contiene le mappature. -
Le chiavi rappresentano le posizioni correnti nel formato.
<stack name>.<logical ID> -
I valori rappresentano le nuove posizioni nello stesso formato.
Per utilizzare un file di sostituzione con la CLI CDK:
cdk refactor --override-file=overrides.json -
Il refactoring degli stack in più ambienti
Un'applicazione CDK può contenere più stack che vengono distribuiti in ambienti diversi (account e regioni).AWS Quando si preservano le risorse durante il refactoring in tali applicazioni, la CLI CDK gestisce gli ambienti in un modo specifico:
-
La CLI si raggruppa per ambiente ed esegue il refactoring separatamente in ogni ambiente.
-
È possibile spostare le risorse tra gli stack durante il refactoring, ma tutti gli stack coinvolti nello spostamento devono trovarsi nello stesso ambiente.
-
Il tentativo di spostare le risorse tra gli ambienti genererà un errore.
Questo comportamento garantisce che le risorse rimangano all'interno AWS dell'account e della regione originali, il che è necessario perché CloudFormation le risorse non possono essere spostate fisicamente oltre i confini dell'account o della regione.
Ad esempio, se l'applicazione CDK definisce stack sia per gli ambienti di sviluppo che per quelli di produzione, l'operazione di refactoring verrà eseguita indipendentemente in ciascun ambiente. Le risorse possono essere spostate tra gli stack all'interno dell'ambiente di sviluppo o all'interno dell'ambiente di produzione, ma non dallo sviluppo alla produzione o viceversa.
Gestione delle risorse progettate per essere sostituite
Alcuni costrutti CDK si basano sul comportamento CloudFormation di sostituzione delle risorse come parte della loro progettazione. Ad esempio, i Version costrutti di API Gateway Deployment e Lambda sono progettati per creare nuove risorse quando le loro proprietà cambiano.
Durante il refactoring, non includete alcuna modifica che dovrebbe comportare la sostituzione delle risorse. Altrimenti, l'interfaccia a riga di comando del CDK potrebbe rilevare e conservare queste risorse. Ciò significa che le risorse progettate per essere sostituite devono essere gestite separatamente dalle operazioni di refactoring.
Per gestire correttamente le risorse progettate per essere sostituite:
-
Innanzitutto, implementa l'applicazione per sostituire queste risorse, se necessario.
-
Quindi, esegui le operazioni di refactoring separatamente per riorganizzare il codice.
Questo approccio in due fasi garantisce che le risorse progettate per essere sostituite siano gestite correttamente, pur consentendo di trarre vantaggio dal refactoring CDK per altre risorse.
Considerazioni e limitazioni generali
Quando conservi le risorse durante il refactoring CDK, tieni a mente queste considerazioni:
-
Vincoli ambientali: le risorse possono essere spostate solo tra stack nello stesso ambiente. Cross-environment gli spostamenti non sono supportati.
-
Ambiguità: se avete più risorse identiche che vengono rinominate contemporaneamente, la CLI CDK potrebbe non essere in grado di determinare automaticamente la mappatura corretta. In questi casi, dovrai fornire una mappatura esplicita utilizzando un file di sostituzione.
-
Requisiti Bootstrap: per preservare le risorse durante il refactoring, è necessario aggiornare lo stack di bootstrap con l'ultima versione che include le autorizzazioni necessarie.
-
Alcuni costrutti esclusi: alcuni costrutti come API Gateway
Deploymente Lambda siVersionbasano sulla sostituzione delle risorse e vengono automaticamente esclusi dal refactoring.
Refactoring con pipeline CI/CD
Per utilizzare la funzionalità di refactoring nelle CI/CD pipeline, devi essere in grado di eseguire la CLI CDK come parte della pipeline. Di seguito sono riportate alcune considerazioni importanti per l'integrazione del refactoring nel flusso di lavoro. CI/CD
- Prerequisiti per l'utilizzo del refactoring in CI/CD
-
Devi essere in grado di utilizzare la CLI CDK nel tuo CI/CD ambiente per beneficiare di questa funzionalità.
- Integrazione del refactoring nel flusso di lavoro della pipeline
-
Se utilizzi la CLI per la distribuzione nella CI/CD pipeline, lo script in genere ha il seguente aspetto:
... cdk deploy <stack filter> ...Se desideri includere il refactoring come parte del flusso di lavoro, il seguente è un esempio di base:
... cdk refactor <stack filter> cdk deploy <stack filter> ...Puoi anche impostare il refactoring come fase separata della pipeline.
- Gestione degli errori di refactoring
-
Tieni presente che
cdk refactorfallirà se il tuo codice include modifiche effettive alle risorse oltre al refactoring. Dato che state chiamando refactor automaticamente nella vostra pipeline, dovete gestire i potenziali errori:# Allow refactoring to fail but continue the pipeline cdk refactor <stack filter> || true cdk deploy <stack filter>In alternativa, potresti voler assicurarti che non avvenga alcuna distribuzione finché non hai eseguito correttamente un refactor:
# Only deploy if refactoring succeeds cdk refactor <stack filter> && cdk deploy <stack filter> - Le migliori pratiche per gli ambienti CI/CD
-
Per utilizzare efficacemente il refactoring nelle CI/CD pipeline:
-
Separare il refactoring da altre modifiche: ricordate che le operazioni di refactoring devono essere separate dalle aggiunte, cancellazioni o modifiche delle risorse. Nella tua pipeline, valuta la possibilità di avere commit e implementazioni dedicati per il refactoring.
-
Usa i file di override in modo appropriato: tieni presente che i file di override vengono utilizzati dalla CLI CDK solo come riserva per risolvere i casi di ambiguità.
-
Non è necessario utilizzare le pipeline:
--forcein ambienti non interattivi come le pipeline, il comando CDK refactor CI/CD procede automaticamente senza richiedere conferma. L'--forceopzione è necessaria solo in ambienti interattivi.
-
Risorse correlate
Per informazioni sulle opzioni e gli argomenti per il cdk refactor comando CDK CLI, vedere.
cdk refactor
Per iniziare con l'refactorazione della libreria CDK Toolkit, consulta Eseguire azioni programmatiche utilizzando la libreria CDK Toolkit.