Infrastructure CDK
AWS CDK est un framework permettant de définir une infrastructure cloud via du code et de la déployer 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 :
- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)
dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - ts#infra
- Remplissez les paramètres requis
- Cliquez sur
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
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
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
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 stacks CDK à déployer
Répertoirestacks Définitions des stacks CDK
- application-stack.ts Stack applicative 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 :
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 pour créer des APIs, vous remarquerez que des constructs sont déjà disponibles dans packages/common/constructs
pour les déployer.
Par exemple, si vous avez créé une API tRPC appelée my-api
, vous pouvez simplement importer et instancier le construct pour ajouter toute l’infrastructure nécessaire à son déploiement :
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. Par exemple :
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 s’assurer que le site web est déclaré après tout construct d’API afin que la Configuration Runtime du site web inclue toutes les configurations d’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. Cela peut également être exécuté séparément via la cible 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
Vous trouverez votre assembly cloud synthétisé dans le dossier racine dist
, sous dist/packages/<my-infra-project>/cdk.out
.
Initialisation de votre/vos compte(s) AWS
Si vous déployez une application CDK sur un compte AWS pour la première fois, celui-ci doit d’abord être initialisé.
Premièrement, assurez-vous d’avoir configuré des identifiants pour votre compte AWS.
Ensuite, vous pouvez utiliser la commande cdk bootstrap
:
npx cdk bootstrap aws://<account-id>/<region>
Pour plus de détails, référez-vous à la documentation CDK.
Déploiement sur AWS
Après un build, vous pouvez déployer votre infrastructure sur AWS via la cible deploy
.
Premièrement, assurez-vous d’avoir configuré des identifiants pour votre compte AWS.
Ensuite, exécutez la cible 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
Déploiement sur AWS dans un pipeline CI/CD
Utilisez la cible deploy-ci
pour déployer sur AWS dans le cadre d’un 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
Cette cible diffère légèrement de la cible deploy
standard car elle déploie une assembly cloud pré-synthétisée plutôt que de synthétiser à la volée. Cela évite les problèmes potentiels de non-déterminisme dus aux changements de versions de packages, garantissant que chaque étape du pipeline déploie la même assembly cloud.
Plus d’informations
Pour plus d’informations sur CDK, consultez le Guide du développeur CDK et la Référence d’API.