Migrazione dalla AWS CDK v1 alla v2 AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. 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à.

Migrazione dalla AWS CDK v1 alla v2 AWS CDK

La versione 2 di AWS Cloud Development Kit (AWS CDK) è progettata per semplificare la scrittura dell'infrastruttura come codice nel linguaggio di programmazione preferito. Questo argomento descrive le modifiche tra la v1 e la v2 di. AWS CDK

Le principali modifiche dalla AWS CDK v1 alla CDK v2 sono le seguenti.

  • AWS CDK v2 consolida le parti stabili della AWS Construct Library, inclusa la libreria principale, in un unico pacchetto,. aws-cdk-lib Gli sviluppatori non devono più installare pacchetti aggiuntivi per i singoli AWS servizi che utilizzano. Questo approccio a pacchetto singolo significa anche che non è necessario sincronizzare le versioni dei vari pacchetti della libreria CDK.

    I costrutti L1 (CFNxxxx), che rappresentano le esatte risorse disponibili in AWS CloudFormation, sono sempre considerati stabili e quindi sono inclusi. aws-cdk-lib

  • I moduli sperimentali, in cui stiamo ancora collaborando con la comunità per sviluppare nuovi costrutti L2 o L3, non sono inclusi. aws-cdk-lib Vengono invece distribuiti come pacchetti singoli. I pacchetti sperimentali sono denominati con un alpha suffisso e un numero di versione semantico. Il numero di versione semantico corrisponde alla prima versione della AWS Construct Library con cui sono compatibili, anch'essa con un suffisso. alpha I costrutti entrano in gioco aws-cdk-lib dopo essere stati designati come stabili, permettendo alla Construct Library principale di aderire a un rigoroso sistema di versioni semantiche.

    La stabilità è specificata a livello di servizio. Ad esempio, se iniziamo a creare uno o più costrutti L2 per Amazon AppFlow, che al momento della stesura di questo documento ha solo costrutti L1, questi appaiono per la prima volta in un modulo denominato. @aws-cdk/aws-appflow-alpha Poi, passano a aws-cdk-lib quando riteniamo che i nuovi costrutti soddisfino le esigenze fondamentali dei clienti.

    Una volta che un modulo è stato designato stabile e incorporatoaws-cdk-lib, vengono aggiunte nuove API utilizzando la convenzione «BetAN» descritta nel prossimo bullet.

    Una nuova versione di ogni modulo sperimentale viene rilasciata con ogni versione di. AWS CDK Per la maggior parte, tuttavia, non è necessario mantenerli sincronizzati. Puoi aggiornare aws-cdk-lib il modulo sperimentale ogni volta che vuoi. L'eccezione è che quando due o più moduli sperimentali correlati dipendono l'uno dall'altro, devono avere la stessa versione.

  • Per i moduli stabili a cui vengono aggiunte nuove funzionalità, le nuove API (che si tratti di costrutti completamente nuovi o di nuovi metodi o proprietà su un costrutto esistente) ricevono un Beta1 suffisso mentre il lavoro è in corso. (Seguito da Beta2Beta3, e così via quando sono necessarie modifiche sostanziali). Una versione dell'API senza il suffisso viene aggiunta quando l'API è designata stabile. Tutti i metodi tranne il più recente (versione beta o finale) vengono quindi obsoleti.

    Ad esempio, se aggiungiamo un nuovo metodo grantPower() a un costrutto, inizialmente appare come. grantPowerBeta1() Se sono necessarie modifiche sostanziali (ad esempio, un nuovo parametro o proprietà obbligatorio), verrà denominata grantPowerBeta2() la versione successiva del metodo e così via. Quando il lavoro è completo e l'API è finalizzata, viene aggiunto il metodo grantPower() (senza suffisso) e i metodi BetAN diventano obsoleti.

    Tutte le API beta rimangono nella Construct Library fino alla prossima versione principale (3.0) e le loro firme non cambieranno. Se le utilizzate, vedrete degli avvisi di obsolescenza, quindi dovreste passare alla versione finale dell'API il prima possibile. Tuttavia, nessuna futura release AWS CDK 2.x interromperà l'applicazione.

  • La Construct classe è stata estratta da una libreria separata, insieme ai tipi correlati. AWS CDK Questo viene fatto per supportare gli sforzi volti ad applicare il Construct Programming Model ad altri domini. Se state scrivendo i vostri costrutti o utilizzate le API correlate, dovete dichiarare il constructs modulo come dipendenza e apportare piccole modifiche alle importazioni. Se utilizzi funzionalità avanzate, come il collegamento al ciclo di vita dell'app CDK, potrebbero essere necessarie ulteriori modifiche. Per tutti i dettagli, consulta la RFC.

  • Le proprietà, i metodi e i tipi obsoleti nella AWS CDK v1.x e nella relativa Construct Library sono stati rimossi completamente dall'API CDK v2. Nella maggior parte delle lingue supportate, queste API generano avvisi nella versione 1.x, quindi potresti aver già effettuato la migrazione alle API sostitutive. Un elenco completo delle API obsolete in CDK v1.x è disponibile su. GitHub

  • Il comportamento limitato dai flag di funzionalità nella v1.x è abilitato di default in AWS CDK CDK v2. I flag di funzionalità precedenti non sono più necessari e nella maggior parte dei casi non sono supportati. Alcuni sono ancora disponibili per consentire di ripristinare il comportamento di CDK v1 in circostanze molto specifiche. Per ulteriori informazioni, consulta Aggiornamento dei contrassegni delle funzionalità.

  • Con CDK v2, gli ambienti in cui vengono implementati devono essere avviati utilizzando il moderno stack di bootstrap. Lo stack di bootstrap legacy (predefinito nella versione v1) non è più supportato. CDK v2 richiede inoltre una nuova versione dello stack moderno. Per aggiornare gli ambienti esistenti, riavviali. Non è più necessario impostare alcun flag di funzionalità o variabile di ambiente per utilizzare il moderno stack di bootstrap.

