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à.
Tutorial: crea la tua prima AWS App CDK
Inizia a utilizzare il AWS Cloud Development Kit (AWS CDK) utilizzando la AWS CDK Command Line Interface (AWS CDK CLI) per sviluppare la tua prima app CDK, avviare il tuo AWS ambiente e distribuire la tua applicazione su. AWS
Prerequisiti
Prima di iniziare questo tutorial, completa tutti i passaggi di configurazione in Guida introduttiva al CDK. AWS
Informazioni sul tutorial
In questo tutorial, creerai e distribuirai una semplice applicazione sull' AWS uso del AWS CDK. L'applicazione è costituita da una funzione AWS Lambda che restituisce un Hello World! messaggio quando viene richiamata. La funzione verrà richiamata tramite l'URL di una funzione Lambda che funge da endpoint HTTP (S) dedicato per la funzione Lambda.
Attraverso questo tutorial, eseguirai quanto segue:
-
Crea il tuo progetto: crea un progetto CDK usando il comando CDK
cdk initCLI. -
Configura il tuo AWS ambiente: configura l' AWS ambiente in cui distribuirai la tua applicazione.
-
Avvia il tuo AWS ambiente: prepara il tuo AWS ambiente per la distribuzione avviandolo utilizzando il comando CDK CLI.
cdk bootstrap -
Sviluppa la tua app: usa i costrutti della AWS Construct Library per definire la tua funzione Lambda e le risorse URL della funzione Lambda.
-
Prepara la tua app per la distribuzione: utilizza la CLI CDK per creare la tua app e sintetizzare un modello. AWS CloudFormation
-
Distribuisci la tua app: usa il
cdk deploycomando CDK CLI per distribuire la tua applicazione ed eseguire il provisioning delle tue risorse. AWS -
Interagisci con la tua applicazione: interagisci con la funzione Lambda implementata richiamandola e AWS ricevendo una risposta.
-
Modifica la tua app: modifica la funzione Lambda e distribuiscila per implementare le modifiche.
-
Elimina la tua app: elimina tutte le risorse che hai creato utilizzando il comando CDK CLI.
cdk destroy
Passaggio 1: crea il tuo progetto CDK
In questo passaggio, crei un nuovo progetto CDK. Un progetto CDK dovrebbe trovarsi nella propria directory, con le proprie dipendenze locali dei moduli.
- Per creare un progetto CDK
-
-
Da una cartella di partenza a tua scelta, crea e naviga fino a una directory denominata
hello-cdk:$ mkdir hello-cdk && cd hello-cdkImportante
Assicuratevi di assegnare un nome alla cartella del progetto
hello-cdk, esattamente come mostrato qui. La CLI CDK utilizza questo nome di directory per denominare gli elementi all'interno del codice CDK. Se utilizzate un nome di directory diverso, incontrerete dei problemi durante questo tutorial. -
Dalla
hello-cdkdirectory, inizializzate un nuovo progetto CDK utilizzando il comando CDK CLI.cdk initSpecificate ilappmodello e il linguaggio di programmazione preferito con l'opzione:--languageEsempio
-
Il cdk init comando crea una struttura di file e cartelle all'interno della hello-cdk directory per aiutare a organizzare il codice sorgente per la tua app CDK. Questa struttura di file e cartelle è denominata progetto CDK. Prenditi un momento per esplorare il tuo progetto CDK.
Se l'hai Git installato, ogni progetto che crei utilizzando cdk init viene inizializzato anche come repository. Git
Durante l'inizializzazione del progetto, la CLI CDK crea un'app CDK contenente un singolo stack CDK. L'istanza dell'app CDK viene creata utilizzando il costrutto. App Di seguito è riportata una parte di questo codice dal file dell'applicazione CDK:
Esempio
Lo stack CDK viene creato utilizzando il Stack costrutto. Quanto segue è una parte di questo codice dal tuo file stack CDK:
Esempio
Passaggio 2: configura il tuo AWS ambiente
In questo passaggio, configuri l' AWS ambiente per il tuo stack CDK. In questo modo, specificate in quale ambiente verrà distribuito il vostro stack CDK.
Innanzitutto, determina l' AWS ambiente che desideri utilizzare. Un AWS ambiente è composto da un AWS account e da una AWS regione.
Quando si utilizza la AWS CLI per configurare le credenziali di sicurezza sul computer locale, è quindi possibile utilizzare la AWS CLI per ottenere informazioni AWS sull'ambiente per un profilo specifico.
- Per utilizzare la AWS CLI per ottenere l'ID dell'account AWS
-
-
Esegui il seguente comando AWS CLI per ottenere l'ID dell' AWS account per il tuo
defaultprofilo:$ aws sts get-caller-identity --query "Account" --output text -
Se preferisci utilizzare un profilo denominato, fornisci il nome del tuo profilo utilizzando l'
--profileopzione:$ aws sts get-caller-identity --profile your-profile-name --query "Account" --output text
-
- Per utilizzare la AWS CLI per ottenere la tua regione AWS
-
-
Esegui il seguente comando AWS CLI per ottenere la regione che hai configurato per il tuo
defaultprofilo:$ aws configure get region -
Se preferisci utilizzare un profilo denominato, fornisci il nome del tuo profilo utilizzando l'
--profileopzione:$ aws configure get region --profile your-profile-name
-
Successivamente, configurerai l' AWS ambiente per il tuo stack CDK modificando l'HelloCdkStackistanza nel file dell'applicazione. Per questo tutorial, codificherai le informazioni AWS sull'ambiente. Questa operazione non è consigliata per gli ambienti di produzione. Per informazioni su altri modi per configurare gli ambienti, consulta Configurare gli ambienti da utilizzare con il AWS CDK.
- Per configurare l'ambiente per il tuo stack CDK
-
-
Nel file dell'applicazione, utilizzate la
envproprietà delStackcostrutto per configurare il vostro ambiente. Di seguito è riportato un esempio:Esempio
-
Passaggio 3: avvia il tuo AWS ambiente
In questo passaggio, esegui il bootstrap dell' AWS ambiente che hai configurato nel passaggio precedente. Questo prepara l'ambiente per le implementazioni CDK.
Per avviare il vostro ambiente, eseguite quanto segue dalla radice del vostro progetto CDK:
$ cdk bootstrap
Effettuando il bootstrap dalla radice del progetto CDK, non è necessario fornire alcuna informazione aggiuntiva. L'interfaccia a riga di comando del CDK ottiene informazioni sull'ambiente dal progetto. Quando si esegue il bootstrap all'esterno di un progetto CDK, è necessario fornire informazioni sull'ambiente con il comando. cdk bootstrap Per ulteriori informazioni, consultate Bootstrap il vostro ambiente per utilizzarlo con il CDK. AWS
Passaggio 4: crea la tua app CDK
Nella maggior parte degli ambienti di programmazione, si crea o si compila il codice dopo aver apportato le modifiche. Questo non è necessario con il AWS CDK poiché la CLI CDK eseguirà automaticamente questo passaggio. Tuttavia, puoi comunque compilare manualmente quando desideri rilevare errori di sintassi e di tipo. Di seguito è riportato un esempio:
Esempio
Passaggio 5: elenca gli stack CDK nella tua app
A questo punto, dovresti avere un'app CDK contenente un singolo stack CDK. Per verificare, usa il cdk list comando CDK CLI per visualizzare i tuoi stack. L'output dovrebbe mostrare un singolo stack denominato: HelloCdkStack
$ cdk list HelloCdkStack
Se non vedi questo risultato, verifica di essere nella directory di lavoro corretta del tuo progetto e riprova. Se ancora non vedi il tuo stack, ripeti il passaggio 1: crea il tuo progetto CDK e riprova.
Fase 6: Definisci la tua funzione Lambda
In questo passaggio, si importa il aws_lambda modulo dalla AWS Construct Library e si utilizza il costrutto Function L2.
Modificate il file dello stack CDK come segue:
Esempio
Diamo un'occhiata più da vicino al Function costrutto. Come tutti i costrutti, la Function classe accetta tre parametri:
-
scope — Definisce l'
Stackistanza come elemento principale del costrutto.FunctionTutti i costrutti che definiscono AWS le risorse vengono creati nell'ambito di uno stack. È possibile definire i costrutti all'interno dei costrutti, creando una gerarchia (albero). Qui, e nella maggior parte dei casi, l'ambito èthis(in Python).self -
Id: l'ID del costrutto
Functionall'interno dell'app AWS CDK. Questo ID, più un hash basato sulla posizione della funzione all'interno dello stack, identifica in modo univoco la funzione durante la distribuzione. Il AWS CDK fa riferimento a questo ID anche quando aggiorni il costrutto nell'app e lo ridistribuisci per aggiornare la risorsa distribuita. Qui, l'ID del tuo costrutto è.HelloWorldFunctionLe funzioni possono anche avere un nome, specificato con lafunctionNameproprietà. Questo è diverso dall'ID del costrutto. -
props: un insieme di valori che definiscono le proprietà della funzione. Qui si definiscono le proprietà
runtime,handler, ecode.Gli oggetti di scena sono rappresentati in modo diverso nelle lingue supportate dal AWS CDK.
-
In TypeScript and JavaScript,
propsè un singolo argomento e si passa un oggetto contenente le proprietà desiderate. -
In Python, gli oggetti di scena vengono passati come argomenti di parole chiave.
-
In Java, viene fornito un Builder per passare gli oggetti di scena. Ce ne sono due: uno per
FunctionPropse un secondo per consentirtiFunctiondi creare il costrutto e il relativo oggetto props in un unico passaggio. Questo codice utilizza quest'ultimo. -
In C#, si crea un'istanza di un
FunctionPropsoggetto utilizzando un inizializzatore di oggetti e lo si passa come terzo parametro.Se gli oggetti di scena di un costrutto sono opzionali, potete omettere completamente il parametro.
props
-
Tutti i costrutti utilizzano questi stessi tre argomenti, quindi è facile rimanere orientati man mano che ne impari di nuovi. E come prevedibile, puoi sottoclassare qualsiasi costrutto per estenderlo in base alle tue esigenze o se desideri modificarne i valori predefiniti.
Passaggio 7: Definisci l'URL della tua funzione Lambda
In questo passaggio, si utilizza il metodo addFunctionUrl helper del Function costrutto per definire l'URL di una funzione Lambda. Per restituire il valore di questo URL al momento della distribuzione, creerai un AWS CloudFormation output utilizzando il costrutto. CfnOutput
Aggiungete quanto segue al file dello stack CDK:
Esempio
avvertimento
Per semplificare questo tutorial, l'URL della funzione Lambda è definito senza autenticazione. Una volta distribuito, questo crea un endpoint accessibile al pubblico che può essere utilizzato per richiamare la tua funzione. Al termine di questo tutorial, segui il passaggio 12: Elimina l'applicazione per eliminare queste risorse.
Fase 8: Sintetizzare un modello CloudFormation
In questo passaggio, ti prepari per l'implementazione sintetizzando un CloudFormation modello con il comando CDK CLI. cdk synth Questo comando esegue la convalida di base del codice CDK, esegue l'app CDK e genera un modello dallo stack CDK. CloudFormation
Se la tua app contiene più di uno stack, devi specificare quali stack sintetizzare. Poiché l'app contiene un singolo stack, la CLI del CDK rileva automaticamente lo stack da sintetizzare.
Se non sintetizzate un modello, la CLI CDK eseguirà automaticamente questo passaggio durante la distribuzione. Tuttavia, ti consigliamo di eseguire questo passaggio prima di ogni distribuzione per verificare la presenza di errori di sintesi.
Prima di sintetizzare un modello, è possibile creare un'applicazione in modo da rilevare errori di sintassi e di tipo. Per istruzioni, consulta la Fase 4: Creazione dell'app CDK.
Per sintetizzare un CloudFormation modello, esegui quanto segue dalla radice del progetto:
$ cdk synth
Nota
Se ricevi un errore come il seguente, verifica di essere nella hello-cdk directory e riprova:
--app is required either in command-line, in cdk.json or in ~/.cdk.json
In caso di successo, la CLI CDK genererà un modello in YAML formato stdout e salverà un CloudFormation modello in JSON formato nella directory del progetto. cdk.out
Di seguito è riportato un esempio di output del modello: CloudFormation
Resources: HelloWorldFunctionServiceRole<unique-identifier>: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/ServiceRole/Resource HelloWorldFunction<unique-identifier>: Type: AWS::Lambda::Function Properties: Code: ZipFile: " \ exports.handler = async function(event) { \ return { \ statusCode: 200, \ body: JSON.stringify('Hello World!'), \ }; \ }; \ " Handler: index.handler Role: Fn::GetAtt: - HelloWorldFunctionServiceRole<unique-identifier> - Arn Runtime: nodejs20.x DependsOn: - HelloWorldFunctionServiceRole<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/Resource HelloWorldFunctionFunctionUrl<unique-identifier>: Type: AWS::Lambda::Url Properties: AuthType: NONE TargetFunctionArn: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/FunctionUrl/Resource HelloWorldFunctioninvokefunctionurl<unique-identifier>: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunctionUrl FunctionName: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn FunctionUrlAuthType: NONE Principal: "*" Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/invoke-function-url CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/CDKMetadata/Default Condition: CDKMetadataAvailable Outputs: myFunctionUrlOutput: Value: Fn::GetAtt: - HelloWorldFunctionFunctionUrl<unique-identifier> - FunctionUrl Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/<unique-identifier>/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Rules: CheckBootstrapVersion: Assertions: - Assert: Fn::Not: - Fn::Contains: - - "1" - "2" - "3" - "4" - "5" - Ref: BootstrapVersion AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
Nota
Ogni modello generato contiene una AWS::CDK::Metadata risorsa per impostazione predefinita. Il team AWS CDK utilizza questi metadati per ottenere informazioni sull'utilizzo del AWS CDK e trovare modi per migliorarlo. Per dettagli, incluso come disattivare la segnalazione delle versioni, consulta Segnalazione delle versioni. Rapporti sulla versione
Definendo un singolo costrutto L2, il AWS CDK crea un CloudFormation modello completo contenente le risorse Lambda, insieme alle autorizzazioni e alla logica di incollaggio necessarie per consentire alle risorse di interagire all'interno dell'applicazione.
Fase 9: Implementa il tuo stack CDK
In questo passaggio, utilizzi il cdk deploy comando CDK CLI per distribuire il tuo stack CDK. Questo comando recupera il CloudFormation modello generato e lo distribuisce AWS CloudFormation, eseguendo il provisioning delle risorse come parte di uno stack. CloudFormation
Dalla radice del progetto, esegui quanto segue. Conferma le modifiche se richiesto:
$ cdk deploy ✨ Synthesis time: 2.69s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening). Please confirm you intend to make the following modifications: IAM Statement Changes ┌───┬───────────────────────────────────────┬────────┬──────────────────────────┬──────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction.Arn} │ Allow │ lambda:InvokeFunctionUrl │ * │ │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │ └───┴───────────────────────────────────────┴────────┴──────────────────────────┴──────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤ │ + │ ${HelloWorldFunction/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │ └───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y
Analogamentecdk synth, non è necessario specificare lo stack AWS CDK poiché l'app contiene un singolo stack.
Durante la distribuzione, la CLI CDK mostra le informazioni sullo stato di avanzamento dell'implementazione dello stack. Al termine, puoi accedere alla AWS CloudFormation console HelloCdkStack Puoi anche accedere alla console Lambda per visualizzare la tua HelloWorldFunction risorsa.
Al termine della distribuzione, l'interfaccia a riga di comando del CDK restituirà l'URL dell'endpoint. Copia questo URL per il passaggio successivo. Di seguito è riportato un esempio:
... HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 41.65s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<api-id>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 44.34s
Passaggio 10: interagisci con la tua applicazione su AWS
In questo passaggio, interagisci con la tua applicazione AWS richiamando la tua funzione Lambda tramite l'URL della funzione. Quando accedi all'URL, la tua funzione Lambda restituisce il messaggio. Hello World!
Per richiamare la funzione, accedi all'URL della funzione tramite il browser o dalla riga di comando. Di seguito è riportato un esempio:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello World!"%
Passaggio 11: modifica l'applicazione
In questo passaggio, modifichi il messaggio che la funzione Lambda restituisce quando viene richiamata. Si esegue un diff utilizzando il cdk diff comando CDK CLI per visualizzare in anteprima le modifiche e distribuirlo per aggiornare l'applicazione. Quindi interagisci con la tua applicazione AWS per visualizzare il tuo nuovo messaggio.
Modifica l'myFunctionistanza nel tuo file stack CDK come segue:
Esempio
Attualmente, le modifiche al codice non hanno apportato alcun aggiornamento diretto alla risorsa Lambda distribuita. Il codice definisce lo stato desiderato della risorsa. Per modificare la risorsa distribuita, utilizzerai la CLI CDK per sintetizzare lo stato desiderato in un nuovo modello. AWS CloudFormation Quindi, distribuirai il tuo nuovo CloudFormation modello come set di modifiche. I set di modifiche apportano solo le modifiche necessarie per raggiungere il nuovo stato desiderato.
Per visualizzare in anteprima le modifiche, esegui il cdk diff comando. Di seguito è riportato un esempio:
$ cdk diff Stack HelloCdkStack Hold on while we create a read-only change set to get a diff with accurate replacement information (use --method=template to use a less accurate but faster template-only diff) Resources [~] AWS::Lambda::Function HelloWorldFunction HelloWorldFunction<unique-identifier> └─ [~] Code └─ [~] .ZipFile: ├─ [-] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; └─ [+] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; ✨ Number of stacks with differences: 1
Per creare questo diff, la CLI del CDK richiede all'account AWS dell'account l'ultimo AWS CloudFormation modello per lo stack. HelloCdkStack Quindi, confronta il modello più recente con il modello appena sintetizzato dalla tua app.
Per implementare le modifiche, esegui il comando. cdk deploy Di seguito è riportato un esempio:
$ cdk deploy ✨ Synthesis time: 2.12s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 26.96s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<unique-identifier>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 29.07s
Per interagire con l'applicazione, ripeti il passaggio 10: Interagisci con l'applicazione attiva AWS. Di seguito è riportato un esempio:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello CDK!"%
Passaggio 12: Elimina l'applicazione
In questo passaggio, si utilizza il cdk destroy comando CDK CLI per eliminare l'applicazione. Questo comando elimina CloudFormation lo stack associato allo stack CDK, che include le risorse che hai creato.
Per eliminare l'applicazione, esegui il cdk destroy comando e conferma la richiesta di eliminazione dell'applicazione. Di seguito è riportato un esempio:
$ cdk destroy Are you sure you want to delete: HelloCdkStack (y/n)? y HelloCdkStack: destroying... [1/1] ✅ HelloCdkStack: destroyed
Fasi successive
Complimenti! Hai completato questo tutorial e hai utilizzato il AWS CDK per creare, modificare ed eliminare correttamente le risorse nel AWS cloud. Ora sei pronto per iniziare a utilizzare il AWS CDK.
Per saperne di più sull'uso del AWS CDK nel tuo linguaggio di programmazione preferito, vedi Lavorare con la libreria AWS CDK.
Per risorse aggiuntive, consulta quanto segue:
-
Prova il CDK Workshop
per un tour più approfondito su un progetto più complesso. -
Consulta il riferimento all'API per iniziare a esplorare i costrutti CDK disponibili per i tuoi servizi preferiti. AWS
-
Visita Construct Hub
per scoprire i costrutti creati da e altri. AWS -
Esplora gli esempi
di utilizzo del CDK. AWS
Il AWS CDK è un progetto open source. Per contribuire, consulta Contributing to the AWS Cloud Development Kit (AWS CDK).