Déployer une application web sur AWS Elastic Beanstalk

GUIDE DE DÉMARRAGE

Module 2 : Créer une infrastructure à l'aide d'AWS CDK

Dans ce module, vous développerez une application CDK qui créera toute l'infrastructure nécessaire au déploiement de l'application web NodeJS à l'aide d'Elastic Beanstalk.

Introduction

Dans ce module, vous développerez une application CDK qui créera toute l'infrastructure nécessaire au déploiement de l'application web NodeJS à l'aide d'AWS Elastic Beanstalk.

Ce que vous apprendrez

  • Création d'une application CDK simple
  • Téléchargement d'un package vers S3 en utilisant S3 Assets
  • Création d'une application Elastic Beanstalk CDK, de la version d'application et de l'environnement

 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éation de l'application CDK

Veillez à avoir la dernière version de CDK.

npm install -g cdk

Créez un nouveau répertoire et ouvrez-le.

mkdir cdk-eb-infra
cd cdk-eb-infra

Initialisez l'application CDK que vous utiliserez pour faire l'infrastructure.

cdk init app --language typescript

Créer le code pour la pile de ressources

Allez dans le fichier /lib/cdk-eb-infra-stack.ts, où vous écrirez le code pour la pile de ressources que vous allez créer. 

Une pile de ressources est un ensemble de ressources d'infrastructure cloud – dans votre cas particulier, il s'agira de toutes les ressources AWS – qui seront allouées dans un compte spécifique. Le compte sur lequel ces ressources sont allouées est la pile que vous avez configurée dans les étapes préalables. Dans cette pile de ressources, vous allez créer ces ressources :

  • S3 Assets : vous aidera à télécharger votre application zippée dans S3 et fournira à l'application CDK un moyen d'obtenir l'emplacement de l'objet.
  • Application Elastic Beanstalk : collection logique de composants Elastic Beanstalk, dont les environnements, les versions et les configurations d'environnement.
  • Version de l'application Elastic Beanstalk : fait référence à une itération spécifique, étiquetée, du code déployable pour une application web. Une version de l'application pointe vers un objet Amazon Simple Storage Service (Amazon S3) qui contient le code déployable, dans votre cas le fichier zip que vous allez télécharger sur S3 à l'aide des S3 Assets. Les applications peuvent avoir plusieurs versions et chaque version de l'application est unique.
  • Profil et rôle de l'instance : conteneur pour un rôle AWS Identity and Access Management (IAM) que vous pouvez utiliser pour transmettre des informations de rôle à une instance Amazon EC2 lorsque l'instance démarre.
  • Environnement Elastic Beanstalk : collection de ressources AWS exécutant une version de l'application. Chaque environnement n'exécute qu'une seule version de l'application à la fois.

Téléchargement automatique de l'application vers S3

Pour déployer votre application web, vous devez la mettre en package et la télécharger vers Amazon Simple Storage Service (S3) afin qu'Elastic Beanstalk puisse déployer cette application dans l'environnement.

Nous ferons le packaging de l'application dans le Module 3 de ce guide, mais pour l'instant nous allons nous concentrer sur son téléchargement vers S3. Pour ce faire, vous utiliserez un constructeur CDK appelé S3Assets. Ce module téléchargera les fichiers locaux et le répertoire vers S3.

Pour faire cela dans notre application CDK, vous devez d'abord installer le module aws-s3-assets.

npm i @aws-cdk/aws-s3-assets

Ensuite, dans votre fichier lib/cdk-eb-infra-stack.ts, ajoutez la dépendance en haut du fichier.

import s3assets = require('@aws-cdk/aws-s3-assets');

Dans la pile, sous la ligne commentée qui indique « The code that defines your stack goes here » (Le code qui définit votre pile va ici), ajoutez le code suivant.

 // Construct an S3 asset from the ZIP located from directory up.
const webAppZipArchive = new s3assets.Asset(this, 'WebAppZip', {
      path: `${__dirname}/../app.zip`,
});

Ce code utilise le module S3 Assets et prend le fichier zip de l'application web situé à la racine de l'application CDK pour le télécharger sur S3. Chaque fois que vous mettez à jour le fichier zip et que vous déployez cette pile, le fichier est mis à jour dans S3.

Ajouter les dépendances Elastic Beanstalk CDK

Créons l'application Elastic Beanstalk, la version de l'application et l'environnement, afin de pouvoir déployer l'application web que vous venez de télécharger sur S3 en utilisant S3 Assets.

Tout d'abord, vous devez installer le module Elastic Beanstalk pour CDK.