Importante

Il moderno modello di bootstrap concede efficacemente le autorizzazioni implicite da a qualsiasi account nell'--cloudformation-execution-policieselenco. AWS --trust Per impostazione predefinita, questo estende le autorizzazioni di lettura e scrittura a qualsiasi risorsa nell'account avviato. Assicurati di configurare lo stack di bootstrap con politiche e account affidabili con cui ti senti a tuo agio.

Nuovi prerequisiti

La maggior parte dei requisiti per la AWS CDK v2 è la stessa della v1.x. AWS CDK I requisiti aggiuntivi sono elencati qui.

  • Per TypeScript gli sviluppatori, è richiesta la versione TypeScript 3.8 o successiva.

  • È necessaria una nuova versione del CDK Toolkit per l'uso con CDK v2. Ora che CDK v2 è generalmente disponibile, la v2 è la versione predefinita per l'installazione di CDK Toolkit. È retrocompatibile con i progetti CDK v1, quindi non è necessario mantenere installata la versione precedente a meno che non si desideri creare progetti CDK v1. Per eseguire l'aggiornamento, emetti. npm install -g aws-cdk

Aggiornamento dalla versione 2 Developer AWS CDK Preview

Se utilizzi la CDK v2 Developer Preview, il tuo progetto dipende da una versione Release Candidate di, ad esempio. AWS CDK2.0.0-rc1 Aggiorna questi moduli a2.0.0, quindi aggiorna i moduli installati nel progetto.

TypeScript

npm install o yarn install

JavaScript

npm install o yarn install

Python
python -m pip install -r requirements.txt
Java
mvn package
C#
dotnet restore
Go
go get

Dopo aver aggiornato le dipendenze, esegui l'aggiornamento npm update -g aws-cdk di CDK Toolkit alla versione di rilascio.

Migrazione dalla AWS CDK v1 alla CDK v2

Per migrare la tua app alla AWS CDK v2, aggiorna prima i flag delle funzionalità in. cdk.json Aggiorna quindi le dipendenze e le importazioni dell'app in base alle esigenze del linguaggio di programmazione in cui è scritta.

Aggiornamento a una versione v1 recente

Stiamo assistendo all'aggiornamento da una vecchia versione della AWS CDK v1 alla versione più recente della v2 in un unico passaggio. Anche se è certamente possibile farlo, si comporterebbe sia l'aggiornamento dopo diversi anni di modifiche (che sfortunatamente non sono stati tutti sottoposti alla stessa quantità di test evolutivi che abbiamo oggi), sia l'aggiornamento tra versioni con nuove impostazioni predefinite e un'organizzazione del codice diversa.

Per un'esperienza di aggiornamento più sicura e per diagnosticare più facilmente l'origine di eventuali modifiche impreviste, ti consigliamo di separare questi due passaggi: prima esegui l'aggiornamento alla versione v1 più recente, quindi passa alla v2.

Aggiornamento dei contrassegni delle funzionalità

