Déploiement d'une application Node.js avec DynamoDB vers Elastic Beanstalk - AWS Elastic Beanstalk

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déploiement d'une application Node.js avec DynamoDB vers Elastic Beanstalk

Ce didacticiel et son exemple d'application nodejs-example-dynamo.zip vous guident JavaScript dans le processus de déploiement d'une application Node.js qui utilise le AWS SDK de Node.js pour interagir avec le service Amazon DynamoDB. Vous allez créer une table DynamoDB qui se trouve dans une base de données découplée, ou externe, de l'environnement. AWS Elastic Beanstalk Vous allez également configurer l'application pour qu'elle utilise une base de données dissociée. Dans un environnement de production, l'utilisation d'une base de données dissociée de l'environnement Elastic Beanstalk constitue une bonne pratique, afin qu'elle soit indépendante du cycle de vie de l'environnement. Cette pratique vous permet également d'effectuer des déploiements bleus/verts.

L'exemple d'application illustre ce qui suit :

  • Une table DynamoDB qui stocke des données textuelles fournies par l'utilisateur.

  • Les fichiers de configuration pour créer la table.

  • Une rubrique Amazon Simple Notification Service.

  • L'utilisation d'un fichier package.json pour installer des packages pendant le déploiement.

Prérequis

Ce tutoriel nécessite les prérequis suivants :

  • Les exécutions Node.js

  • Le logiciel de gestion des packages Node.js par défaut, npm

  • Le générateur de ligne de commande Express

  • Interface de ligne de commande Elastic Beanstalk (EB)

Pour plus d'informations sur l'installation des trois premiers composants et la configuration de votre environnement de développement local, consultez Configuration de votre environnement de développement Node.js pour Elastic Beanstalk. Pour ce didacticiel, il n'est pas nécessaire d'installer le AWS SDK pour Node.js, qui est également mentionné dans la rubrique référencée.

Pour plus d'informations sur l'installation et la configuration de l'EB CLI, consultez Installation de l'interface de ligne de commande Elastic Beanstalk et Configuration de l'interface de ligne de commande EB.

Créer un environnement Elastic Beanstalk

Votre répertoire d'application

Ce tutoriel utilise un répertoire appelé nodejs-example-dynamo pour la création de la solution groupée de l'application. Créez le répertoire nodejs-example-dynamo pour ce tutoriel.

~$ mkdir nodejs-example-dynamo
Note

Chaque tutoriel de ce chapitre utilise son propre répertoire pour la solution groupée de l'application. Le nom du répertoire correspond au nom de l'exemple d'application utilisé par le tutoriel.

Changez votre répertoire de travail actuel vers nodejs-example-dynamo.

~$ cd nodejs-example-dynamo

Configurons maintenant un environnement Elastic Beanstalk exécutant la plateforme Node.js et l'exemple d'application. Nous utiliserons l'interface de ligne de commande Elastic Beanstalk (EB CLI).

