Agence web » Actualités du digital » Comment démarrer avec les déploiements de conteneurs à mise à l'échelle automatique sur AWS ECS

Comment démarrer avec les déploiements de conteneurs à mise à l'échelle automatique sur AWS ECS

comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-1421190

Le service Elastic Container Service (ECS) d'AWS est un moteur de calcul spécialement conçu pour les conteneurs Docker. Vous pouvez l'utiliser pour déployer des conteneurs à l'aide d'instances EC2 sous-jacentes ou exécuter un déploiement indépendant du serveur sur Fargate.

Qu'est-ce que l'ECS?

L'utilisation de base d'ECS est assez simple. Plutôt que d'avoir à administrer des serveurs Linux, vous lui donnez simplement un conteneur Docker, choisissez la puissance de calcul que vous souhaitez lui donner et le configurez pour qu'il fonctionne. ECS s'occupe du sale boulot de trouver le métal pour le faire fonctionner. Par défaut, il s'exécute sans serveur à l'aide de Fargate, mais vous pouvez éventuellement choisir d'exécuter vos conteneurs sur des instances EC2 et de conserver un contrôle total sur eux.

Chaque fois que vous souhaitez effectuer des mises à jour, vous mettez simplement à jour le conteneur dans le registre de conteneurs et déclenchez une mise à jour pour ECS. Vous pouvez automatiser l'ensemble de ce processus à l'aide de CodePipeline, qui peut créer votre conteneur à partir de la source et déployer un déploiement bleu / vert sur ECS.

ECS peut également être facilement mis à l'échelle automatiquement avec une seule bascule, par rapport à EC2, ce qui nécessite une configuration supplémentaire. Si vous choisissez d'activer cette fonctionnalité, ECS déploiera automatiquement de nouveaux conteneurs pour répondre à la demande chaque fois que l'utilisation du processeur, l'utilisation de la mémoire ou d'autres alarmes deviennent élevées. Avec la mise à l'échelle automatique, vous n'aurez jamais à vous soucier de la mise à niveau de votre serveur vers une classe supérieure ou du déploiement manuel de plusieurs d'entre eux. L'effet inverse est également vrai: votre application peut être réduite pendant les heures creuses, vous permettant ainsi d'économiser de l'argent.

