Dans ce module, vous allez utiliser Amazon Elastic Container Service (Amazon ECS) pour instancier un cluster géré d'instances de calcul EC2 et déployer votre image sous la forme d'un conteneur s'exécutant sur le cluster. Commencer la création

présentation de l'architecture

a. Client
Le client adresse une demande sur le port 80 à l'équilibreur de charge.

b. Équilibreur de charge
L'équilibreur de charge répercute les demandes sur tous les ports disponibles.

c. Groupes cibles
Les instances sont enregistrées dans le groupe cible de l'application.

d. Ports de conteneurs
Chaque conteneur exécute un processus d'application unique qui lie le parent du cluster node.js au port 80 dans son espace de noms.

e. Monolithe du node.js conteneurisé
Le parent du cluster node.js est responsable de la distribution du trafic aux travailleurs au sein de l'application monolithique. Quoique conteneurisée, cette architecture reste monolithique, car chaque conteneur présente les mêmes caractéristiques que les autres.

Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs hautement évolutif et à hautes performances qui prend en charge les conteneurs Docker et vous permet d'exécuter facilement des applications sur un cluster géré d'instances Amazon EC2. Grâce à de simples appels d'API, vous pouvez lancer et arrêter les applications activées par des conteneurs Docker, connaître l'état complet de votre cluster et accéder à de nombreuses fonctionnalités courantes telles que les groupes de sécurité, Elastic Load Balancing, les volumes EBS et les rôles IAM.

Vous pouvez utiliser Amazon ECS pour programmer le placement des conteneurs sur votre cluster en fonction de vos besoins en ressources et de vos exigences en termes de disponibilité. Vous pouvez également intégrer votre propre programmeur ou des programmeurs tiers pour répondre aux besoins spécifiques de votre entreprise ou de votre application.

Amazon ECS est disponible sans frais supplémentaires. Vous payez les ressources AWS (par exemple, les instances EC2 ou les volumes EBS) que vous créez pour stocker et exécuter votre application.


Suivez les instructions pas à pas ci-dessous pour déployer l'application node.js en utilisant Amazon ECS. Sélectionnez le numéro de chaque étape pour développer la section correspondante.