Pour configurer un référentiel de l'EB CLI pour votre application et créer un environnement Elastic Beanstalk qui exécute la plateforme Node.js
  1. Créez un référentiel à l'aide de la commande eb init.

    ~/nodejs-example-dynamo$ eb init --platform node.js --region <region>

    Cette commande crée un fichier de configuration dans un dossier nommé .elasticbeanstalk qui spécifie les paramètres de création d'environnements pour votre application et crée une application Elastic Beanstalk dont le nom est basé sur le dossier actif.

  2. Créez un environnement qui exécute un exemple d'application à l'aide de la commande eb create.

    ~/nodejs-example-dynamo$ eb create --sample nodejs-example-dynamo

    Cette commande crée un environnement à charge équilibrée avec les paramètres par défaut de la plateforme Node.js et les ressources suivantes :

    • EC2 instance — Une machine virtuelle Amazon Elastic Compute Cloud (Amazon EC2) configurée pour exécuter des applications Web sur la plateforme de votre choix.

      Chaque plateforme exécute un ensemble spécifique de logiciels, de fichiers de configuration et de scripts pour prendre en charge une version de langage, une infrastructure ou un conteneur web spécifiques, ou une combinaison de ces éléments. La plupart des plateformes utilisent Apache ou nginx comme proxy inverse situé devant votre application web, qui lui transmet des demandes, traite des ressources statiques et génère des journaux d'accès et d'erreur.

    • Groupe de sécurité d'instance : groupe EC2 de sécurité Amazon configuré pour autoriser le trafic entrant sur le port 80. Cette ressource permet au trafic HTTP provenant de l'équilibreur de charge d'atteindre l' EC2 instance qui exécute votre application Web. Par défaut, le trafic n'est pas autorisé sur les autres ports.

    • Équilibreur de charge – Équilibreur de charge Elastic Load Balancing configuré pour répartir les demandes vers les instances exécutant votre application. De plus, l'équilibreur de charge vous évite d'exposer directement vos instances sur Internet.

    • Groupe de sécurité d'équilibrage de charge : groupe EC2 de sécurité Amazon configuré pour autoriser le trafic entrant sur le port 80. Cette ressource autorise le trafic HTTP provenant d'Internet à atteindre l'équilibreur de charge. Par défaut, le trafic n'est pas autorisé sur les autres ports.

    • Groupe Auto Scaling – Groupe Auto Scaling configuré pour remplacer une instance si elle est résiliée ou devient indisponible.

    • Compartiment Amazon S3 – Emplacement de stockage pour votre code source, les journaux et autres artefacts qui sont créés lorsque vous utilisez Elastic Beanstalk.

    • CloudWatch Alarmes Amazon : deux CloudWatch alarmes qui surveillent la charge sur les instances de votre environnement et qui sont déclenchées si la charge est trop élevée ou trop faible. Lorsqu'une alarme est déclenchée, votre groupe Auto Scaling s'adapte en fonction, à la hausse ou à la baisse.

    • AWS CloudFormation stack — Elastic AWS CloudFormation Beanstalk utilise pour lancer les ressources de votre environnement et propager les modifications de configuration. Les ressources sont définies dans un modèle, que vous pouvez afficher dans la console AWS CloudFormation.

    • Nom de domaine : nom de domaine qui permet d'accéder à votre application Web dans le formulaire subdomain. region.elasticbeanstalk.com.

      Sécurité du domaine

      Pour renforcer la sécurité de vos applications Elastic Beanstalk, le domaine elasticbeanstalk.com est enregistré dans la liste des suffixes publics (PSL).

      Si vous devez définir des cookies sensibles dans le nom de domaine par défaut de vos applications Elastic Beanstalk, nous vous recommandons d'utiliser des cookies __Host- avec un préfixe pour une sécurité accrue. Cette pratique protège votre domaine contre les tentatives de falsification de requêtes intersites (CSRF). Pour plus d'informations, consultez la page Set-Cookie du Mozilla Developer Network.

  3. Une fois l'environnement créé, utilisez la commande eb open pour ouvrir l'URL de l'environnement dans le navigateur par défaut.

    ~/nodejs-example-dynamo$ eb open

Vous avez maintenant créé un environnement Node.js Elastic Beanstalk avec un exemple d'application. Vous pouvez le mettre à jour avec votre propre application. Ensuite, nous mettons à jour l'exemple d'application afin d'utiliser l'infrastructure Express.

Ajout d'autorisations aux instances de votre environnement

Votre application s'exécute sur une ou plusieurs EC2 instances derrière un équilibreur de charge, servant les requêtes HTTP provenant d'Internet. Lorsqu'elle reçoit une demande qui l'oblige à utiliser AWS des services, l'application utilise les autorisations de l'instance sur laquelle elle s'exécute pour accéder à ces services.

