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 le migliori pratiche di sicurezza tramite controlli CFN Guard.
Utilizzo
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
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
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 deployare
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
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
Se hai utilizzato i generatori tRPC API o FastAPI per creare API, noterai che sono già disponibili alcuni construct in packages/common/constructs
per deployarle.
Ad esempio, se hai creato un’API tRPC chiamata my-api
, puoi semplicemente importare e istanziare il construct per aggiungere tutta l’infrastruttura necessaria al suo deploy:
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 infrastruttura per la tua API new MyApi(this, 'MyApi'); }}
Infrastruttura per Sito Web
Se hai utilizzato il generatore CloudScape website, noterai che è già disponibile un construct in packages/common/constructs
per deployarlo. Ad 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 infrastruttura per il sito web new MyWebsite(this, 'MyWebsite'); }}
È importante assicurarsi che il sito web venga dichiarato dopo eventuali construct di API per permettere alla Runtime Config del sito di includere tutte le configurazioni delle API.
Sintetizzare la tua Infrastruttura
Come parte del target build
, oltre all’esecuzione dei target predefiniti di compilazione, lint e test, il progetto di infrastruttura viene sintetizzato in CloudFormation. Questa operazione può essere eseguita anche separatamente tramite 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 la cloud assembly sintetizzata nella cartella dist
principale, sotto dist/packages/<my-infra-project>/cdk.out
.
Bootstrap del Tuo Account AWS
Se stai deployando un’applicazione CDK in un account AWS per la prima volta, sarà necessario eseguire il bootstrap.
Prima, assicurati di aver configurato le credenziali per il tuo account AWS.
Successivamente, puoi usare il comando cdk bootstrap
:
npx cdk bootstrap aws://<account-id>/<region>
Per maggiori dettagli, consulta la documentazione CDK.
Deploy su AWS
Dopo una build, puoi effettuare il deploy dell’infrastruttura su AWS usando il target deploy
.
Prima, assicurati di aver configurato le credenziali per il tuo account AWS.
Quindi, 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
Deploy su AWS in una Pipeline CI/CD
Utilizza il target deploy-ci
se stai effettuando il deploy su AWS come parte di una 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 target deploy
in quanto garantisce il deploy di una cloud-assembly pre-sintetizzata, invece di sintetizzarla al volo. Questo aiuta a evitare potenziali problemi di non-determinismo dovuti a cambiamenti nelle versioni dei pacchetti, assicurando che ogni stage della pipeline deployi utilizzando la stessa cloud-assembly.
Ulteriori Informazioni
Per maggiori informazioni su CDK, consulta la Guida per Sviluppatori CDK e il Riferimento API.