Vous en avez assez de gérer les serveurs? Voici comment démarrer avec les conteneurs sur AWS
Les conteneurs regroupent tout le code, les dépendances et la configuration de votre application dans une seule image que vous pouvez exécuter sur le service Elastic Container d’Amazon sans configurer ni gérer une seule instance EC2.
Sommaire
Que sont les conteneurs et comment puis-je les utiliser?
Les conteneurs sont un concept Unix qui permet aux applications de s’exécuter dans des environnements virtualisés isolés, sans la dégradation des performances qui accompagne l’exécution de machines virtuelles.
Vous pouvez les considérer comme des CD contenant tout ce dont votre application a besoin pour fonctionner. Vous pouvez envoyer ce CD à AWS, qui se chargera d’en créer des copies et de le distribuer à plusieurs serveurs de travail. Ces serveurs exécuteront l’application emballée dans votre CD et peuvent être rapidement démarrés et arrêtés dans le cadre d’un groupe de mise à l’échelle automatique pour correspondre à la charge de déplacement et optimiser les coûts.
Bien qu’ils soient très utiles en soi, les conteneurs ont également un autre objectif crucial: ils apportent votre infrastructure et vos opérations au même flux de travail de gestion de version que votre code, et ils synchronisent vos environnements de développement et de production. Votre code s’exécutera de la même manière sur votre machine de développement locale que sur votre serveur. Et, comme toute la configuration de votre serveur fait partie de ce conteneur, elle peut être gérée via git
tout comme vous géreriez votre code source.
Il y a cependant quelques limites aux conteneurs. Ils sont principalement en lecture seule; Les outils d’orchestration comme ECS et Kubernetes sont conçus autour de conteneurs sans état. Vous ne voulez vraiment les utiliser que pour le calcul, jamais pour le stockage – si vous exécutez des conteneurs sur une instance EC2 réservée, il peut être judicieux d’exécuter une base de données dessus, mais les applications exécutées sur ECS sont conçues pour avoir des heures de démarrage et d’arrêt flexibles . Toutes les données qui y sont stockées sont éphémères, tout comme la RAM.
Si votre application utilise une base de données ou un stockage local, vous voudrez peut-être envisager de le déplacer vers un service distinct, ce qui peut être moins cher que de l’exécuter sur EC2 de toute façon. AWS possède de nombreux services de base de données gérés et S3 est très bon marché pour le stockage par rapport à EBS ou EFS.
Emballez votre application avec Docker
Il s’agit de la partie difficile et de la partie la plus spécifique à votre application: la création et la configuration du conteneur. Ironiquement, cela est très similaire à la configuration des serveurs, sauf que vous n’aurez à le faire qu’une seule fois, toute votre configuration sera centralisée et vous pourrez synchroniser vos environnements de développement et de production. Les avantages l’emportent largement sur le mal de tête initial.
Vous souhaiterez installer Docker Desktop pour votre système d’exploitation, afin de pouvoir exécuter et gérer des conteneurs sur votre ordinateur local.
Le point d’entrée principal qui définit toute la configuration de Docker est appelé Dockerfile. Vous souhaiterez créer un nouveau répertoire de projet et créer un nouveau Dockerfile, simplement nommé Dockerfile
sans extension:
touch Dockerfile
Dans ce fichier, vous utiliserez les commandes Docker pour indiquer à Docker comment créer votre instance. Pour commencer, vous souhaiterez probablement créer une image préexistante à partir du Docker Hub, comme Ubuntu, avec le FROM
commander:
FROM ubuntu
Il existe de nombreuses images Docker prédéfinies parmi lesquelles choisir, telles que des images avec un logiciel comme nginx préinstallé.
Vous pouvez lier des dossiers locaux de ce répertoire de projet aux dossiers réels de l’image avec le COPY
commander. Par exemple, si vous aviez un dossier de projet appelé nginx/
avec toute la configuration de nginx, vous pouvez recopier cela avec:
COPY nginx /etc/nginx/
Cela garantira que le conteneur éventuel a la configuration appropriée à l’emplacement nginx par défaut.
Docker est beaucoup plus compliqué que cela, et il existe de nombreuses commandes pour exécuter des scripts d’initialisation, transmettre des informations avec état aux conteneurs et exécuter votre application au démarrage. Vous pouvez lire notre guide complet sur l’empaquetage de votre application avec Docker pour en savoir plus.
Envoyez votre Dockerfile à ECS d’Amazon
Vous devrez télécharger votre image dans un référentiel ECR. Rendez-vous sur la console de gestion ECR et créez un nouveau référentiel avec un nom unique. Choisissez «Afficher les commandes push» et cette boîte de dialogue vous sera présentée, qui devrait vous aider à lier votre client Docker au référentiel, à créer votre image et à la télécharger sur ECR.
En bref, vous devez vous connecter avec vos informations d’identification AWS, créer l’image, lui donner une balise, puis exécuter:
docker push
Avec l’URI de votre référentiel.
Une fois que vous avez terminé, rendez-vous sur la console de gestion ECS et sélectionnez «Commencer». Choisissez « Personnalisé » comme type d’image:
Entrez l’URI complet de votre image; cela devrait ressembler à:
aws_account_id.dkr.ecr.region.amazonaws.com/repository:latest
Il y a un tonne de configuration supplémentaire dans cette boîte de dialogue sous « Configuration avancée », et vous voudrez vous assurer de tout lire et de remplir tout ce qui vous est utile. Une chose importante est de cocher «Configurer automatiquement les journaux CloudWatch», qui liera les journaux de votre application conteneurisée à CloudWatch.
Par défaut, votre application s’exécutera sur AWS Fargate en tant que moteur de calcul, pas EC2. Fargate est la version AWS de Kubernetes; il orchestre et gère l’exécution de vos conteneurs. L’inconvénient principal est que vous n’aurez pas accès à la connexion à des instances réelles, vous devrez donc apporter des modifications via les mises à jour de docker (que vous devriez quand même). Si vous ne souhaitez pas utiliser Fargate, vous pouvez utiliser des instances EC2 standard, qui exécuteront l’AWS ECS Container Agent.
Dans l’écran suivant, vous définirez le nombre de vos conteneurs à exécuter et vous aurez la possibilité de créer un équilibreur de charge entre eux:
Vous pouvez également configurer votre service pour utiliser Auto Scaling, qui fera évoluer votre application de haut en bas en fonction de la demande.
Une fois que vous avez terminé, cliquez sur «Créer» pour lancer votre cluster. Il sera visible sous l’onglet «Clusters» de la console de gestion ECS une fois qu’il aura été créé.