Rimuovi i seguenti flag di funzionalità della v1, cdk.json se esistono, poiché sono tutti attivi per impostazione predefinita nella v2. AWS CDK Se il loro vecchio effetto è importante per l'infrastruttura, sarà necessario apportare modifiche al codice sorgente. Per ulteriori informazioni, consulta l'elenco delle bandiere su GitHub.

  • @aws-cdk/core:enableStackNameDuplicates

  • aws-cdk:enableDiffNoFail

  • @aws-cdk/aws-ecr-assets:dockerIgnoreSupport

  • @aws-cdk/aws-secretsmanager:parseOwnedSecretName

  • @aws-cdk/aws-kms:defaultKeyPolicies

  • @aws-cdk/aws-s3:grantWriteWithoutAcl

  • @aws-cdk/aws-efs:defaultEncryptionAtRest

È possibile impostare una serie di flag di funzionalità della v1 per false ripristinare comportamenti specifici della AWS CDK v1; per un riferimento completo, consulta l'elenco qui Ripristino del comportamento v1 sotto. GitHub

Per entrambi i tipi di flag, utilizzate il cdk diff comando per controllare le modifiche al modello sintetizzato per vedere se le modifiche a uno di questi flag influiscono sulla vostra infrastruttura.

Compatibilità con CDK Toolkit

CDK v2 richiede la versione 2 o successiva del CDK Toolkit. Questa versione è retrocompatibile con le app CDK v1. Pertanto, puoi utilizzare un'unica versione di CDK Toolkit installata a livello globale con tutti i tuoi AWS CDK progetti, indipendentemente dal fatto che utilizzino la v1 o la v2. Un'eccezione è che CDK Toolkit v2 crea solo progetti CDK v2.

Se è necessario creare progetti CDK v1 e v2, non installate CDK Toolkit v2 a livello globale. (Rimuovilo se lo hai già installato:.) npm remove -g aws-cdk Per richiamare CDK Toolkit, usate npx to run v1 o v2 del CDK Toolkit come desiderate.

npx aws-cdk@1.x init app --language typescript npx aws-cdk@2.x init app --language typescript
Suggerimento

Imposta gli alias della riga di comando in modo da poter utilizzare cdk1 i comandi cdk and per richiamare la versione desiderata di CDK Toolkit.

macOS/Linux
alias cdk1="npx aws-cdk@1.x" alias cdk="npx aws-cdk@2.x"
Windows
doskey cdk1=npx aws-cdk@1.x $* doskey cdk=npx aws-cdk@2.x $*

Aggiornamento delle dipendenze e delle importazioni

Aggiorna le dipendenze dell'app, quindi installa i nuovi pacchetti. Infine, aggiorna le importazioni nel codice.

TypeScript
Applicazioni

Per le app CDK, esegui l'aggiornamento package.json come segue. Rimuovi le dipendenze dai singoli moduli stabili in stile v1 e stabilisci la versione più bassa richiesta per la tua applicazione (2.0.0 qui). aws-cdk-lib

I costrutti sperimentali sono forniti in pacchetti separati, con versioni indipendenti, con nomi che terminano con e un numero di versione alfa. alpha Il numero di versione alpha corrisponde alla prima versione aws-cdk-lib con cui sono compatibili. Qui, abbiamo aggiunto la versione aws-codestar v2.0.0-alpha.1.

{ "dependencies": { "aws-cdk-lib": "^2.0.0", "@aws-cdk/aws-codestar-alpha": "2.0.0-alpha.1", "constructs": "^10.0.0" } }
Costruisci librerie

Per le librerie di costruzione, stabilisci la versione più bassa richiesta per la tua applicazione (2.0.0 qui) e aggiorna come segue. aws-cdk-lib package.json

Nota che aws-cdk-lib appare sia come dipendenza tra pari che come dipendenza di sviluppo.

{ "peerDependencies": { "aws-cdk-lib": "^2.0.0", "constructs": "^10.0.0" }, "devDependencies": { "aws-cdk-lib": "^2.0.0", "constructs": "^10.0.0", "typescript": "~3.9.0" } }
Nota

Quando si rilascia una libreria compatibile con v2, è necessario eseguire un aumento importante della versione del numero di versione della libreria, poiché si tratta di una modifica fondamentale per gli utenti delle biblioteche. Non è possibile supportare sia CDK v1 che v2 con una singola libreria. Per continuare a supportare i clienti che utilizzano ancora la v1, puoi mantenere la versione precedente in parallelo o creare un nuovo pacchetto per la v2.

Sei tu a decidere per quanto tempo vuoi continuare a supportare i clienti AWS CDK v1. Potresti prendere spunto dal ciclo di vita del CDK v1 stesso, che è entrato in manutenzione il 1° giugno 2022 e terminerà il 1° giugno 2023. end-of-life Per tutti i dettagli, consulta la Politica di manutenzione.AWS CDK