En ce qui concerne les prix, il n'y a pas de frais supplémentaires pour le modèle de lancement EC2. Vous payez simplement pour les instances sous-jacentes. Pour Fargate, les frais sont calculés en fonction du nombre de processeurs virtuels et de la mémoire demandés. Si vous exécutez les chiffres, Fargate s'avère être 20% plus cher sur papier. Cependant, cela est compensé par le fait que les déploiements Fargate (lorsqu'ils sont correctement configurés) n'utiliseront exactement que les ressources dont ils ont besoin, ce qui rationalise considérablement les coûts. Fargate prend également en charge les instances ponctuelles, qui permettent d'économiser une tonne d'argent sur EC2, et font de Fargate la méthode de lancement préférée dans tous les cas qui ne nécessitent pas un accès direct au serveur sous-jacent pour une raison quelconque.

Configuration de Docker et transfert vers ECR

Pour obtenir le conteneur vers ECS, vous devez le pousser vers un référentiel. Vous pouvez utiliser Docker hub ou votre propre serveur de registre, mais AWS propose sa propre solution avec Elastic Container Registry. Vous pouvez pousser les conteneurs ici, les avoir privés sur votre compte AWS et facilement accessibles à partir d'autres services comme ECS et CodePipeline.

Rendez-vous sur la console de gestion ECR et créez un nouveau référentiel. L'URI du référentiel dépend de votre ID de compte AWS – vous pouvez le copier dans la colonne «URI».

Enregistrez le script suivant sous updateECR.sh à côté de votre Dockerfile. Remplace le TAG et REPO variables avec les valeurs appropriées.

TAG="docker-test"
REPO="ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/"$TAG":latest"

aws ecr get-login-password | docker login --username AWS --password-stdin $REPO
docker build -t $TAG .
docker tag $TAG:latest $REPO
docker push $REPO

L'exécution de ce script vous connectera à ECR, construira votre conteneur, le marquera et le poussera vers votre référentiel. Si vous actualisez la liste, vous devriez voir votre conteneur:

1594123822_345_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-5536460

Déploiement sur ECS

Pour lancer un conteneur sur ECS, vous aurez besoin de deux choses:

  • Une «définition de tâche», qui contient des métadonnées sur les conteneurs eux-mêmes – quels ports sont exposés, combien de mémoire allouer aux conteneurs, etc. Vous pouvez exécuter plusieurs conteneurs dans une seule définition de tâche, si votre application en utilise plusieurs.
  • Un «service», qui représente le déploiement d'une définition de tâche, la mise en réseau qui lui est associée et les paramètres de mise à l'échelle automatique. Vous pouvez regrouper plusieurs services en un seul «cluster».

Vous devez d'abord créer la définition de tâche. Créez-en une à partir de "Définitions de tâche" dans la barre latérale.

1594123822_681_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-8717269

Donnez-lui un nom et spécifiez la mémoire de la tâche et la taille du vCPU. N'oubliez pas que vous pouvez toujours créer plusieurs conteneurs et les lier avec un équilibreur de charge. Si vous prévoyez d'utiliser la mise à l'échelle automatique, vous souhaiterez considérer cette valeur comme la taille unitaire de chaque conteneur, plutôt que de déployer un seul conteneur 16 vCPU, vous pouvez choisir de déployer huit conteneurs 2 vCPU.

1594123822_188_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-6613211

Ensuite, cliquez sur «Ajouter un conteneur» pour définir les conteneurs auxquels cette définition de tâche accédera. Collez l'URI de votre conteneur Docker dans ECR. Vous pouvez également définir des limites de mémoire douce et dure ici, et ouvrir des ports (applicables uniquement aux types de lancement EC2).

1594123822_288_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-6989412

Une fois créé, vous pouvez déployer les services à l'aide de cette définition. Rendez-vous sur "Clusters" et créez un nouveau cluster, en choisissant Fargate ou EC2 selon vos préférences. Vous pouvez éventuellement choisir de créer un nouveau VPC pour ce cluster, ou vous pouvez le déployer dans votre VPC par défaut.

Vous pouvez exécuter des tâches manuellement, mais il est préférable de créer un service pour le gérer. Créez un nouveau service à partir de la vue Cluster:

1594123822_530_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-1265494

Donnez-lui un nom, sélectionnez le type de lancement que vous utilisez et sélectionnez la définition de tâche que vous venez de créer. Ici, vous pouvez définir le nombre de tâches que vous souhaitez lancer et combien d'entre elles doivent être saines à tout moment. Si l'une des tâches échoue ou est interrompue, une nouvelle sera lancée pour la remplacer. Ceci est indépendant de la mise à l'échelle automatique.

1594123823_625_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-7824263

Sur l'écran suivant, sélectionnez votre VPC et sélectionnez un sous-réseau dans lequel vous déployer. Vous souhaiterez également ouvrir le groupe de sécurité utilisé par votre service et ouvrir les ports nécessaires au fonctionnement de votre application.

Vous pouvez également ajouter un équilibreur de charge ou définir des paramètres DNS personnalisés à partir de cette page. Si vous utilisez un équilibreur de charge, vous devez vous assurer de définir une «période de grâce de contrôle d'intégrité» raisonnable, qui empêchera les tâches d'être marquées comme malsaines pendant le lancement.

1594123823_563_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-8067918

Sur l'écran suivant, vous pouvez configurer la mise à l'échelle automatique, qui est aussi simple que de l'activer, en spécifiant le nombre de tâches que vous souhaitez exécuter, le nombre maximum que vous pouvez vous permettre et le minimum que ECS ne doit jamais descendre en dessous.

1594123823_532_comment-demarrer-avec-les-deploiements-de-conteneurs-a-mise-a-3606748

Vous pouvez définir la stratégie de mise à l'échelle du suivi cible sur TargetTrackingPolicy, et le ECSServiceAverageCPUUtilization seuil à 75-80% ou plus. Si vous ne souhaitez pas utiliser la stratégie de suivi des cibles, vous pouvez augmenter ou réduire manuellement en fonction des alarmes CloudWatch.

Une fois déployé, votre service prendra environ une minute pour lancer les premiers conteneurs et sera disponible sur le conteneur ou le point de terminaison ENI de Load Balancer. Si vous le souhaitez, vous pouvez attribuer une adresse IP élastique à cette ENI, que vous pouvez configurer avec votre DNS pour une liaison permanente avec le cluster.

★★★★★