Aller au contenu

Infrastructure CDK

L’AWS CDK est un framework permettant de définir l’infrastructure cloud via du code et de la provisionner via AWS CloudFormation.

Le générateur d’infrastructure TypeScript crée une application d’infrastructure AWS CDK écrite en TypeScript. L’application générée intègre des bonnes pratiques de sécurité grâce à des vérifications CFN Guard.

Utilisation

Générer un projet d’infrastructure

Vous pouvez générer un nouveau projet d’infrastructure de deux manières :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#infra
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Options

    Paramètre Type Par défaut Description
    name Requis 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.

    Résultat du générateur

    Le générateur créera la structure de projet suivante dans le répertoire <directory>/<name> :

    • Répertoiresrc
      • main.ts Point d’entrée de l’application instanciant les piles CDK à déployer
      • Répertoirestacks Définitions des piles CDK
        • application-stack.ts Pile d’application principale
    • cdk.json Configuration CDK
    • project.json Configuration du projet et cibles de build

    Implémentation de votre infrastructure CDK

    Vous pouvez commencer à écrire votre infrastructure CDK dans src/stacks/application-stack.ts, par exemple :

    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);
    // Déclarez votre infrastructure ici
    new Bucket(this, 'MyBucket');
    }
    }

    Infrastructure d’API

    Si vous avez utilisé les générateurs tRPC API ou FastAPI, vous remarquerez que des constructs sont déjà disponibles dans packages/common/constructs pour les déployer.

    Si vous avez par exemple créé une API tRPC appelée my-api, vous pouvez simplement l’importer et l’instancier pour ajouter toute l’infrastructure nécessaire à son déploiement :

    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);
    // Ajoutez l'infrastructure pour votre API
    new MyApi(this, 'MyApi');
    }
    }

    Infrastructure de site web

    Si vous avez utilisé le générateur CloudScape website, vous remarquerez qu’un construct est déjà disponible dans packages/common/constructs pour le déployer. Exemple :

    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);
    // Ajoutez l'infrastructure pour votre site web
    new MyWebsite(this, 'MyWebsite');
    }
    }

    Il est important de déclarer le site web après les constructs d’API afin que la Configuration d’exécution du site inclue toutes les configurations des API.

    Synthèse de votre infrastructure

    Dans le cadre de votre cible build, en plus des cibles par défaut de compilation, lint et tests, votre projet d’infrastructure est synthétisé en CloudFormation. Cette opération peut aussi être exécutée indépendamment via la cible synth :

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

    Vous trouverez votre assembly cloud synthétisé dans le dossier racine dist, sous dist/packages/<my-infra-project>/cdk.out.

    Bootstrap de votre/vos compte(s) AWS

    Si vous déployez une application CDK dans un compte AWS pour la première fois, celui-ci doit d’abord être bootstrappé.

    1. Vérifiez que vous avez configuré les credentials pour votre compte AWS.
    2. Utilisez la commande cdk bootstrap :
    Fenêtre de terminal
    npx cdk bootstrap aws://<account-id>/<region>

    Pour plus de détails, consultez la documentation CDK.

    Déploiement sur AWS

    Après un build, vous pouvez déployer votre infrastructure sur AWS via la cible deploy.

    1. Vérifiez que vous avez configuré les credentials pour votre compte AWS.
    2. Exécutez la cible deploy :
    Terminal window
    pnpm nx run <my-infra>:deploy --all

    Informations complémentaires

    Pour en savoir plus sur CDK, consultez le Guide du développeur CDK et la Référence d’API.