AWS CDK app - 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à.

AWS CDK app

L' AWS Cloud Development Kit (AWS CDK) applicazione o l'app è una raccolta di uno o più stack CDK. Gli stack sono una raccolta di uno o più costrutti, che definiscono AWS risorse e proprietà. Pertanto, il raggruppamento complessivo degli stack e dei costrutti è noto come app CDK.

Definizione delle app

Puoi creare un'app definendo un'istanza dell'app nel file dell'applicazione del tuo progetto. A tale scopo, importate e utilizzate il Appcostrutto dalla AWS Construct Library. Il App costrutto non richiede alcun argomento di inizializzazione. È l'unico costrutto che può essere usato come radice.

Le Stack classi App e della AWS Construct Library sono costrutti unici. Rispetto ad altri costrutti, non configurano AWS le risorse da soli. Vengono invece utilizzati per fornire un contesto agli altri costrutti. Tutti i costrutti che rappresentano AWS risorse devono essere definiti, direttamente o indirettamente, nell'ambito di un costrutto. Stack Stacki costrutti sono definiti nell'ambito di un costrutto. App

Le app vengono quindi sintetizzate per creare AWS CloudFormation modelli per gli stack. Di seguito è riportato un esempio:

TypeScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
JavaScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
Python
app = App() MyFirstStack(app, "hello-cdk") app.synth()
Java
App app = new App(); new MyFirstStack(app, "hello-cdk"); app.synth();
C#
var app = new App(); new MyFirstStack(app, "hello-cdk"); app.Synth();
Go
app := awscdk.NewApp(nil) MyFirstStack(app, "MyFirstStack", &MyFirstStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil)

Gli stack all'interno di una singola app possono facilmente fare riferimento alle risorse e alle proprietà reciproche. AWS CDK Deduce le dipendenze tra gli stack in modo che possano essere distribuiti nell'ordine corretto. Puoi distribuire uno o tutti gli stack all'interno di un'app con un solo comando. cdk deploy

L'albero di costruzione

I costrutti vengono definiti all'interno di altri costrutti utilizzando l'scopeargomento passato a ogni costrutto, con la App classe come radice. In questo modo, un' AWS CDK app definisce una gerarchia di costrutti nota come albero dei costrutti.

La radice di questo albero è la tua app, che è un'istanza della classe. App All'interno dell'app, crei un'istanza di uno o più stack. All'interno degli stack, si creano delle istanze di costrutti, che possono a loro volta creare istanze di risorse o altri costrutti, e così via lungo l'albero.

I costrutti sono sempre definiti esplicitamente nell'ambito di un altro costrutto, che crea relazioni tra i costrutti. Quasi sempre, dovresti passare this (in Pythonself) come ambito, indicando che il nuovo costrutto è figlio del costrutto corrente. Lo schema previsto è quello da Constructcui si ricava il costrutto e poi si istanziano i costrutti che utilizza nel suo costruttore.

Il passaggio esplicito dell'ambito consente a ciascun costrutto di aggiungersi all'albero, con questo comportamento interamente contenuto nella classe base. Construct Funziona allo stesso modo in tutte le lingue supportate da AWS CDK e non richiede personalizzazioni aggiuntive.

Importante

Tecnicamente, è possibile passare a un ambito diverso da this quando si istanzia un costrutto. Puoi aggiungere costrutti ovunque nell'albero o anche in un altro stack nella stessa app. Ad esempio, potete scrivere una funzione in stile mixin che aggiunga costrutti a un ambito passato come argomento. La difficoltà pratica qui è che non potete facilmente assicurarvi che gli ID che scegliete per i vostri costrutti siano unici nell'ambito di qualcun altro. Questa pratica rende inoltre il codice più difficile da comprendere, gestire e riutilizzare. È quasi sempre meglio trovare un modo per esprimere le proprie intenzioni senza ricorrere all'abuso dell'argomento. scope

