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.

Utilizzo

Generare un Progetto di Infrastruttura

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

    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:

    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');
    }
    }

    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:

    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');
    }
    }

    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:

    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.

    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:

    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.

    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:

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

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

    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.

    Ulteriori Informazioni

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