L'exemple d'application utilise les autorisations d'instance pour écrire des données dans une table DynamoDB et pour envoyer des notifications à une rubrique Amazon SNS à l'aide du SDK pour Node.js. JavaScript Ajoutez les politiques gérées suivantes au profil d'instance par défaut pour autoriser les EC2 instances de votre environnement à accéder à DynamoDB et à Amazon SNS :

  • AmazonDynamoDBFullAccès

  • Amazon SNSFull Access

Pour ajouter des stratégies au profil d'instance par défaut
  1. Ouvrez la page Roles (Rôles) dans la console IAM.

  2. Choisissez aws-elasticbeanstalk-ec2 rôles.

  3. Sous l'onglet Permissions (Autorisations), choisissez Attach policies (Attacher des politiques).

  4. Sélectionnez la politique gérée relative aux services supplémentaires utilisés par votre application. Dans le cadre de ce tutoriel, sélectionnez AmazonSNSFullAccess et AmazonDynamoDBFullAccess.

  5. Choisissez Attach policy (Attacher la politique).

Pour de plus amples informations sur la gestion des profils d'instance, veuillez consulter Gestion des profils d'instance Elastic Beanstalk.

Déploiement de l'exemple d'application

Votre environnement est maintenant prêt pour que vous puissiez déployer et exécuter l'exemple d'application pour ce didacticiel : nodejs-example-dynamo.zip.

Pour déployer et exécuter l'exemple d'application du tutoriel
  1. Changez votre répertoire de travail actuel vers le répertoire de l'application nodejs-example-dynamo.

    ~$ cd nodejs-example-dynamo
  2. Téléchargez et extrayez le contenu de l'exemple de bundle source d'application nodejs-example-dynamo.zip dans le répertoire nodejs-example-dynamo de l'application.

  3. Déployez l'exemple d'application dans votre environnement Elastic Beanstalk avec la commande eb deploy.

    ~/nodejs-example-dynamo$ eb deploy
    Note

    Par défaut, la eb deploy commande crée un fichier ZIP du dossier de votre projet. Vous pouvez configurer l'interface de ligne de commande (CLI) EB pour déployer un artefact de votre processus de construction au lieu de créer un fichier ZIP de votre dossier de projet. Pour de plus amples informations, veuillez consulter Déploiement d'un artefact à la place du dossier de projet.

  4. Une fois l'environnement créé, utilisez la commande eb open pour ouvrir l'URL de l'environnement dans le navigateur par défaut.

    ~/nodejs-example-dynamo$ eb open

