Dans ce module, vous allez créer une image de conteneur pour votre application monolithique node.js, puis la transférer dans Amazon Elastic Container Registry. Procéder à la création

déploiement dans Amazon ECR

Les conteneurs vous permettent de regrouper facilement le code, les configurations et les dépendances d'une application dans des services modulaires simples d'utilisation. Ces derniers assurent la cohérence, l'efficacité des opérations et une meilleure productivité, tout en rendant possible le contrôle de version. Grâce aux conteneurs, les applications se déploient de manière rapide, fiable et constante, quel que soit l'environnement.

Présentation de l'architecture

Rapidité
En cas de nouveau code, le lancement d'un conteneur n'implique pas d'opérations complexes. Ainsi, les opérations s'accélèrent car ce code, intégré à un conteneur se trouvant sur la machine locale d'un développeur, peut être aisément transféré sur un serveur de test. Lors de sa création, ce conteneur peut être associé aux autres conteneurs nécessaires à l'exécution de la pile d'applications.

Contrôle des dépendances et pipeline optimisé
Une image de conteneur Docker constitue la capture, à un moment précis, du code et des dépendances d'une application. Grâce à elle, il est possible de mettre en place un processus standard. Par exemple :

  1. Les développeurs créent et exécutent le conteneur localement.
  2. Le serveur d'intégration continue exécute le même conteneur et le soumet à des tests d'intégration afin de s'assurer qu'il est conforme aux besoins.
  3. Le conteneur est transféré dans un environnement de simulation où son fonctionnement peut être vérifié à l'aide de tests de charge, ou manuels.
  4. Le conteneur est envoyé en production.

Le fait de pouvoir créer, tester, transférer et exécuter le même conteneur au cours de chaque étape du pipeline d'intégration et déploiement permet d'obtenir, bien plus facilement, une application fiable et de haute qualité.

Optimisation des ressources et ajustement des processus
Les conteneurs assurent l'optimisation des ressources car ils permettent d'exécuter plusieurs processus distincts au sein d'un seul système. Les méthodes d'isolation et d'attribution qui caractérisent les conteneurs contribuent à cela. Par ailleurs, il est possible d'appliquer certaines restrictions afin que les conteneurs n'exploitent qu'une certaine part de la mémoire et du processeur d'un hôte. Une fois que vous savez de quelles ressources un conteneur a besoin, et lesquelles sont disponibles auprès du serveur hôte sous-jacent, vous pouvez adapter la taille des ressources de calcul que vous exploitez avec des hôtes d'envergure moindre, ou encore augmenter la densité des processus s’exécutant sur un seul hôte de plus large envergure. De cette façon, la disponibilité s'accroît et l'emploi des ressources est adapté au mieux.

Flexibilité
La flexibilité des conteneurs Docker est due à leur portabilité, à la simplicité de leur déploiement et à leur taille réduite. Les services conteneurisés peuvent être déplacés aisément entre les hôtes, sans qu’ils ne soient affectés par les anomalies d'autres services adjacents, ni par l’action inadéquate des correctifs et des mises à niveau du système hôte. Une machine virtuelle requiert quant à elle des opérations d'installation et de configuration. 

Durée nécessaire : 20 minutes

Services utilisés :


Dans la première partie de ce didacticiel, vous allez créer l'image de conteneur Docker destinée à votre application monolithique node.js, puis la transférer dans Amazon Elastic Container Registry (Amazon ECR). Cliquez sur chaque numéro d'étape pour développer la section correspondante.

