Dans ce module, vous allez créer une image de conteneur pour votre application monolithique node.js, avant de l'envoyer vers Amazon Elastic Container Registry. Commencer la construction

déploiement sur amazon ecr

Les conteneurs vous permettent de rassembler facilement le code, les configurations et les dépendances d'une application dans des services modulaires faciles d'utilisation. Ces derniers fournissent une cohérence environnementale, une efficacité opérationnelle, une meilleure productivité des développeurs et un contrôle de version. Les conteneurs peuvent aider à garantir que les applications se déploient de manière rapide, fiable et constante, quel que soit l'environnement de déploiement.

présentation de l’architecture

Rapidité
Il est possible de lancer un conteneur avec une nouvelle version de code sans encourir de coûts de déploiement élevés. La vitesse opérationnelle s’en trouve améliorée car le code intégré au conteneur sur l’ordinateur local d’un développeur peut être facilement déplacé vers un serveur de test par simple déplacement du conteneur. Au moment de sa création, ce conteneur peut être lié à d’autres conteneurs nécessaires à l’exécution de la pile d’applications.

Contrôle des dépendances et pipeline amélioré
Une image de conteneur Docker est une capture, effectuée à un moment précis, du code et des dépendances d’une application. Elle permet à une organisation d’ingénierie de créer un pipeline standard pour la durée de vie de l’application. Exemples :

  1. Les développeurs construisent et exécutent le conteneur en local.
  2. Le serveur d’intégration continue exécute le même conteneur et effectue des tests d’intégration sur celui-ci afin de s’assurer qu’il répond aux attentes.
  3. Ce même conteneur est expédié vers un environnement intermédiaire où son comportement d’exécution peut être contrôlé à l’aide de tests de charge ou d’un contrôle qualité manuel.
  4. Ce conteneur est ensuite expédié à la production.

La possibilité de développer, tester, expédier et exécuter le même conteneur à travers toutes les étapes du pipeline d’intégration et de déploiement permet de fournir avec beaucoup plus de facilité une application fiable et de haute qualité.

Densité et efficacité des ressources
Les conteneurs permettent d’améliorer l’efficacité des ressources en permettant l’exécution de plusieurs processus hétérogènes sur un seul système. Cette efficacité des ressources est un résultat naturel lié aux techniques d’isolement et de répartition utilisées par les conteneurs. Il est possible de limiter à une valeur précise l’utilisation de la CPU et de la mémoire d’un hôte par les conteneurs. En connaissant la quantité de ressources dont un conteneur a besoin de même que les ressources disponibles sur le serveur hôte sous-jacent, vous pouvez déterminer les ressources de calcul que vous utilisez avec des hôtes plus petits ou augmenter la densité des processus exécutés sur un seul hôte de grande taille, ce qui vous permet d’accroître la disponibilité et d’optimiser la consommation des ressources.

Flexibilité
La flexibilité des conteneurs Docker découle de leur portabilité, de leur déploiement aisé et de leur petite taille. Contrairement aux opérations d’installation et de configuration requises sur une machine virtuelle, le regroupement des services à l’intérieur des conteneurs permet de les déplacer facilement entre les hôtes, tout en les maintenant à l’écart des défaillances des autres services adjacents et en les préservant des correctifs inappropriés ou des mises à niveau logicielles effectuées sur le système hôte.

Temps nécessaire : 20 minutes

Services utilisés :


Dans la première partie de ce didacticiel, vous allez créer l'image de conteneur Docker pour votre application monolithique node.js, avant de l'envoyer vers Amazon Elastic Container Registry. Cliquez sur chaque numéro d’étape pour développer la section correspondante.