npm i @aws-cdk/aws-elasticbeanstalk

Ensuite, ajoutez la dépendance en haut du fichier /lib/cdk-eb-infra-stack.ts.

import elasticbeanstalk = require('@aws-cdk/aws-elasticbeanstalk');

Créer l'application Elastic Beanstalk

Vous pouvez maintenant créer l'application Elastic Beanstalk. Comme mentionné précédemment, une application Elastic Beanstalk est une collection logique de composants Elastic Beanstalk, comme un dossier.

Placez ce code sous le code de S3Assets. Ce code créera l'application avec le nom MyWebApp dans Elastic Beanstalk.

// Create a ElasticBeanStalk app.
const appName = 'MyWebApp';
const app = new elasticbeanstalk.CfnApplication(this, 'Application', {
    applicationName: appName,
});

Créer une version de l'application Elastic Beanstalk

Vous devez maintenant créer une version de l'application à partir du S3 Asset que vous avez créé précédemment. Ce morceau de code créera la version de l'application en utilisant le nom du compartiment S3 et la clé de l'objet S3 que les S3 Assets et CDK fourniront à cette méthode.

// Create an app version from the S3 asset defined earlier
const appVersionProps = new elasticbeanstalk.CfnApplicationVersion(this, 'AppVersion', {
    applicationName: appName,
    sourceBundle: {
        s3Bucket: webAppZipArchive.s3BucketName,
        s3Key: webAppZipArchive.s3ObjectKey,
    },
});

Avant de continuer, vous devez vous assurer que l'application Elastic Beanstalk existe avant de créer la version de l'application, ce qui est très facile à faire avec CDK.

// Make sure that Elastic Beanstalk app exists before creating an app version
appVersionProps.addDependsOn(app);

Créer le profil d'instance

Pour créer votre environnement Elastic Beanstalk, vous devrez fournir un nom de profil d'instance existant.

Un profil d'instance est un conteneur pour un rôle AWS Identity and Access Management (IAM) que vous pouvez utiliser pour transmettre des informations de rôle à une instance Amazon EC2 lorsque l'instance démarre.

Dans votre cas, la politique gérée attachée au rôle sera AWSElasticBeanstalkWebTier. Cette politique accorde des autorisations à l'application pour télécharger les journaux vers Amazon S3 et les informations de débogage vers AWS X-Ray.

La première chose que vous devez faire est d'installer le module IAM dans votre application CDK.

npm i @aws-cdk/aws-iam

Ensuite, importez la dépendance dans la pile CDK sur laquelle nous avons travaillé :

import iam = require('@aws-cdk/aws-iam');

Après le code pour créer la version de l'application, vous pouvez ajouter ce code :

// Create role and instance profile
const myRole = new iam.Role(this, `${appName}-aws-elasticbeanstalk-ec2-role`, {
    assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
});

const managedPolicy = iam.ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkWebTier')
myRole.addManagedPolicy(managedPolicy);

const myProfileName = `${appName}-InstanceProfile`

const instanceProfile = new iam.CfnInstanceProfile(this, myProfileName, {
    instanceProfileName: myProfileName,
    roles: [
        myRole.roleName
    ]
});

La première chose faite par le code est la création d'un nouveau rôle IAM (myRole).

Pour permettre aux instances EC2 de votre environnement d'assumer le rôle, le profil d'instance spécifie Amazon EC2 comme entité de confiance dans la politique de relation de confiance.

À ce rôle, nous ajoutons ensuite la politique gérée AWSElasticBeanstalkWebTier. Ensuite, avec ce rôle et le nom du profil, nous créons le profil d'instance.

Créer l'environnement AWS Elastic Beanstalk

La dernière partie que vous devez créer est l'environnement Elastic Beanstalk. L'environnement est une collection de ressources AWS qui exécutent une version de l'application. Pour l'environnement, nous devrons fournir quelques informations sur l'infrastructure.

Commençons par créer l'environnement. Lorsque vous créez l'environnement, vous devez lui donner un nom qui apparaîtra dans la console Elastic Beanstalk – dans ce cas, nous nommons l'environnement MyWebAppEnvironment.

Ensuite, vous devez donner le nom de l'application, que vous obtiendrez à partir de la définition de l'application Elastic Beanstalk créée plus tôt.

