Infrastruttura CDK
AWS CDK è un framework per definire infrastrutture cloud tramite codice e provisionarle attraverso AWS CloudFormation.
Il generatore di infrastrutture TypeScript crea un’applicazione AWS CDK per l’infrastruttura scritta in TypeScript. L’applicazione generata include best practice di sicurezza tramite controlli CFN Guard.
Utilizzo
Sezione intitolata “Utilizzo”Generare un progetto di infrastruttura
Sezione intitolata “Generare un progetto di infrastruttura”Puoi generare un nuovo progetto di infrastruttura in due modi:
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)
nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - ts#infra
- Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:ts#infra
yarn nx g @aws/nx-plugin:ts#infra
npx nx g @aws/nx-plugin:ts#infra
bunx nx g @aws/nx-plugin:ts#infra
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:ts#infra --dry-run
yarn nx g @aws/nx-plugin:ts#infra --dry-run
npx nx g @aws/nx-plugin:ts#infra --dry-run
bunx nx g @aws/nx-plugin:ts#infra --dry-run
Opzioni
Sezione intitolata “Opzioni”Parametro | Tipo | Predefinito | Descrizione |
---|---|---|---|
name Obbligatorio | string | - | The name of the application. |
ruleSet | string | aws_prototyping | Rule set to validate your AWS resources with. |
directory | string | packages | The directory of the new application. |
Output del generatore
Sezione intitolata “Output del generatore”Il generatore creerà la seguente struttura del progetto nella directory <directory>/<name>
:
Directorysrc
- main.ts Punto d’ingresso dell’applicazione che istanzia gli stack CDK da distribuire
Directorystacks Definizioni degli stack CDK
- application-stack.ts Stack applicativo principale
- cdk.json Configurazione CDK
- project.json Configurazione del progetto e target di build
Implementare la tua infrastruttura CDK
Sezione intitolata “Implementare la tua infrastruttura CDK”Puoi iniziare a scrivere la tua infrastruttura CDK all’interno di src/stacks/application-stack.ts
, ad esempio:
import * as cdk from 'aws-cdk-lib';import { Bucket } from 'aws-cdk-lib/aws-s3'import { Construct } from 'constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// Dichiarare la propria infrastruttura qui new Bucket(this, 'MyBucket'); }}
Infrastruttura per API
Sezione intitolata “Infrastruttura per API”Se hai utilizzato i generatori tRPC API o FastAPI per creare API, noterai che sono già disponibili alcuni costrutti in packages/common/constructs
per distribuirle.
Ad esempio, se hai creato un’API tRPC chiamata my-api
, puoi semplicemente importare e istanziare il costrutto per aggiungere tutta l’infrastruttura necessaria:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyApi } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// Aggiungi l'infrastruttura per la tua API new MyApi(this, 'MyApi'); }}
Infrastruttura per siti web
Sezione intitolata “Infrastruttura per siti web”Se hai utilizzato il generatore sito web CloudScape, noterai che è già disponibile un costrutto in packages/common/constructs
per distribuirlo. Esempio:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyWebsite } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// Aggiungi l'infrastruttura per il tuo sito web new MyWebsite(this, 'MyWebsite'); }}
È importante assicurarsi che il sito web venga dichiarato dopo eventuali costrutti API per includere tutte le configurazioni API nella Configurazione Runtime del sito web.
Sintetizzare la tua infrastruttura
Sezione intitolata “Sintetizzare la tua infrastruttura”Oltre agli obiettivi predefiniti di compilazione, lint e test, il target build
della tua infrastruttura esegue la sintesi in CloudFormation. Puoi eseguire questa operazione anche separatamente con il target synth
:
pnpm nx run <my-infra>:synth
yarn nx run <my-infra>:synth
npx nx run <my-infra>:synth
bunx nx run <my-infra>:synth
Troverai l’assembly cloud sintetizzato nella cartella dist
principale, sotto dist/packages/<my-infra-project>/cdk.out
.
Bootstrap del tuo account AWS
Sezione intitolata “Bootstrap del tuo account AWS”Se stai distribuendo un’applicazione CDK in un account AWS per la prima volta, è necessario eseguire il bootstrap.
Prima, assicurati di aver configurato le credenziali per il tuo account AWS.
Poi, usa il comando cdk bootstrap
:
npx cdk bootstrap aws://<account-id>/<region>
Per maggiori dettagli, consulta la documentazione CDK.
Distribuire su AWS
Sezione intitolata “Distribuire su AWS”Dopo una build, puoi distribuire l’infrastruttura su AWS con il target deploy
.
Prima, assicurati di aver configurato le credenziali per il tuo account AWS.
Poi, esegui il target deploy:
pnpm nx run <my-infra>:deploy --all
yarn nx run <my-infra>:deploy --all
npx nx run <my-infra>:deploy --all
bunx nx run <my-infra>:deploy --all
Distribuire su AWS in una pipeline CI/CD
Sezione intitolata “Distribuire su AWS in una pipeline CI/CD”Utilizza il target deploy-ci
per distribuzioni in pipeline CI/CD:
pnpm nx run <my-infra>:deploy-ci my-stack
yarn nx run <my-infra>:deploy-ci my-stack
npx nx run <my-infra>:deploy-ci my-stack
bunx nx run <my-infra>:deploy-ci my-stack
Questo target differisce leggermente dal normale deploy
perché utilizza l’assembly cloud pre-sintetizzato, evitando problemi di non-determinismo legati a versioni di pacchetti, garantendo che ogni fase della pipeline distribuisca lo stesso assembly.
Ulteriori informazioni
Sezione intitolata “Ulteriori informazioni”Per maggiori dettagli su CDK, consulta la Guida per sviluppatori CDK e il Riferimento API.