AWS CDK Utilizza gli ID di tutti i costrutti nel percorso dalla radice dell'albero a ogni costrutto figlio per generare gli ID univoci richiesti da. AWS CloudFormation Questo approccio significa che gli ID di costruzione devono essere univoci solo all'interno del loro ambito, anziché all'interno dell'intero stack come in lingua nativa. AWS CloudFormation Tuttavia, se spostate un costrutto in un ambito diverso, l'ID univoco dello stack generato cambia e AWS CloudFormation non lo considererà la stessa risorsa.

L'albero dei costrutti è separato dai costrutti definiti nel codice. AWS CDK Tuttavia, è accessibile tramite l'nodeattributo di qualsiasi costrutto, che è un riferimento al nodo che rappresenta quel costrutto nell'albero. Ogni nodo è un'Nodeistanza, i cui attributi forniscono l'accesso alla radice dell'albero e agli ambiti principali e secondari del nodo.

  1. node.children— I figli diretti del costrutto.

  2. node.id— L'identificatore del costrutto all'interno del suo ambito.

  3. node.path— Il percorso completo del costrutto, inclusi gli ID di tutti i suoi genitori.

  4. node.root— La radice dell'albero di costruzione (l'app).

  5. node.scope— L'ambito (genitore) del costrutto o non definito se il nodo è la radice.

  6. node.scopes— Tutti i genitori del costrutto, fino alla radice.

  7. node.uniqueId— L'identificatore alfanumerico univoco per questo costrutto all'interno dell'albero (per impostazione predefinita, generato da node.path e un hash).

L'albero dei costrutti definisce un ordine implicito in cui i costrutti vengono sintetizzati nelle risorse del modello finale. AWS CloudFormation Dove una risorsa deve essere creata prima di un'altra, AWS CloudFormation oppure la AWS Construct Library generalmente deduce la dipendenza. Quindi si assicurano che le risorse vengano create nell'ordine giusto.

È inoltre possibile aggiungere una dipendenza esplicita tra due nodi utilizzando. node.addDependency() Per ulteriori informazioni, consulta Dipendenze nell'API Reference.AWS CDK

AWS CDK Fornisce un modo semplice per visitare ogni nodo dell'albero di costruzione ed eseguire un'operazione su ciascuno di essi. Per ulteriori informazioni, consulta Aspetti.

Il ciclo di vita dell'app

Quando si distribuisce l'app CDK, si svolgono le seguenti fasi. Questo è noto come ciclo di vita dell'app:

Un' AWS CDK app attraversa le seguenti fasi del suo ciclo di vita.

  • Costruzione (o inizializzazione): il codice crea un'istanza di tutti i costrutti definiti e poi li collega tra loro. In questa fase, tutti i costrutti (app, stack e i relativi costrutti secondari) vengono istanziati e la catena di costruttori viene eseguita. La maggior parte del codice dell'app viene eseguita in questa fase.

  • Preparazione: tutti i costrutti che hanno implementato il prepare metodo partecipano a un ciclo finale di modifiche, per impostare il loro stato finale. La fase di preparazione avviene automaticamente. Come utente, non ricevi alcun feedback da questa fase. È raro che sia necessario utilizzare il gancio «prepare» e generalmente non è consigliato. Fate molta attenzione quando modificate l'albero di costruzione durante questa fase, perché l'ordine delle operazioni potrebbe influire sul comportamento.

  • Convalida: tutti i costrutti che hanno implementato il validate metodo possono convalidarsi per garantire che si trovino in uno stato che venga distribuito correttamente. Riceverai una notifica di eventuali errori di convalida che si verificano durante questa fase. In genere, consigliamo di eseguire la convalida il prima possibile (di solito non appena si riceve un input) e di generare le eccezioni il prima possibile. L'esecuzione precoce della convalida migliora l'affidabilità poiché le tracce dello stack saranno più accurate e garantisce che il codice possa continuare a essere eseguito in modo sicuro.

  • Sintesi: questa è la fase finale dell'esecuzione della tua AWS CDK app. Viene attivato da una chiamata aapp.synth(), attraversa l'albero dei costrutti e richiama il metodo su tutti i costrutti. synthesize I costrutti che implementano synthesize possono partecipare alla sintesi ed emettere artefatti di implementazione nell'assemblaggio cloud risultante. Questi artefatti includono AWS CloudFormation modelli, bundle di AWS Lambda applicazioni, risorse di file e Docker immagini e altri elementi di distribuzione. Assemblaggi clouddescrive l'output di questa fase. Nella maggior parte dei casi, non è necessario implementare il synthesize metodo.

  • Implementazione: in questa fase, AWS CDK CLI prende gli artefatti di implementazione prodotti dall'assemblaggio cloud prodotti dalla fase di sintesi e li distribuisce in un ambiente. AWS Carica le risorse su Amazon S3 e Amazon ECR o ovunque debbano andare. Quindi, avvia una AWS CloudFormation distribuzione per distribuire l'applicazione e creare le risorse.

