Démarrer avec AWS CDK

GUIDE DE DÉMARRAGE

Module 3 : Créer votre premier projet AWS CDK

Dans ce module, vous allez créer une infrastructure à l'aide de du Cloud Development Kit (CDK) AWS.

Introduction

Dans ce guide, nous allons utiliser la CLI AWS CDK pour créer un nouveau projet d'infrastructure à l'aide de TypeScript. Nous apprendrons également à écrire une ressource simple et à synthétiser et déployer votre code CDK. La synthèse est la façon dont CDK transforme votre code d'infrastructure en modèles AWS CloudFormation.

Qu'allez-vous apprendre ?

  • Créer un nouveau projet CDK avec TypeScript.
  • Écrire une ressource simple sur CDK (VPC).
  • Synthétiser votre code CDK dans un modèle CloudFormation.
  • Déployer l'infrastructure dans votre compte AWS.

 Durée

15 minutes

 Prérequis du module

  • Compte AWS avec accès administrateur**
  • Dernière version de Chrome ou de Firefox (recommandé)

[**] Il est possible que les comptes créés au cours des dernières 24 heures n'aient pas encore accès aux services nécessaires à ce tutoriel.

Implémentation

Créer un nouveau projet CDK

Pour créer un nouveau projet CDK, nous allons utiliser la CLI CDK. Pour commencer, créez un répertoire vide sur votre système et ouvrez-le. Nous allons maintenant utiliser cdk init pour créer un nouveau projet CDK TypeScript :

mkdir cdk-demo
cd cdk-demo
cdk init --language typescript

Cela créera la structure du dossier et installera certains des modules nécessaires à un projet CDK TypeScript. Le résultat devrait ressembler à ceci :

Applying project template app for typescript
# Welcome to your CDK TypeScript project!

This is a blank project for TypeScript development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