Le site collecte les informations de contact des utilisateurs et stocke les données dans une table DynamoDB. Pour ajouter une entrée, choisissez Sign up today (Inscrivez-vous aujourd'hui), entrez un nom et une adresse e-mail et choisissez Sign Up! (Inscrivez-vous). L'application web écrit le contenu du formulaire dans la table et déclenche une notification Amazon SNS par e-mail.

Startup landing page with teaser message and sign-up button for upcoming product launch.

Pour le moment, la rubrique Amazon SNS est configurée avec un e-mail à espace réservé pour les notifications. Vous allez mettre à jour la configuration prochainement, mais en attendant, vous pouvez vérifier la table DynamoDB et la rubrique Amazon SNS dans AWS Management Console Management Console.

Pour afficher la table
  1. Ouvrez la page Tables dans la console DynamoDB.

  2. Recherchez la table créée par l'application. Le nom commence par awseb et contient. StartupSignupsTable

  3. Sélectionnez la table, choisissez Items (Éléments), puis Start search (Commencer la recherche) afin d'afficher tous les éléments de la table.

La table contient une entrée pour chaque adresse e-mail fournie sur le site d'inscription. En plus d'écrire les données dans la table, l'application envoie un message à une rubrique Amazon SNS qui compte deux abonnements. Le premier abonnement est pour les notifications par e-mail qui vous sont adressées et l'autre pour une file d'attente Amazon Simple Queue Service qu'une application de travail peut lire afin de traiter les demandes et d'envoyer des e-mails aux clients intéressés.

Pour afficher la rubrique
  1. Ouvrez la page Topics (Rubriques) dans la console Amazon SNS.

  2. Recherchez la rubrique créée par l'application. Le nom commence par awseb et contient. NewSignupTopic

  3. Choisissez la rubrique pour afficher ses abonnements.

L'application (app.js) définit deux routes. Le chemin racine (/) renvoie une page Web rendue à partir d'un modèle intégré JavaScript (EJS) avec un formulaire que l'utilisateur remplit pour enregistrer son nom et son adresse e-mail. La soumission du formulaire envoie une demande POST avec les données du formulaire vers l'acheminement /signup, qui écrit une entrée dans la table DynamoDB et publie un message dans la rubrique Amazon SNS pour informer le propriétaire de l'inscription.

L'exemple d'application inclut des fichiers de configuration qui créent la table DynamoDB, la rubrique Amazon SNS et la file d'attente Amazon SQS utilisées par l'application. Cela vous permet de créer un nouvel environnement et de tester la fonctionnalité immédiatement, mais en revanche la table DynamoDB est liée à l'environnement. Pour un environnement de production, vous devez créer la table DynamoDB en dehors de l'environnement afin d'éviter de la perdre lorsque vous arrêtez l'environnement ou que vous mettez sa configuration à jour.

Créez une table DynamoDB

Pour utiliser une table DynamoDB externe avec une application exécutée dans Elastic Beanstalk, créez d'abord une table dans DynamoDB. Lorsque vous créez une table en dehors d'Elastic Beanstalk, elle est complètement indépendante d'Elastic Beanstalk et de vos environnements Elastic Beanstalk et ne sera pas arrêtée par Elastic Beanstalk.

Créez une table avec les paramètres suivants :

  • Nom de la tablenodejs-tutorial

  • Clé primaire – email

  • Type de clé primaire – Chaîne

Pour créer une table DynamoDB
  1. Ouvrez la page Tables dans la console de gestion DynamoDB.

  2. Choisissez Créer un tableau.

  3. Entrez un nom de table et une clé primaire.

  4. Choisissez le type de clé primaire.

  5. Sélectionnez Create (Créer).

Mise à jour des fichiers de configuration de l'application

Mettez à jour les fichiers de configuration dans la source de l'application afin d'utiliser la table nodejs-tutorial au lieu d'en créer une nouvelle.

Pour mettre à jour l'exemple d'application pour l'utilisation en production
  1. Changez votre répertoire de travail actuel vers le répertoire de l'application nodejs-example-dynamo.

    ~$ cd nodejs-example-dynamo
  2. Ouvrez .ebextensions/options.config et modifiez les valeurs des paramètres suivants :

    • NewSignupEmail— Votre adresse e-mail.

    • STARTUP_SIGNUP_TABLE – nodejs-tutorial

    Exemple .ebextensions/options.config
    option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail: you@example.com aws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE: nodejs-tutorial NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`' aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: "120" aws:autoscaling:trigger: Unit: "Percent" Period: "1" BreachDuration: "2" UpperThreshold: "75" LowerThreshold: "30" MeasureName: "CPUUtilization"

    Les configurations suivantes sont appliquées à l'application :

    • L'adresse e-mail que la rubrique Amazon SNS utilise pour les notifications est définie sur votre adresse, ou celle que vous saisissez dans le fichier options.config.

    • La table nodejs-tutorial sera utilisée à la place de celle créée par .ebextensions/create-dynamodb-table.config.

  3. Supprimez .ebextensions/create-dynamodb-table.config.

    ~/nodejs-tutorial$ rm .ebextensions/create-dynamodb-table.config

    La prochaine fois que vous déployez l'application, la table créée par ce fichier de configuration sera supprimée.

  4. Déployez l'application mise à jour dans votre environnement Elastic Beanstalk avec la commande eb deploy.

    ~/nodejs-example-dynamo$ eb deploy
  5. Une fois l'environnement créé, utilisez la commande eb open pour ouvrir l'URL de l'environnement dans le navigateur par défaut.

    ~/nodejs-example-dynamo$ eb open

Lors du déploiement, Elastic Beanstalk met à jour la configuration de la rubrique Amazon SNS et supprime la table DynamoDB créée lorsque vous avez déployé la première version de l'application.

Désormais, lorsque vous résiliez l'environnement, la table nodejs-tutorial n'est pas supprimée. Cela vous permet d'effectuer des déploiements bleu/vert, de modifier les fichiers de configuration ou d'arrêter votre site web sans risque de perte de données.

Ouvrez votre site dans un navigateur et vérifiez que le formulaire fonctionne comme prévu. Créez quelques entrées et vérifiez la table dans la console DynamoDB.

Pour afficher la table
  1. Ouvrez la page Tables dans la console DynamoDB.

  2. Recherchez la table nodejs-tutorial.

  3. Sélectionnez la table, choisissez Items (Éléments), puis Start search (Commencer la recherche) afin d'afficher tous les éléments de la table.

Vous pouvez également voir qu'Elastic Beanstalk a supprimé la table créée précédemment.

Configuration de votre environnement pour une haute disponibilité

Enfin, configurez le groupe Auto Scaling de votre environnement avec un nombre minimum d'instances plus élevé. Exécutez au moins deux instances en permanence afin d'empêcher que les serveurs web de votre environnement constituent un point de défaillance unique et pour vous permettre de déployer des modifications sans mettre votre site hors service.

Pour configurer le groupe Auto Scaling de votre environnement pour une haute disponibilité
  1. Ouvrez la console Elastic Beanstalk, puis dans la liste des régions, sélectionnez votre. Région AWS

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Dans le panneau de navigation, choisissez Configuration.

  4. Dans la catégorie de configuration Capacity (Capacité), choisissez Edit (Modifier).

  5. Dans la section Auto Scaling group (Groupe Auto Scaling), définissez les Min instances (Instances min.) sur 2.

  6. Pour enregistrer les modifications, cliquez sur Appliquer en bas de la page.

Nettoyage

Lorsque vous avez fini d'utiliser Elastic Beanstalk, vous pouvez arrêter votre environnement. Elastic Beanstalk AWS met fin à toutes les ressources associées à votre environnement, telles que les instances EC2 Amazon, les instances de base de données, les équilibreurs de charge,les groupes de sécurité et les alarmes.

Pour mettre fin à votre environnement Elastic Beanstalk depuis la console
  1. Ouvrez la console Elastic Beanstalk, puis dans la liste des régions, sélectionnez votre. Région AWS

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Choisissez Actions (Actions), puis Terminate Environment (Résilier l’environnement).

  4. Utilisez la boîte de dialogue à l'écran pour confirmer la résiliation de l'environnement.

Avec Elastic Beanstalk, vous pouvez facilement créer un nouvel environnement pour votre application à tout moment.

Vous pouvez également supprimer les tables DynamoDB externes que vous avez créées.

Pour supprimer une table DynamoDB
  1. Ouvrez la page Tables dans la console DynamoDB.

  2. Sélectionnez une table.

  3. Choisissez Actions, puis Delete table (Supprimer la table).

  4. Sélectionnez Delete (Supprimer).

Étapes suivantes

L'exemple d'application utilise des fichiers de configuration pour configurer les paramètres logiciels et créer AWS des ressources dans le cadre de votre environnement. Pour de plus amples informations sur les fichiers de configuration et leur utilisation, veuillez consulter Personnalisation d'environnement avancée avec fichiers de configuration (.ebextensions).

L'exemple d'application de ce tutoriel utilise l'infrastructure web Express pour Node.js. Pour plus d'informations sur Express, consultez la documentation officielle à l'adresse expressjs.com.

Enfin, si vous prévoyez d'utiliser votre application dans un environnement de production, configurez un nom de domaine personnalisé pour votre environnement et activez HTTPS pour des connexions sécurisées.