break-the-monolith
  • Étape 1. Configuration

    Dans la procédure suivante, vous utiliserez Docker, GitHub, Amazon ECS et Amazon ECR pour déployer du code dans des conteneurs. Afin d’être certain de pouvoir réaliser ces étapes, vous devrez vérifier que vous disposez des bons outils.

    1. Disposer d’un compte AWS : si vous n’avez pas encore de compte AWS, vous pouvez vous inscrire ici. Tous les exercices de ce didacticiel sont conçus pour être accessibles avec l’offre gratuite d’AWS.
      ⚐ REMARQUE : certains des services que vous utiliserez peuvent exiger que votre compte soit actif depuis plus de 12 heures. Si vous venez de créer votre compte et que vous rencontrez des difficultés avec l’un des services, réessayez au bout de quelques heures.
    2. Installer Docker : il s’agit de l’outil que vous utiliserez pour créer les fichiers image que vous exécuterez ensuite dans vos conteneurs. Docker est un projet open source que vous pouvez télécharger ici pour Mac ou pour Windows.
      Une fois l’installation terminée, vérifiez son fonctionnement en exécutant Docker --version sur le terminal. Vous devriez obtenir un résultat semblable à celui-ci : Docker version 17.03.0-ce, build 60ccb22.
    3. Installez l'interface de ligne de commande AWS
      • Vous devez utiliser l'interface de ligne de commande (CLI) AWS pour envoyer les images vers Amazon Elastic Container Registry. Pour en savoir plus sur l’interface de ligne de commande, cliquez ici.
      • Une fois AWS CLI installé, vérifiez son fonctionnement en exécutant aws --version sur le terminal. Vous devriez obtenir un résultat semblable à celui-ci : aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26.
      • Si vous avez déjà installé AWS CLI, exécutez la commande suivante sur le terminal pour vérifier qu’il a été mis à jour vers la version la plus récente : pip install awscli --upgrade --user.
    4. Disposer d’un éditeur de texte : si vous ne disposez d’aucun éditeur de texte pour le codage, vous devez en installer un dans votre environnement local. Atom est un éditeur de texte simple et open source développé par GitHub et populaire parmi les développeurs.
  • Étape 2. Téléchargement et ouverture du projet

    Téléchargez le code à partir de GitHub : Accédez à 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 de projets : démarrez Atom, sélectionnez « Add Project Folder » (Ajouter le dossier de projet), puis sélectionnez le dossier dans lequel vous avez enregistré le référentiel « amazon-ecs-nodejs-microservices ». Le projet sera alors intégralement ajouté à Atom pour que vous puissiez travailler facilement.

    Dans votre dossier de projet, vous devriez voir les dossiers de l’infrastructure et des services. L’infrastructure contient le code de configuration d’infrastructure AWS CloudFormation que vous utiliserez à l’étape suivante. Le dossier services contient le code qui constitue l’application node.js.

    Prenez quelques minutes pour cliquer sur les fichiers et vous familiariser avec les différents aspects de l’application, y compris la base de données db.json, le serveur server.js, package.json et l’application dockerfile.

    projet de microservices
  • Étape 3. Allocation d’un référentiel

    Créez le référentiel :


    Enregistrez les informations du référentiel :

    • Une fois que vous avez cliqué sur Suivant, vous devriez voir un message semblable à celui-ci :
    création
    • L’adresse du référentiel suit un format simple : [ID_compte].dkr.ecr.[région].amazonaws.com/[nom_référentiel].

     

    ⚐ REMARQUE : vous aurez besoin de cette adresse, y compris votre ID de compte et la région que vous utilisez au cours des prochaines étapes.

  • Étape 4. Création et envoi de l’image Docker

    Ouvrez votre terminal et définissez votre chemin vers la section 2-containerized/services/api du code GitHub dans le répertoire que vous avez cloné ou téléchargé dans : ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Authentifiez la connexion Docker avec AWS :

    1. Exécutez aws ecr get-login --no-include-email --region [région]. Exemple : aws ecr get-login --no-include-email --region us-west-2. Si vous n’avez jamais utilisé AWS CLI auparavant, il est possible que vous deviez configurer vos informations d’identification.
    2. Vous devriez obtenir un résultat très étendu commençant par docker login -u AWS -p ... Copiez et collez-le intégralement et exécutez-le dans le terminal.
    3. Un message confirmant la connexion devrait s’afficher.

    ⚐ REMARQUE : un échec de la connexion peut être lié à une version plus récente de Docker qui déprécie l’indicateur -e none. Pour corriger ce problème, collez le résultat dans votre éditeur de texte, supprimez l’indicateur -e none qui se trouve à la fin de celui-ci et exécutez cette nouvelle version du résultat dans le terminal.

    • Créez l’image : dans le terminal, exécutez docker build -t api. REMARQUE : le . a son importance ici.
    • Balisez l’image : une fois la création terminée, balisez l’image afin de pouvoir l’envoyer au référentiel : docker tag api:latest [ID_compte].dkr.ecr.[région].amazonaws.com/api:v1

    ⚐ Conseil de pro : :v1 représente la version de création de l’image. Vous devriez actualiser ce numéro de version chaque fois que vous créez l’image. Si vous utilisez un script, vous pouvez utiliser un nombre automatisé, comme un horodatage, pour baliser l’image. Il s’agit d’une bonne pratique qui vous permet de facilement rétablir une version précédente de l’image de conteneur.

    • Envoyez l’image à ECR : exécutez docker push pour envoyer votre image à ECR : docker push [ID_compte].dkr.ecr.[région].amazonaws.com/api:latest

    Si vous accédez à votre référentiel ECR, vous devriez voir la version de votre image balisée en dernier.

    images