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 best practice 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 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

    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 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:

    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 l'infrastruttura per la tua API
    new MyApi(this, 'MyApi');
    }
    }

    Se hai utilizzato il generatore sito web CloudScape, noterai che è già disponibile un costrutto in packages/common/constructs per distribuirlo. 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 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.

    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:

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

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

    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:

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

    Per maggiori dettagli, consulta la documentazione CDK.

    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:

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

    Utilizza il target deploy-ci per distribuzioni in pipeline CI/CD:

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

    Per maggiori dettagli su CDK, consulta la Guida per sviluppatori CDK e il Riferimento API.