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 di CDK è in versione di anteprima ed è soggetto a modifiche.
Con il refactoring del AWS Cloud Development Kit (AWS CDK), puoi rifattorizzare il 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 alla loro logica. IDs Il AWS CDK genera queste logiche in IDs base all'ID del costrutto e al relativo percorso nell'albero di costruzione. Se modificate l'ID di un costrutto o lo spostate 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.
Il refactoring CDK affronta questa sfida mediante:
-
Rileva quando le risorse sono state spostate o rinominate nel codice.
-
Utilizzo AWS CloudFormation delle funzionalità di refactoring per preservare le risorse fisiche sottostanti.
-
Aggiornamento logico IDs senza sostituire le risorse effettive.
-
Mantenimento dei riferimenti tra le risorse degli stack.
È possibile eseguire il refactoring CDK utilizzando il cdk refactor
comando CDK CLI o l'azione della CDK Toolkit Library. 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, consultate Eseguire azioni programmatiche utilizzando la libreria CDK Toolkit.
Importante
Le operazioni di refactoring devono essere eseguite da sole, separatamente dalle altre azioni, come l'aggiunta di nuove risorse, l'eliminazione di risorse o la modifica delle proprietà delle risorse.
Se è necessario aggiungere, eliminare o modificare risorse oltre a eseguire il refactoring, è necessario prima distribuire tali modifiche separatamente e quindi utilizzare il refactoring per riorganizzare le risorse.
Vantaggi del refactoring CDK
Il refactoring CDK offre i seguenti vantaggi agli sviluppatori CDK: AWS
-
Migliora l'organizzazione del codice: rinomina i costrutti 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.
-
Evita la sostituzione accidentale delle risorse: evita la ricreazione involontaria delle risorse durante la ridenominazione dei costrutti.
-
Riduci le modifiche alle librerie di terze parti: proteggi la tua applicazione dalle modifiche agli ID logici nelle librerie di costruzione da cui dipendi.
-
Applica le migliori pratiche di ingegneria del software: rifattorizza il codice senza compromettere l'infrastruttura implementata.
Come funziona il comando CDK cdk refactor
CLI
Importante
È necessario fornire all'--unstable=refactor
opzione tutti i comandi che utilizzano questa funzionalità.
Innanzitutto, distribuisci l'applicazione CDK iniziale per stabilire le risorse di base nel tuo account. AWS Dopo il refactoring del codice CDK, ad esempio rinominando i costrutti o spostando le risorse tra gli stack, usa il cdk refactor
comando per iniziare il processo di rifattorizzazione delle risorse distribuite.
Quando esegui 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, che differiscono solo nella loro posizione nell'albero di costruzione. La CLI CDK genera quindi un piano di rifattorizzazione che mappa le vecchie posizioni delle risorse nelle nuove posizioni. La CLI CDK mostra le modifiche proposte e, dopo la conferma, AWS CloudFormation utilizza l'API di refactoring per aggiornare la IDs logica delle risorse senza sostituirle.
Dietro le quinte, la CLI CDK determina quali risorse sono state spostate confrontandone le proprietà e le dipendenze, identificando le risorse che sono funzionalmente equivalenti ma hanno percorsi diversi nell'albero dei costrutti. Se rileva aggiunte, eliminazioni o modifiche alle 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 durante 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 CloudFront distribuzione e una funzione Lambda. L'albero di costruzione è strutturato come segue:
App └─ MyStack ├─ Bucket ├─ Distribution └─ Function
Di seguito è riportato un esempio del nostro codice applicativo:
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, immaginate di voler rifattorizzare questo codice in:
-
Rinomina il bucket da
Bucket
a quello più descrittivo.WebsiteOrigin
-
Sposta il bucket e la distribuzione in una nuova pila.
WebStack
Dopo il refactoring, l'albero di costruzione avrebbe il seguente aspetto:
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 creazione AWS CloudFormation di nuove risorse e l'eliminazione di quelle vecchie, perché la logica cambierebbe: IDs
-
MyStack/Bucket/Resource
diventerebbe.WebStack/WebsiteOrigin/Resource
-
MyStack/Distribution/Resource
diventerebbeWebStack/Distribution/Resource
.
Con il refactoring CDK, la CLI CDK rileva questi cambiamenti di percorso e utilizza le funzionalità di refactoring di CDK per preservare le risorse AWS CloudFormation sottostanti. Quando eseguicdk refactor
, la CLI ti 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 la loro logica IDs in modo che corrisponda alla nuova struttura del codice.
La stessa mappatura viene 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 bootstrap
Per ulteriori informazioni sul bootstrap, consulta Ambienti di avvio per AWS CDK.
- Installa la versione più recente della CLI CDK
-
Il refactoring CDK richiede una versione recente della CLI CDK. Per assicurarti di disporre della versione più recente:
npm install -g aws-cdk
Per istruzioni di installazione dettagliate, consulta Getting started with the AWS CDK.
Usa i file 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 indicazioni alla CLI CDK, utilizzate un file di override.
- Crea un file di override per risolvere le ambiguità
-
Un file 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 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'
environments
array contiene una o più voci di ambiente con account e regione. -
All'interno di ogni ambiente, l'
resources
oggetto 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 override con la CLI CDK:
cdk refactor --override-file=overrides.json
-
Stack di refactoring in più ambienti
Un'applicazione CDK può contenere più stack che vengono distribuiti in ambienti diversi (account e regioni).AWS Quando preserva le risorse durante il refactoring in tali applicazioni, la CLI CDK gestisce gli ambienti in un modo specifico:
-
La CLI raggruppa gli stack 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 attraverso i confini dell'account o della regione.
Ad esempio, se l'applicazione CDK definisce gli 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. In caso contrario, la CLI 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, distribuisci l'applicazione per sostituire queste risorse secondo necessità.
-
Quindi, esegui le operazioni di refactoring separatamente per riorganizzare il codice.
Questo approccio in due fasi garantisce che le risorse progettate per essere sostituite vengano gestite correttamente, consentendovi comunque di trarre vantaggio dal refactoring CDK per altre risorse.
Considerazioni e limitazioni generali
Quando preservate le risorse durante il refactoring CDK, tenete a mente queste considerazioni:
-
Vincoli ambientali: le risorse possono essere spostate solo tra pile nello stesso ambiente. Gli spostamenti tra ambienti non sono supportati.
-
Ambiguità: se si dispone di più risorse identiche che vengono rinominate contemporaneamente, la CLI CDK potrebbe non essere in grado di determinare automaticamente la mappatura corretta. In questi casi, è necessario fornire una mappatura esplicita utilizzando un file di override.
-
Requisiti di bootstrap: per preservare le risorse durante il refactoring, è necessario aggiornare lo stack di bootstrap con la versione più recente che include le autorizzazioni necessarie.
-
Alcuni costrutti esclusi: alcuni costrutti come API Gateway
Deployment
e Lambda siVersion
basano sulla sostituzione delle risorse e vengono automaticamente esclusi dal refactoring.
CI/CD Rifattorizzazione con condotte
Per utilizzare la funzionalità di refactoring nelle CI/CD pipeline, devi essere in grado di eseguire la CLI CDK come parte della tua 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
-
È necessario essere in grado di utilizzare la CLI CDK nel CI/CD proprio ambiente per beneficiare di questa funzionalità.
- Integrazione del refactoring nel flusso di lavoro della pipeline
-
Se utilizzi la CLI per la distribuzione nella tua 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 tua pipeline.
- Gestione degli errori di refactoring
-
Tieni presente che questa operazione
cdk refactor
fallirà se il codice include modifiche effettive alle risorse insieme al refactoring. Poiché stai chiamando refactor automaticamente nella tua pipeline, devi gestire potenziali guasti:# 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 implementazione finché non avrai 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:
-
Separazione del refactoring dalle altre modifiche: ricordate che le operazioni di refactoring devono essere separate dalle aggiunte, eliminazioni o modifiche delle risorse. Nella tua pipeline, prendi in considerazione l'idea di disporre di 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 alternativa per risolvere i casi di ambiguità.
-
Non è necessario inserirlo
--force
nelle pipeline: in ambienti non interattivi come le pipeline, il comando CDK refactor CI/CD procede automaticamente senza richiedere conferma. L'--force
opzione è necessaria solo in ambienti interattivi.
-
Risorse correlate
Per informazioni sulle opzioni e gli argomenti per il comando CDK cdk refactor
CLI, vedere.
cdk refactor
Per iniziare a utilizzare l'refactor
azione della CDK Toolkit Library, consultate Eseguire azioni programmatiche utilizzando la CDK Toolkit Library.