Sia le librerie che le app

Installa le nuove dipendenze eseguendo npm install oyarn install.

Modificate le importazioni in modo Construct da importare dal nuovo constructs modulo i tipi principali (ad esempio App e Stack dal livello superiore diaws-cdk-lib) e i moduli stabili di Construct Library per i servizi utilizzati dai namespace sottostanti. aws-cdk-lib

import { Construct } from 'constructs'; import { App, Stack } from 'aws-cdk-lib'; // core constructs import { aws_s3 as s3 } from 'aws-cdk-lib'; // stable module import * as codestar from '@aws-cdk/aws-codestar-alpha'; // experimental module
JavaScript

Aggiorna come segue. package.json Rimuovi le dipendenze dai singoli moduli stabili in stile v1 e stabilisci la versione più bassa richiesta per la tua applicazione (2.0.0 qui). aws-cdk-lib

I costrutti sperimentali sono forniti in pacchetti separati, con versioni indipendenti, con nomi che terminano con e un numero di versione alfa. alpha Il numero di versione alpha corrisponde alla prima versione aws-cdk-lib con cui sono compatibili. Qui, abbiamo aggiunto la versione aws-codestar v2.0.0-alpha.1.

{ "dependencies": { "aws-cdk-lib": "^2.0.0", "@aws-cdk/aws-codestar-alpha": "2.0.0-alpha.1", "constructs": "^10.0.0" } }

Installa le nuove dipendenze eseguendo o. npm install yarn install

Modifica le importazioni dell'app per effettuare le seguenti operazioni:

  • Importa Construct dal nuovo constructs modulo

  • Importa i tipi principali, come App eStack, dal livello superiore di aws-cdk-lib

  • Importa AWS i moduli di Construct Library dai namespace in aws-cdk-lib

const { Construct } = require('constructs'); const { App, Stack } = require('aws-cdk-lib'); // core constructs const s3 = require('aws-cdk-lib').aws_s3; // stable module const codestar = require('@aws-cdk/aws-codestar-alpha'); // experimental module
Python

Aggiorna requirements.txt la install_requires definizione come segue. setup.py Rimuovi le dipendenze dai singoli moduli stabili in stile v1.

I costrutti sperimentali sono forniti in pacchetti separati, con versioni indipendenti, con nomi che terminano con alpha e un numero di versione alfa. Il numero di versione alpha corrisponde alla prima versione aws-cdk-lib con cui sono compatibili. Qui, abbiamo bloccato la versione aws-codestar v2.0.0alpha1.

