Implementazione di applicazioni AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata 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à.

Implementazione di applicazioni AWS CDK

L' AWS Cloud Development Kit (AWS CDK) implementazione è il processo di provisioning dell'infrastruttura. AWS

Come funzionano le AWS CDK implementazioni

AWS CDK Utilizza il AWS CloudFormation servizio per eseguire le distribuzioni. Prima della distribuzione, sintetizzi i tuoi stack. CDK Questo crea un CloudFormation modello e implementa gli artefatti per ogni stack dell'app. CDK Le implementazioni vengono avviate da una macchina di sviluppo locale o da un ambiente di integrazione e distribuzione continue (CI/CD). Durante la distribuzione, le risorse vengono caricate sulle risorse avviate e il CloudFormation modello viene inviato per il provisioning delle risorse. CloudFormation AWS

Affinché una distribuzione abbia successo, è necessario quanto segue:

  • L'interfaccia AWS CDK a riga di comando (AWS CDK CLI) deve essere dotata di autorizzazioni valide.

  • L' AWS ambiente deve essere avviato.

  • È AWS CDK necessario conoscere le risorse avviate in cui caricare le risorse.

Prerequisiti per le distribuzioni CDK

Prima di poter distribuire un' AWS CDK applicazione, è necessario completare quanto segue:

  • Configurare le credenziali di sicurezza per. CDK CLI

  • Avvia il tuo ambiente. AWS

  • Configura un AWS ambiente per ciascuno dei tuoi CDK stack.

  • Sviluppa la tua CDK app.

Configura le credenziali di sicurezza

Per utilizzare con cui CDK CLI interagire AWS, è necessario configurare le credenziali di sicurezza sul computer locale. Per istruzioni, consulta Configurare le credenziali di sicurezza per AWS CDKCLI.

Avvia il tuo ambiente AWS

Una distribuzione è sempre associata a uno o più AWS ambienti. Prima di poter eseguire la distribuzione, è necessario avviare l'ambiente. Il bootstrap fornisce all'ambiente le risorse che CDK utilizza per eseguire e gestire le distribuzioni. Queste risorse includono un bucket Amazon Simple Storage Service (Amazon S3) e un repository Amazon Elastic Container Registry (ECRAmazon) per archiviare e gestire le risorse. Queste risorse includono anche AWS Identity and Access Management (IAM) ruoli utilizzati per fornire autorizzazioni durante lo sviluppo e la distribuzione.

Ti consigliamo di utilizzare il AWS CDK comando Command Line Interface (AWS CDK CLI) cdk bootstrap per avviare il tuo ambiente. Se necessario, potete personalizzare il bootstrap o creare manualmente queste risorse nel vostro ambiente. Per istruzioni, consulta Avvia il tuo ambiente per utilizzarlo con AWS CDK.

Configura gli ambienti AWS

Ogni CDK stack deve essere associato a un ambiente per determinare dove viene distribuito lo stack. Per istruzioni, consulta Configurare gli ambienti da utilizzare con AWS CDK.

Sviluppa la tua app CDK

All'interno di un CDK progetto, crei e sviluppi la tua CDK app. All'interno della tua app, crei uno o più CDK stack. All'interno degli stack, è possibile importare e utilizzare i costrutti della AWS Construct Library per definire l'infrastruttura. Prima di poter eseguire la distribuzione, CDK l'app deve contenere almeno uno stack.

CDKsintesi dell'app

Per eseguire la sintesi, si consiglia di utilizzare il CDK CLI cdk synth comando. Il cdk deploy comando eseguirà anche la sintesi prima di iniziare la distribuzione. Tuttavia, utilizzandocdk synth, puoi convalidare CDK l'app e catturare gli errori prima di iniziare la distribuzione.

Il comportamento di sintesi è determinato dal sintetizzatore di stack configurato per lo stack. CDK Se non configuri un sintetizzatore, verrà utilizzato. DefaultStackSynthesizer Puoi anche configurare e personalizzare la sintesi per soddisfare le tue esigenze. Per istruzioni, consulta Configura e personalizza la sintesi CDK dello stack.

Affinché il CloudFormation modello sintetizzato possa essere distribuito correttamente nell'ambiente, deve essere compatibile con il modo in cui è stato avviato l'ambiente. Ad esempio, il CloudFormation modello deve specificare il bucket Amazon S3 corretto in cui distribuire gli asset. Se utilizzi il metodo predefinito di bootstrap del tuo ambiente, il sintetizzatore di stack predefinito funzionerà. Se personalizzi il CDK comportamento, ad esempio personalizzando il bootstrap o la sintesi, il comportamento di implementazione può variare. CDK

Il ciclo di vita dell'app

Quando esegui la sintesi, CDK l'app attraversa le seguenti fasi, note come ciclo di vita dell'app:

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, stacks e i relativi costrutti secondari) vengono istanziati e viene eseguita la catena di costruttori. 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.

Durante questa fase, una volta creato l'albero di costruzione, vengono applicati anche tutti gli aspetti configurati.

Validation

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 dell'CDKapp. 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 e produrre artefatti di distribuzione nell'assemblaggio cloud risultante. Questi artefatti includono CloudFormation modelli, bundle di AWS Lambda applicazioni, risorse di file e Docker immagini e altri elementi di distribuzione. Nella maggior parte dei casi, non è necessario implementare il metodo. synthesize

