Amazon ECS : de la théorie au déploiement d'un service


Amazon Elastic Container Service (ECS) est un service d'orchestration de conteneurs entièrement géré par AWS. Il permet de déployer, faire évoluer et gérer des applications conteneurisées sans avoir à installer ni administrer soi-même un orchestrateur.

ECR (vu dans les articles précédents) se contente de stocker les images Docker, ECS s'occupe de les exécuter : il décide sur quelle machine lancer un conteneur, combien d'instances faire tourner, comment les remplacer en cas de panne, et comment les exposer au trafic réseau.

ECS peut être vu comme une alternative plus simple et plus intégrée à AWS que Kubernetes (ou son équivalent managé, EKS) : moins de concepts à apprendre, une intégration native avec IAM, VPC, CloudWatch et les load balancers AWS, au prix d'une portabilité moindre en dehors d'AWS.

Les deux modes de calcul : EC2 et Fargate

ECS ne fournit pas lui-même la puissance de calcul : il orchestre des conteneurs sur une infrastructure sous-jacente, qui peut être de deux natures.

Mode EC2

Les conteneurs s'exécutent sur des instances EC2 que vous provisionnez et gérez vous-même. Ces instance font tourner un agent ECS qui communique avec le control plane ECS pour recevoir et exécuter des tâches. Ce mode offre plus de contrôle (choix du type d'instance, accès SSH, optimisation fine des coûts avec des réservations ou du spot) mais implique aussi de gérer le patching, le scaling et le dimensionnement du cluster.

Mode Fargate

Fargate est un mode d'exécution serverless : AWS provisionne et gère automatiquement l'infrastructure nécessaire pour exécuter les conteneurs. Il n'y a plus d'instances EC2 à gérer, plus de capacité à dimensionner à l'avance. La facturation se fait à la ressource réellement consommée (vCPU/mémoire) pendant la durée d'exécution des contenaires.

Les composants clés d'ECS

Les principaux composants d'ECS
  • Cluster : espace logique qui regroupe les ressources sur lesquelles les conteneurs seront exécutés.
  • Task Definition : modèle décrivant l'application à exécuter (image Docker, CPU, mémoire, ports, variables d'environnement, etc.).
  • Task : instance en cours d'exécution d'une Task Definition.
  • Service : maintient un nombre défini de tâches en fonctionnement et permet leur intégration avec un Load Balancer ainsi que la mise à l'échelle.
Dans cet article, nous créerons un cluster ECS utilisant AWS Fargate, puis nous déploierons l'image Docker publiée précédemment dans Amazon ECR afin de rendre notre application accessible via un Application Load Balancer (ALB).


Déploiement

Cluster

On commence par la création d'un Cluster.

Dans le service Elastic Container Service, cliquez sur Clusters, puis sur Create cluster.

Donnez un nom à votre cluster, par exemple demo-cluster.
Dans la section Infrastructure, sélectionnez le type de capacité souhaité. ici je selectionne Fargate and self-managed instances qui permet d'utiliser Farget et aussi avoir des instances EC2 que je gère moi-même.

Enfin Cliquez sur Create.

Task Definition

Une fois le cluster créé, on définit la Task Definition qui décrit comment exécuter notre conteneur demo-app (l'image poussée sur ECR dans l'article précedent).

Dans le menu de gauche, cliquez sur Task definitions, puis sur Create new task definition.


Donnez un nom, par exemple demo-app-task, choisissez le type de lancement : AWS Fargate.
Configurez la taille de la Task :
  • CPU : par exemple 0.5 vCPU.
  • Mémoire : par exemple 1 GB.
Dans la section Container details, ajoutez un conteneur :
  • Name : demo-app.
  • Image URI : <account_id>.dkr.ecr.eu-west-3.amazonaws.com/demo-app:latest.
  • Container port : le port exposé par l'application, par exemple 80.
Cliquez sur Create.

Service:

Maintenant on lance des containers.
Depuis la page du cluster demo-cluster, allez dans l'onglet Services, puis cliquez sur Create.

Selectionnez la task definition
Dans deployment configuration, on specifier le nombre de contenairs à créer



Dans Networking, choisissez le VPC et les subnets, et un security group autorisant le trafic sur le port du conteneur (80).

Dans Load balancing, vous pouvez associer un Application Load Balancer existant (ou en créer un) pour répartir le trafic entre les load balancers. 




enfin cliquez sur Create.
Vous trouverez un Load balancer en cours de création

C'est en utilisant le DNS du load balancer qu on peu acceder à l'appli qui toune dans des containers



Et voila tout est ok