install_requires=[ "aws-cdk-lib>=2.0.0", "constructs>=10.0.0", "aws-cdk.aws-codestar-alpha>=2.0.0alpha1", # ... ],
Suggerimento

Disinstalla qualsiasi altra versione dei AWS CDK moduli già installati nell'ambiente virtuale dell'app utilizzando. pip uninstall Quindi installa le nuove dipendenze conpython -m pip install -r requirements.txt.

Modifica le importazioni della tua app per effettuare le seguenti operazioni:

  • Importa Construct dal nuovo constructs modulo

  • Importa i tipi principali, come App eStack, dal livello superiore di aws_cdk

  • Importa AWS i moduli di Construct Library dai namespace in aws_cdk

from constructs import Construct from aws_cdk import App, Stack # core constructs from aws_cdk import aws_s3 as s3 # stable module import aws_cdk.aws_codestar_alpha as codestar # experimental module # ... class MyConstruct(Construct): # ... class MyStack(Stack): # ... s3.Bucket(...)
Java

Inpom.xml, rimuovi tutte le software.amazon.awscdk dipendenze per i moduli stabili e sostituiscile con dipendenze da (for) e. software.constructs Construct software.amazon.awscdk

I costrutti sperimentali sono forniti in pacchetti separati, con versioni indipendenti, con nomi che terminano con alpha e un numero di versione alfa. Il numero di versione alpha corrisponde alla prima versione aws-cdk-lib con cui sono compatibili. Qui, abbiamo aggiunto la versione aws-codestar v2.0.0-alpha.1.

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.0.0</version> </dependency><dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>code-star-alpha</artifactId> <version>2.0.0-alpha.1</version> </dependency> <dependency> <groupId>software.constructs</groupId> <artifactId>constructs</artifactId> <version>10.0.0</version> </dependency>

Installa le nuove dipendenze eseguendo. mvn package

Modifica il codice per eseguire le seguenti operazioni:

  • Importa Construct dalla nuova software.constructs libreria

  • Importa le classi principali, ad esempio Stack e App da software.amazon.awscdk

  • Importa costrutti di servizio da software.amazon.awscdk.services

import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.App; import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.codestar.alpha.GitHubRepository;
C#

Il modo più semplice per aggiornare le dipendenze di un'applicazione C# CDK consiste nel modificare il file manualmente. .csproj Rimuovi tutti i riferimenti stabili ai Amazon.CDK.* pacchetti e sostituiscili con riferimenti ai pacchetti and. Amazon.CDK.Lib Constructs

I costrutti sperimentali sono forniti in pacchetti separati, con versioni indipendenti, con nomi che terminano con alpha e un numero di versione alfa. Il numero di versione alpha corrisponde alla prima versione aws-cdk-lib con cui sono compatibili. Qui, abbiamo aggiunto la versione aws-codestar v2.0.0-alpha.1.

<PackageReference Include="Amazon.CDK.Lib" Version="2.0.0" /> <PackageReference Include="Amazon.CDK.AWS.Codestar.Alpha" Version="2.0.0-alpha.1" /> <PackageReference Include="Constructs" Version="10.0.0" />

Installa le nuove dipendenze eseguendo. dotnet restore

Modifica le importazioni nei tuoi file sorgente come segue.

using Constructs; // for Construct class using Amazon.CDK; // for core classes like App and Stack using Amazon.CDK.AWS.S3; // for stable constructs like Bucket using Amazon.CDK.Codestar.Alpha; // for experimental constructs
Go

Problema go get per aggiornare le dipendenze alla versione più recente e aggiornare il .mod file del progetto.

Verifica dell'app migrata prima della distribuzione

Prima di distribuire gli stack, usali per verificare eventuali modifiche impreviste cdk diff alle risorse. Non sono previste modifiche agli ID logici (che causano la sostituzione delle risorse).

Le modifiche previste includono, a titolo esemplificativo ma non esaustivo:

  • Modifiche alla CDKMetadata risorsa.

  • Hash degli asset aggiornati.

  • Modifiche relative alla sintesi dello stack di nuova concezione. Si applica se l'app utilizzava il sintetizzatore stack legacy nella v1. (CDK v2 non supporta il sintetizzatore stack legacy.)

  • L'aggiunta di una regola. CheckBootstrapVersion

Le modifiche impreviste in genere non sono causate dall'aggiornamento alla AWS CDK v2 di per sé. Di solito, sono il risultato di un comportamento obsoleto che in precedenza era stato modificato dai flag di funzionalità. Questo è un sintomo dell'aggiornamento da una versione di CDK precedente alla 1.85.x circa. Le stesse modifiche si vedrebbero eseguendo l'aggiornamento all'ultima versione v1.x. Di solito è possibile risolvere questo problema effettuando le seguenti operazioni:

  1. Aggiorna la tua app all'ultima versione v1.x

  2. Rimuovi i contrassegni delle funzionalità

  3. Se necessario, modificate il codice

  4. Implementazione

  5. Esegui l'aggiornamento alla v2

Quando sei pronto per distribuire gli stack nella tua app, valuta la possibilità di distribuirne prima una copia in modo da poterla testare. Il modo più semplice per farlo è distribuirla in un'altra regione. Tuttavia, puoi anche modificare gli ID dei tuoi stack. Dopo il test, assicurati di distruggere la copia di prova concdk destroy.

Risoluzione dei problemi

TypeScript 'from' expectedo ';' expected errore nelle importazioni

Aggiornamento alla versione TypeScript 3.8 o successiva.

Esegui 'cdk bootstrap'

Se vedi un errore come il seguente:

❌  MyStack failed: Error: MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
    at CloudFormationDeployments.validateBootstrapStackVersion (.../aws-cdk/lib/api/cloudformation-deployments.ts:323:13)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

AWS CDK v2 richiede uno stack di bootstrap aggiornato e, inoltre, tutte le distribuzioni v2 richiedono risorse bootstrap. (Con la v1, puoi distribuire stack semplici senza bootstrap.) Per tutti i dettagli completi, consultare Bootstrapping (Processo di bootstrap).

Trovare gli stack v1

Durante la migrazione dell'applicazione CDK dalla v1 alla v2, potresti voler identificare gli stack distribuiti AWS CloudFormation che sono stati creati utilizzando v1. Per fare ciò, esegui il seguente comando:

npx awscdk-v1-stack-finder

Per i dettagli sull'utilizzo, consulta il file README di awscdk-v1-stack-finder.