Esecuzione dell'app

È CDK CLI necessario sapere come eseguire la tua 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 lingua richiede la compilazione, la riga di comando esegue questo passaggio prima di eseguire automaticamente l'app.

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 progetto utilizzando o se desideri sovrascrivere la riga di comando fornita incdk.json, puoi fornire l'--appopzione durante l'esecuzione del cdk comando. CDK CLI

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

Il executable parte del comando indica il comando da eseguire per eseguire l'CDKapplicazione. Utilizzate le virgolette come illustrato, poiché tali comandi contengono spazi. Il cdk-command è un sottocomando simile a synth o deploy che dice CDK CLI cosa vuoi fare con la tua app. Segui questo con tutte le opzioni aggiuntive necessarie per quel sottocomando.

CDKCLIPossono 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

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 Docker immagine 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.

Distribuzione dell'applicazione

Per distribuire l'applicazione, si consiglia di utilizzare il CDK CLI cdk deploy comando per avviare le distribuzioni o per configurare le distribuzioni automatizzate.

Quando si esegue, si avvia la preparazione per cdk deploy la distribuzione. CDK CLI cdk synth Il diagramma seguente illustra il ciclo di vita dell'app nel contesto di una distribuzione:

Diagramma di flusso del ciclo di vita dell'app. AWS CDK

Durante l'implementazione, CDK CLI prende l'assemblaggio cloud prodotto da Synthesis e lo distribuisce in un ambiente. AWS Le risorse vengono caricate su Amazon S3 ECR e Amazon e il CloudFormation modello viene inviato AWS CloudFormation per la distribuzione.

Quando inizia la fase di AWS CloudFormation distribuzione, l'CDKapp ha già terminato l'esecuzione e l'uscita. Ciò comporta quanto segue:

  • L'CDKapp 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. Puoi anche configurare il modulo Triggers per eseguire il codice durante le distribuzioni.

  • L'CDKapp 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 Token e AWS CDK.

Autorizzazioni di distribuzione

Prima di poter eseguire la distribuzione, è necessario stabilire le autorizzazioni. Il diagramma seguente illustra le autorizzazioni utilizzate durante una distribuzione predefinita, quando si utilizza il processo di bootstrap e il sintetizzatore di stack predefiniti:

AWS CDK Diagramma di flusso del processo di distribuzione predefinito.
L'attore avvia la distribuzione

Le distribuzioni vengono avviate da un attore, utilizzando il. CDK CLI Un attore può essere una persona, o un servizio come. AWS CodePipeline

Se necessario, viene CDK CLI eseguito cdk synth quando corricdk deploy. Durante la sintesi, l' AWS identità presuppone LookupRole di eseguire ricerche contestuali nell' AWS ambiente.

Le autorizzazioni sono stabilite

Innanzitutto, le credenziali di sicurezza dell'attore vengono utilizzate per autenticarsi AWS e ottenere la prima IAM identità durante il processo. Per gli attori umani, il modo in cui le credenziali di sicurezza vengono configurate e ottenute dipende dal modo in cui l'utente o la sua organizzazione gestiscono gli utenti. Per ulteriori informazioni, consulta Configurare le credenziali di sicurezza per AWS CDKCLI. Per gli attori del servizio, ad esempio CodePipeline, viene assunto e utilizzato un ruolo di IAM esecuzione.

Successivamente, i IAM ruoli creati nell' AWS ambiente durante il bootstrap vengono utilizzati per stabilire le autorizzazioni necessarie per eseguire le azioni necessarie per la distribuzione. Per ulteriori informazioni su questi ruoli e sui motivi per cui concedono le autorizzazioni, consulta. IAMruoli creati durante il bootstrap Questo processo include quanto segue:

  • L' AWS identità assume il DeploymentActionRole ruolo e lo CloudFormationExecutionRole cede a CloudFormation, assicurandosi che CloudFormation assuma il ruolo quando esegue qualsiasi azione nell'ambiente AWS . DeploymentActionRoleconcede l'autorizzazione a eseguire distribuzioni nell'ambiente e CloudFormationExecutionRole determina quali azioni possono essere eseguite. CloudFormation

  • L' AWS identità presuppone ilFilePublishingRole, che determina le azioni che possono essere eseguite sul bucket Amazon S3 creato durante il bootstrap.

  • L' AWS identità presuppone ilImagePublishingRole, che determina le azioni che possono essere eseguite sul ECR repository Amazon creato durante il bootstrap.

  • Se necessario, l' AWS identità presuppone l'esecuzione di ricerche LookupRole contestuali nell'ambiente. AWS Questa azione può essere eseguita anche durante la sintesi del modello.

La distribuzione viene eseguita

Durante la distribuzione, CDK CLI legge il parametro della versione bootstrap per confermare il numero di versione bootstrap. AWS CloudFormation legge inoltre questo parametro al momento della distribuzione per confermare. Se le autorizzazioni per tutto il flusso di lavoro di distribuzione sono valide, viene eseguita la distribuzione. Le risorse vengono caricate nelle risorse avviate e il CloudFormation modello prodotto in fase di sintesi viene distribuito utilizzando il CloudFormation servizio come CloudFormation stack per fornire le risorse.