break-the-monolith
  • Étape 1 : Configuration initiale

    Au cours des prochaines étapes, vous allez utiliser Docker, GitHub, Amazon Elastic Container Service (Amazon ECS) et Amazon ECR pour déployer du code dans des conteneurs. Avant cela, assurez-vous d'effectuer les opérations suivantes.

    1. Obtention d'un compte AW : si vous ne disposez pas d'un compte AWS, vous pouvez vous inscrire ici. Toutes les procédures de ce didacticiel peuvent être effectuées en profitant de l'offre gratuite d'AWS.
      ⚐ Remarque : certains des services que vous emploierez peuvent nécessiter de disposer d'un compte actif depuis plus de 12 heures. Si vous rencontrez des difficultés avec un service et que vous venez de créer votre compte, patientez quelques heures, puis réessayez.
    2. Installation de Docker : vous utiliserez Docker pour créer les fichiers image qui s'exécuteront dans vos conteneurs. Docker est un outil open source. Vous pouvez le télécharger sous Mac et sous Windows.
      Une fois Docker installé, vous pouvez vérifier qu'il s’exécute correctement en saisissant la commande Docker --version dans le terminal. Le numéro de version est indiqué sous la forme Docker version 19.03.5, build 633a0ea.
    3. Installation de l'interface en ligne de commande AWS :
      • vous devez utiliser l'interface en ligne de commande AWS pour transférer les images dans Amazon ECR. Vous pouvez la télécharger et obtenir des informations à son sujet à cet endroit.
      • Une fois l'interface en ligne de commande installée, vérifiez qu'elle s’exécute correctement en saisissant la commande aws --version dans le terminal. Le numéro de version est indiqué sous la forme aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207.
      • Si vous avez déjà installé l'interface en ligne de commande, exécutez la commande pip install awscli --upgrade --user dans le terminal afin de vous assurer qu'elle est dotée de la dernière version.
      • Si vous n'avez jamais utilisé l'interface en ligne de commande AWS précédemment, il peut être nécessaire de configurer vos identifiants.
    4. Installation d'un éditeur de texte : si vous ne disposez pas déjà d'un éditeur de texte dédié au codage, installez-en un dans votre environnement local. Atom est un éditeur de texte open source et simple d'utilisation, proposé par GitHub et apprécié des développeurs.
  • Étape 2 : Téléchargement et ouverture du projet

    Téléchargez le code sur le site de GitHub : rendez-vous à l'adresse https://github.com/awslabs/amazon-ecs-nodejs-microservices et sélectionnez Clone or download (Cloner ou télécharger) pour télécharger le référentiel GitHub dans votre environnement local. Vous pouvez également utiliser GitHub Desktop ou Git pour cloner le référentiel.

    Ouvrez les fichiers du projet : ouvrez Atom, puis sélectionnez Ajouter un dossier de projet et le dossier dans lequel vous avez enregistré le référentiel amazon-ecs-nodejs-microservices. L'intégralité du projet est ajoutée à Atom, ce qui vous permet de l'exploiter aisément.

    Le dossier de votre projet doit comprendre les sous-dossiers Infrastructure et Services. Le sous-dossier Infrastructure comporte le code de configuration AWS CloudFormation que vous utiliserez à l'étape suivante. Le sous-dossier Services comporte le code qui constitue l'application node.js.

    Prenez quelques minutes pour parcourir les fichiers et vous familiariser avec ceux-ci. Consultez notamment le fichier db.json de la base de données, le fichier server.js du serveur, le fichier package.json du paquet et le fichier Dockerfile de l'application.

    projet avec microservices
  • Étape 3 : Mise en service d'un référentiel

    Créez le référentiel :

    • Accédez à la console Amazon ECR.
    • Sur la page Référentiels, sélectionnez Créer un référentiel.
    • Sur la page Créer un référentiel, saisissez le nom api pour votre référentiel.
      ⚐ Remarque : ne modifiez pas les paramètres par défaut de la section Immuabilité des balises.
    • Sélectionnez Créer un référentiel.

    Après la création du référentiel, un message de confirmation affiche l'adresse du référentiel. Voici son format : [ID-compte].dkr.ecr.[région].amazonaws.com/[nom-référentiel]. Les termes [ID-compte], [région] et [nom-référentiel] sont spécifiques à votre configuration.

    ⚐ Remarque : gardez l'adresse du référentiel à portée de main tout au long du didacticiel.

    créer
  • Étape 4 : Création et transfert de l'image Docker

    Accédez à votre terminal et au répertoire ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Utilisez le terminal pour authentifier Docker :

    1. Exécutez la commande $(aws ecr get-login --no-include-email --region [votre région]). Modifiez le terme [votre-région], exemple : $(aws ecr get-login --no-include-email --region us-west-2). Si nécessaire, configurez vos identifiants.
      Si l'authentification s'effectue avec succès, le message Connexion réussie s'affiche.
    2. Pour créer l'image, exécutez la commande docker build -t api dans le terminal.
      ⚐ Remarque : le point (.) doit être conservé après api.
    3. Une fois l'image créée, ajoutez-y une balise à l'aide de la commande suivante afin de pouvoir la transférer dans le référentiel : docker tag api:latest [ID-compte].dkr.ecr.[région].amazonaws.com/api:v1. 
      ⚐ Remarque : remplacez les termes [ID-compte] et [région] par les informations appropriées.
      ⚐ Conseil : la balise :v1 se rapporte à la version de l'image. Chaque fois que vous créez l'image, nous vous recommandons d'augmenter ce nombre. Si vous utilisez un script, vous pouvez effectuer cette opération automatiquement, notamment via un horodatage. Ainsi, vous pouvez aisément rétablir une ancienne image.
    4. Transférez l'image dans Amazon ECR en exécutant la commande docker push [ID-compte].dkr.ecr.[région].amazonaws.com/api:v1.
      ⚐ Remarque : remplacez les termes [ID-compte] et [région] par les informations appropriées.

    Si vous vous rendez dans votre référentiel Amazon ECR, vous devriez y trouver votre image, accompagnée de la balise v1.

    Balise de l'image Amazon ECR