## Useful commands

 * `npm run build`   compile typescript to js
 * `npm run watch`   watch for changes and compile
 * `npm run test`    perform the jest unit tests
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk synth`       emits the synthesized CloudFormation template

Initializing a new git repository...
Executing npm install...
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated sane@4.1.0: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added
npm notice
npm notice New minor version of npm available! 7.19.0 -> 7.20.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.20.1
npm notice Run npm install -g npm@7.20.1 to update!
npm notice
✅ All done!

Il vous fournit également les commandes nécessaires pour vous aider à démarrer votre projet CDK. Nous sommes maintenant prêts à écrire notre premier code CDK pour créer une infrastructure.

Créer l'infrastructure

Pour commencer à construire un projet, un point de départ courant est de créer un réseau virtuel logiquement isolé que vous définissez, appelé un Amazon Virtual Private Cloud (VPC). Avant de créer notre premier VPC, nous devons comprendre les fichiers qui ont été créés par la commande cdk init.

Créer et déployer votre application CDK

├── bin
│   └── cdk-demo.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── cdk-demo-stack.ts
├── package.json
├── package-lock.json
├── README.md
├── test
│   └── cdk-demo.test.ts
└── tsconfig.json

Voici quelques-uns des fichiers importants et leur utilité :

  • bin/cdk-project.ts – Point d'entrée de votre application CDK. Cela va charger/créer toutes les piles que nous définissons sous lib/*
  • lib/cdk-project-stack.ts – C'est ici que votre principale pile d'application CDK est définie. Vos ressources et ses propriétés peuvent aller ici.
  • package.json – C'est ici que vous définissez les dépendances de votre projet, ainsi que quelques informations supplémentaires et des scripts de construction (npm build, npm test, npm watch).
  • cdk.json – Ce fichier indique à la boîte à outils la manière d'exécuter votre application ainsi que quelques réglages et paramètres supplémentaires liés à CDK et à votre projet.

Nous nous concentrerons dans ce guide sur les fichiers lib/cdk-demo.ts et bin/cdk-demo.ts pour créer notre infrastructure. Ajoutons un peu de code.

Définir quelques éléments dans notre application

Avant de définir notre VPC dans la pile principale, nous devons nous assurer que nous déployons vers le bon compte et la bonne région. Bien que le CDK tire ces informations de votre configuration locale aws cli, il est préférable de les configurer manuellement dans votre code CDK afin d'éviter les valeurs incorrectes en cas de changement de configuration. Pour ce guide, ceci est nécessaire en raison des paramètres que nous allons définir dans notre VPC. Si vous ne spécifiez pas ces informations, la pile sera indépendante de l'environnement, mais certaines fonctions et recherches de contextes ne fonctionneront pas. Pour plus d'informations, consultez environnements dans la documentation.

Modifiez votre pile bin/cdk-demo.ts pour qu'elle ressemble à ceci. Veillez à remplacer votre ID de compte AWS par le bon numéro et à choisir la bonne région. Pour ce guide, nous vous suggérons de choisir soit us-east-1, soit eu-west-1.

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { CdkDemoStack } from '../lib/cdk-demo-stack';

const app = new cdk.App();
new CdkDemoStack(app, 'CdkDemoStack', {
  env: { account: '123456789012', region: 'eu-west-1' },

});

Vous êtes maintenant prêt à écrire votre première ressource.

Code pour le VPC

Nous allons créer un VPC, avec deux sous-réseaux accessibles au public, répartis sur deux zones de disponibilité. Avant de nous plonger dans l'écriture du code, nous devons expliquer et installer les modules construct library. Différents services sont regroupés dans des modules pour vous permettre d'ajouter uniquement les dépendances dont vous avez besoin pour l'infrastructure que vous allouez. Les modules peuvent être destinés à un seul service, par exemple AWS Amplify, ou à plusieurs services, par exemple Amazon EC2. Pour ce guide, nous aurons besoin du module Amazon EC2, qui inclut également la prise en charge des VPC AWS.

Pour installer votre module, nous utiliserons npm. Exécutez la commande suivante dans le répertoire de votre projet :

npm install @aws-cdk/aws-ec2

Elle installera tous les modules nécessaires dont nous avons besoin. Si vous regardez dans votre package.json, vous verrez qu'il y a également été ajouté.

Nous sommes maintenant prêts à créer notre VPC. Ouvrez la définition de votre pile dans lib/cdk-demo.ts. En ouvrant le fichier pour la première fois, vous devriez voir quelque chose comme ceci :

import * as cdk from '@aws-cdk/core';

export class CdkDemoStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here
  }
}

C'est le squelette de notre projet. Si vous exécutez CDK maintenant, aucune ressource ne sera créée car nous n'en avons pas encore défini. Pour commencer avec le VPC, nous devons importer le module installé et référencer les modules de code dans les ressources – nous allons importer la classe Vpc et la classe SubnetType.

import * as cdk from '@aws-cdk/core';

// CHANGE: This is where you import the classes from the module:
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

export class CdkDemoStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here
  }
}

Lors de la création d'un VPC, il existe un certain nombre de propriétés que nous pouvons définir pour l'adapter à nos besoins. Par défaut, un VPC sera créé sur 3 zones de disponibilité (AZ), avec des sous-réseaux publics et privés (avec une seule passerelle Internet et 3 passerelles NAT). Pour ce guide, nous voulons seulement créer une configuration très simple couvrant 2 zones de disponibilité, avec un sous-réseau public pour chacune. Veuillez lire ce document pour une explication plus détaillée des différences. 

Pour créer notre VPC, nous allons spécifier deux AZ et les détails permettant de créer un sous-réseau public comme indiqué ci-dessous :

import * as cdk from '@aws-cdk/core';
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

export class CdkDemoStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here
    // CHANGE: We have created the vpc object from the Vpc class.
    const vpc = new Vpc(this, 'MainVpc',{
    
    // CHANGE: this is where we define how many AZs to use
    maxAzs: 2,
      
   // CHANGE: We define a single subnet configuration per AZ.
      subnetConfiguration:  [
        {
          // CHANGE: this is it's CIDR mask so 255.255.255.0
          cidrMask: 24,

          // CHANGE: a name for each of these subnets
          name: 'public-subnet',

          // CHANGE: and the subnet type to be used - here we will have
          // a public subnet. There are other options available here.
          subnetType: SubnetType.PUBLIC
        },
      ]
    });
  }
}

Nous sommes maintenant prêts à déployer ce changement d'infrastructure sur notre compte.

Durée de déploiement

Il est temps de tester notre déploiement. Pour voir si votre code est valide, vous pouvez exécuter « npm build » qui compilera TypeScript en JavaScript. Si cela fonctionne, vous pouvez exécuter la commande « deploy » :

cdk deploy

Elle compilera votre TypeScript en JavaScript et créera un ensemble de changements CloudFormation pour déployer cette modification. CDK gère tout cela pour vous, ainsi que le téléchargement du fichier modèle vers S3 et l'utilisation de CloudFormation pour l'exécuter. Le résultat devrait être similaire à celui-ci :

# cdk deploy
CdkDemoStack: deploying...
CdkDemoStack: creating CloudFormation changeset...
[··························································] (0/13)

3:50:17 PM | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack            | CdkDemoStack
3:50:21 PM | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | MainVpc/IGW
3:50:21 PM | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | MainVpc
3:50:22 PM | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata/Default

Quelques minutes plus tard, vous devriez obtenir une coche verte ainsi qu'un ARN (Amazon Resource Name) de votre pile CloudFormation nouvellement créée. Votre nouveau VPC a maintenant été déployé et est prêt à être utilisé.

Nettoyage des ressources (facultatif)

Le VPC créé dans ce guide ne coûtera rien par mois, mais il existe un quota qui limite chaque région d'un compte à seulement 5 VPC – vous pouvez augmenter cette limite via un ticket de support si nécessaire. Si vous souhaitez supprimer vos ressources nouvellement créées, vous pouvez exécuter la commande cdk destroy qui supprimera toutes les ressources via la pile CloudFormation qu'elle a créée précédemment.

cdk destroy

Vous devriez recevoir l'invite ci-dessous. Après avoir appuyé sur y et Entrée, il commencera à supprimer toute l'infrastructure et vous tiendra informé. Une fois qu'il aura terminé, vous verrez ce qui suit :

Are you sure you want to delete: CdkEcsInfraStack (y/n)? y
CdkEcsInfraStack: destroying...

✅  CdkEcsInfraStack: destroyed

Conclusion

Félicitations ! Vous avez terminé le guide Démarrer avec AWS CDK. Dans ce guide, nous avons créé notre premier projet AWS CDK en TypeScript en créant un VPC. Nous avons couvert l'initialisation d'un nouveau projet CDK et son utilisation pour créer cette infrastructure. Ce code CDK et ce VPC seront utilisés dans les prochains guides. Nous vous recommandons de consulter le guide sur la façon de déployer votre première application web. 

Si vous souhaitez approfondir des concepts tels que les structures de dossiers, les constructions, les piles et les applications, nous vous recommandons de lire la documentation

Dites-nous si nous avons répondu à vos attentes.

Nous vous remercions pour votre commentaire
Nous sommes ravis que cette page vous ait été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer
Nous vous remercions pour votre commentaire
Nous sommes désolés que cette page ne vous ait pas été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer