Salta ai contenuti

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.

Puoi generare un nuovo progetto di infrastruttura in due modi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#infra
  5. Compila i parametri richiesti
    • Clicca su Generate
    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.

    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

    Puoi iniziare a scrivere la tua infrastruttura CDK all’interno di src/stacks/application-stack.ts, ad esempio:

    src/stacks/application-stack.ts
    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');
    }
    }

    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:

    src/stacks/application-stack.ts
    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');
    }
    }

    Se hai utilizzato il generatore CloudScape website, noterai che è già disponibile un construct in packages/common/constructs per deployarlo. Ad esempio:

    src/stacks/application-stack.ts
    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.

    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:

    Terminal window
    pnpm nx run <my-infra>:synth

    Troverai la cloud assembly sintetizzata nella cartella dist principale, sotto dist/packages/<my-infra-project>/cdk.out.

    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:

    Terminal window
    npx cdk bootstrap aws://<account-id>/<region>

    Per maggiori dettagli, consulta la documentazione CDK.

    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:

    Terminal window
    pnpm nx run <my-infra>:deploy --all

    Utilizza il target deploy-ci se stai effettuando il deploy su AWS come parte di una pipeline CI/CD.

    Terminal window
    pnpm 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.

    Per maggiori informazioni su CDK, consulta la Guida per Sviluppatori CDK e il Riferimento API.