Quando inizia la fase di AWS CloudFormation distribuzione, AWS CDK l'app è già terminata ed è uscita. Ciò comporta quanto segue:

  • L' AWS CDK app non è in grado di rispondere agli eventi che si verificano durante la distribuzione, ad esempio la creazione di una risorsa o il completamento dell'intera distribuzione. Per eseguire il codice durante la fase di distribuzione, è necessario inserirlo nel AWS CloudFormation modello come risorsa personalizzata. Per ulteriori informazioni sull'aggiunta di una risorsa personalizzata all'app, consulta il AWS CloudFormation modulo o l'esempio di risorsa personalizzata.

  • L' AWS CDK app potrebbe dover funzionare con valori che non possono essere conosciuti al momento dell'esecuzione. Ad esempio, se l' AWS CDK app definisce un bucket Amazon S3 con un nome generato automaticamente e recuperi l'attributo (bucket.bucketNamePython:bucket_name), quel valore non è il nome del bucket distribuito. Invece, ottieni un valore. Token Per determinare se un particolare valore è disponibile, chiama cdk.isUnresolved(value) (Python:is_unresolved). Per informazioni dettagliate, vedi Gettoni.

Assemblaggi cloud

La chiamata a app.synth() è ciò che dice loro di AWS CDK sintetizzare un assemblaggio cloud da un'app. In genere non si interagisce direttamente con gli assembly cloud. Sono file che includono tutto il necessario per distribuire l'app in un ambiente cloud. Ad esempio, include un AWS CloudFormation modello per ogni stack dell'app. Include anche una copia di qualsiasi file, risorsa o immagine Docker a cui fai riferimento nell'app.

Consulta le specifiche degli assemblaggi cloud per i dettagli sulla formattazione degli assembly cloud.

Per interagire con l'assembly cloud creato dall' AWS CDK app, in genere si utilizza il. AWS CDK CLI Tuttavia, qualsiasi strumento in grado di leggere il formato di assemblaggio cloud può essere utilizzato per distribuire l'app.

Esecuzione dell'app

Il CDK CLI deve sapere come eseguire la tua AWS CDK app. Se hai creato il progetto da un modello utilizzando il cdk init comando, il cdk.json file dell'app include una app chiave. Questa chiave specifica il comando necessario per la lingua in cui è scritta l'app. Se la tua lingua richiede la compilazione, la riga di comando esegue questo passaggio prima di eseguire l'app, quindi non puoi dimenticare di farlo.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

Se non hai creato il tuo progetto utilizzando il CDK CLI o se desideri sovrascrivere la riga di comando fornita incdk.json, puoi usare l'--appopzione quando esegui il comando. cdk

$ cdk --app 'executable' cdk-command ...

La parte eseguibile del comando indica il comando da eseguire per eseguire l'applicazione CDK. Utilizzate le virgolette come illustrato, poiché tali comandi contengono spazi. Il comando cdk è un sottocomando simile a synth or deploy che indica al CDK CLI cosa vuoi fare con la tua app. Segui questa operazione con tutte le opzioni aggiuntive necessarie per quel sottocomando.

AWS CDK CLIPossono anche interagire direttamente con un assemblaggio cloud già sintetizzato. Per farlo, passa la directory in cui è archiviato l'assembly cloud. --app L'esempio seguente elenca gli stack definiti nell'assembly cloud archiviato in./my-cloud-assembly.

$ cdk --app ./my-cloud-assembly ls