break-the-monolith
  • Étape 1. Lancer un cluster ECS avec AWS CloudFormation

    Créez un cluster Amazon ECS déployé derrière un Équilibreur de charge d'application

    1. Accédez à la console AWS CloudFormation.
    2. Sélectionnez Créer une pile.
    3. Sélectionnez Charger un fichier modèle, puis choisissez le fichier ecs.yml dans le projet GitHub dans amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml et sélectionnez Suivant.
    4. Pour le nom de la pile, saisissez BreakTheMonolith-Demo. Vérifiez que les autres paramètres ont les valeurs suivantes :
      1. Capacité souhaitée = 2
      2. Type d'instance = t2.micro
      3. MaxSize = 2
    5. Sélectionnez Suivant.
    6. Sur la page Configurer les options de pile, gardez les options par défaut, faites défiler vers le bas puis sélectionnez Suivant.
    7. Sur la page Review BreakTheMonolith-Demo, faites défiler jusqu'au bas de la page, lisez et acceptez la description des Fonctionnalités en cochant la case à cocher, puis sélectionnez Créer une pile.

    Votre pile doit désormais être répertoriée avec le statut CREATE_IN_PROGRESS. Vous pouvez utiliser le bouton d'actualisation en haut à droite de l'écran pour vérifier la progression. Le processus dure généralement moins de 5 minutes.

    créer une pile

    ⚐ REMARQUE : vous avez aussi la possibilité d'utiliser l'interface de ligne de commande AWS (AWS CLI) pour déployer des piles AWS CloudFormation. Exécutez le code suivant dans le terminal à partir du dossier amazon-ecs-nodejs-microservices/3-microservices et remplacez [region] par votre région AWS.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Étape 2. Vérifier si votre cluster s'exécute

    Vérifier le cluster Amazon ECS
    • Sélectionnez le cluster BreakTheMonolith-Demo, puis sélectionnez l'onglet Tâches pour vérifier qu'il n'y a pas de tâches en cours d'exécution.
    Tâches de cluster Amazon ECS
    • Sélectionnez l'onglet Instances ECS pour vérifier qu'il existe deux instances Amazon EC2 créées par le modèle AWS CloudFormation.
      ⚐ Remarque : si vous recevez un message indiquant que l'agent ECS est obsolète, sélectionnez En savoir plus pour obtenir des instructions sur la mise à jour de l'agent ECS.
    Instances Amazon ECS
  • Étape 3. Écrire une définition de tâche

    Les définitions de tâches précisent comment Amazon ECS déploie les conteneurs d'application à travers le cluster.

    • Allez dans le menu de navigation gauche d'Amazon ECS et sélectionnez Définition de tâches.
    • Sélectionnez Créer une nouvelle définition de tâche.
    • Sur la page Sélectionner le niveau de compatibilité du type de lancement, sélectionnez l'option EC2. Sélectionnez ensuite Étape suivante.
    • Sur la page Configurer les définitions des tâches et des conteneurs, faites ce qui suit :
      • Dans le champ Définition du nom des tâches, saisissez api.
      • Faites défiler vers le bas jusqu'à Définitions des conteneurs et sélectionnez Ajouter un conteneur.
      • Dans la fenêtre Ajouter un conteneur :
        • Vous pouvez laisser vides les paramètres qui ne sont pas définis ou utiliser les paramètres par défaut.
        • Dans le champ Nom de conteneur, saisissez api.
        • Dans le champ Image, saisissez [account-ID].dkr.ecr.[region].amazonaws.com/api:v1
          Remplacez [account-ID] et [region] par vos informations spécifiques. Assurez-vous que la balise v1 correspond à la valeur que vous avez utilisée dans le module 1 pour baliser et transmettre l'image. Ceci est l'URL de votre image dans le référentiel ECR créée dans le module précédent.
        • Dans le champ Limites de la mémoire, vérifiez que Limite physique est sélectionné et saisissez la valeur 256.
        • Sous Cartographie des ports, Port hôte = 0 et Port du conteneur = 3000.
        • Faites défiler jusqu'à ENVIRONNEMENT, unités CPU = 256.
    • Sélectionnez Ajouter.
      Vous reviendrez sur la page Configurer les définitions des tâches et des conteneurs.
    • Allez au bas de la page et sélectionnez Créer.

    La définition de votre tâche est indiquée dans la console.

    définition de tâche
  • Étape 4. Configurez l'Équilibreur de charge d'application : groupe cible

    L'Équilibreur de charge d'application (ALB) permet à votre service d'accepter le trafic entrant. L'ALB achemine automatiquement le trafic vers des instances de conteneurs fonctionnant sur votre cluster en les utilisant comme groupe cible.

    Vérifiez le nom de votre VPC : il se peut que vous ayez plusieurs VPC si ce n'est pas la première fois que vous utilisez ce compte AWS. Il est donc important de configurer votre groupe cible avec le bon VPC.

    • Accédez à la section Équilibreurs de charge de la console EC2.
    • Repérez l'équilibreur de charge dénommé demo.
    • Cochez la case située à côté de demo pour consulter les détails de l'équilibreur de charge.
    • Allez dans l'onglet Description et repérez l'attribut du VPC (au format vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Remarque : vous devez disposer de l'attribut du VPC dans la prochaine étape lorsque vous configurez le groupe cible de l'ALB.
    attribut de vpc

    Configurer le groupe cible de l'ALB

    • Accédez à la section Groupe cible de la console EC2.
    • Sélectionnez Créer un groupe cible.
    • Configurez les paramètres suivants du groupe cible (pour les paramètres qui ne figurent pas dans la liste ci-dessous, conservez les valeurs par défaut) :
      • Pour le Nom du groupe cible, saisissez api.
      • Pour le Protocole, sélectionnez HTTP.
      • Pour le Port, saisissez 80.
      • Pour le VPC, sélectionnez la valeur qui correspond à celle de la description de l'équilibreur de charge. Ceci n'est très probablement PAS votre VPC par défaut.
      • Accédez aux Paramètres avancés de vérification de l'état et modifiez les paramètres suivants, le cas échéant : 
        • Pour le Seuil d'état sain, saisissez 2.
        • Pour le Seuil d'état non sain, saisissez 2.
        • Pour Délai de disponibilité, saisissez 5.
        • Pour Intervalle, saisissez 6.
    • Sélectionnez Créer.
    créer des groupes cibles
  • Étape 5. Configurez l'équilibreur de charge d'application : écouteur

    L'écouteur d'ALB vérifie les demandes de connexion entrantes à votre ALB.

    Ajouter un écouteur à l'ALB

    • Accédez à la section Équilibreurs de charge de la console EC2.
    • Cochez la case située à côté de demo pour consulter les détails de l'équilibreur de charge.
    • Sélectionnez l'onglet Écouteurs.
    • Sélectionnez Ajouter un écouteur puis modifiez les paramètres suivants, le cas échéant :
      • Pour Protocol:port, sélectionnez HTTP puis saisissez 80.
      • Pour Action(s) par défaut, sélectionnez Transférer à et dans le champ Groupe cible, saisissez api.
    • Sélectionnez Enregistrer.
    écouteur vers ALB
  • Étape 6. Déployer le monolithe en tant que service

    Déployez le monolithe en tant que service dans le cluster.

    • Accédez à la console Amazon ECS, puis sélectionnez Clusters dans la barre de menus de gauche.
    • Sélectionnez le cluster BreakTheMonolith-Demo, l'onglet Services, puis Créer.
    • Sur la page Configurer le service, modifiez les paramètres suivants (et pas ceux qui ne sont pas répertoriés ci-dessous) : 
      • Pour le paramètre Type de lancement, sélectionnez EC2.
      • Pour le paramètre Nom de service, saisissez api
      • Pour le paramètre Nombre de tâches, saisissez 1.
      • Sélectionnez Étape suivante.
    • Sur la page Configurer le réseau, dans la section Équilibrage de charge, sélectionnez Équilibreur de charge d'application.
      Des paramètres supplémentaires apparaîtront : Rôle IAM associé au service et nom de l'équilibreur de charge.
      • Pour le paramètre Rôle IAM associé au service, sélectionnez BreakTheMonolith-Demo-ECSServiceRole.
      • Pour le nom de l'équilibreur de charge, vérifiez que demo est sélectionné.
    • Dans la section Conteneur devant faire l'objet d'un équilibrage de charge, sélectionnez , Ajouter à l'équilibreur de charge.
      Des informations supplémentaires intitulées api:3000 sont présentées.
    • Dans la section api:3000, procédez comme suit :
      • Pour le champ Port de l'écouteur de production, sélectionnez 80:HTTP.
      • Pour le Nom du groupe cible, sélectionnez votre groupe : api.
      • Sélectionnez Étape suivante.
    • Sur la page Définir Auto Scaling, laissez le paramètre par défaut et sélectionnez Étape suivante.
    • Sur la pageÉvaluation, passez en revue les paramètres, puis sélectionnez Créer un service.
    • Une fois le service créé, sélectionnez Afficher le service.
    API d'Amazon ECS Service

    Beau travail ! Votre service est désormais opérationnel. Le conteneur peut avoir besoin de quelques secondes pour être validé comme étant sain et commencer à recevoir un trafic.

  • Étape 7. Tester votre monolithe

    Validez votre déploiement en vérifiant que le service est disponible depuis Internet et en lui envoyant une demande Ping.

    Pour trouver l'URL de votre service :

    • Accédez à la section Équilibreurs de charge de la console EC2.
    • Sélectionnez le demo de votre équilibreur de charge.
    • Dans l'onglet Description, copiez le nom DNS et collez-le dans un nouvel onglet ou une nouvelle fenêtre.
    • Le message Prêt à réception de requêtes doit s'afficher.


    Regardez chaque partie du service :
    l'application node.js achemine le trafic vers chaque travailleur basé sur l'URL. Pour voir un travailleur, il suffit d'ajouter le nom du travailleur api/[worker-name] à la fin du nom DNS, comme suit :

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts

    Vous pouvez également ajouter un numéro d'enregistrement à la fin de l'URL si vous souhaitez explorer un enregistrement en particulier. Par exemple : http://[DNS name]/api/posts/1 ou http://[DNS name]/api/users/2

    démonstration utilisateur