Le nom de la pile de solutions est le nom de la plateforme gérée fournie par Elastic Beanstalk pour l'exécution des applications web. En utilisant le bon nom de solution, Elastic Beanstalk allouera les bonnes ressources pour votre application, par exemple les instances Amazon Elastic Compute Cloud (Amazon EC2). Vous devez choisir la bonne pile logicielle en fonction du cadre et de la plateforme que vous choisissez pour développer votre application web. Dans ce cas particulier, vous allez mettre la chaîne « 64bit Amazon Linux 2 v5.4.4 running Node.js 14 ». Si vous souhaitez savoir d'où vient cette chaîne, vous obtiendrez davantage d'informations sur les noms des piles de solutions à la fin de ce module.

L'attribut « options settings » vous permet de configurer l'environnement Elastic Beanstalk selon vos besoins :

  • IamInstanceProfile : vous référencez ici le profil d'instance créé dans les étapes précédentes.
  • MinSize, MaxSize et InstanceTypes : configurations pour vos instances et le groupe de scalabilité automatique généré pour vous par Elastic Beanstalk. Ce sont des paramètres facultatifs : si vous ne les configurez pas, Elastic Beanstalk choisira le type d'instance et les tailles minimale et maximale du groupe de scalabilité automatique en fonction de la définition de la plateforme. Vous les définissez afin de pouvoir rester dans le cadre de l'offre gratuite AWS.

Plus d'informations sur les Options de configuration pour Elastic Beanstalk

Pour définir toutes ces options de configuration, ajoutez les lignes de code suivantes :

// Example of some options which can be configured
const optionSettingProperties: elasticbeanstalk.CfnEnvironment.OptionSettingProperty[] = [
    {
        namespace: 'aws:autoscaling:launchconfiguration',
        optionName: 'IamInstanceProfile',
        value: myProfileName,
    },
    {
        namespace: 'aws:autoscaling:asg',
        optionName: 'MinSize',
        value: '1',
    },
    {
        namespace: 'aws:autoscaling:asg',
        optionName: 'MaxSize',
        value: '1',
    },
    {
        namespace: 'aws:ec2:instances',
        optionName: 'InstanceTypes',
        value: 't2.micro',
    },
];

Nous avons enfin « version label ». C'est un attribut important car il doit référencer la version de l'application que nous venons de créer.

Avec toutes ces informations, vous pouvez maintenant créer votre environnement Elastic Beanstalk.

Collez ce code dans votre fichier de définition de pile.

// Create an Elastic Beanstalk environment to run the application
const elbEnv = new elasticbeanstalk.CfnEnvironment(this, 'Environment', {
    environmentName: 'MyWebAppEnvironment',
    applicationName: app.applicationName || appName,
    solutionStackName: '64bit Amazon Linux 2 v5.4.4 running Node.js 14',
    optionSettings: optionSettingProperties,
    versionLabel: appVersionProps.ref,
});

Erreurs courantes

Utilisation de plusieurs versions des bibliothèques CDK

Lorsque vous utilisez CDK, que vous importez une bibliothèque et que vous commencez à l'utiliser dans votre application, une erreur courante est que le mot « this » est mis en surbrillance et que vous constatez un problème de compilation.

gsg_build_elb_1

Cela peut se produire parce que vous utilisez un module CDK avec une version différente de la bibliothèque centrale CDK. Les mises à jour de CDK sont très fréquentes ; cette erreur est donc assez courante.

Pour résoudre ce problème, vous devez mettre à jour tous les packages CDK à la même version. Vous pouvez voir la version de vos packages CDK dans le fichier package.json de votre application CDK.

gsg_build_elb_2

En savoir plus

Plus d'informations sur le nom de la pile de solutions Elastic Beanstalk

Vous trouverez dans la documentation des informations sur toutes les plateformes prises en charge par Elastic Beanstalk. Cette page est régulièrement mise à jour avec l'ajout de nouvelles plateformes et le retrait d'anciennes plateformes.

Si vous êtes curieux de savoir comment obtenir le bon nom de plateforme – par exemple « 64bit Amazon Linux 2 v5.4.4 running Node.js 14 » : Vous pouvez utiliser l'AWS CLI et obtenir une liste de toutes les plateformes prises en charge.

aws elasticbeanstalk list-available-solution-stacks

Vous obtiendrez une longue liste de chaînes des plateformes prises en charge que vous pouvez utiliser dans votre application CDK.

Conclusion

Dans ce module, vous avez appris à créer toutes les ressources nécessaires pour Elastic Beanstalk afin de déployer votre application automatiquement. Dans le prochain module, vous apprendrez comment déployer votre application sur le cloud et comment la mettre à jour en cas de changement.

À venir : Déployer l'application

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