Dans cet article, nous allons parler de ce que ECS est et vous présenter un tutoriel sur la façon de déployer une API construite en utilisant le cadre FastAPI de Python et emballé dans une image Docker. Nous supposons que vous avez connaissance de Python et Docker pour le suivre.
Qu’est-ce que l’ECS
Amazon Elastic Container Service (ECS) est un service de gestion de conteneurs qui offre l’orchestration, la découverte de services, le déploiement sans serveur et plus pour vos applications containerizzato.
Si vous cherchez une vidéo d’aperçu ECS plus complète, consultez mon article ici. .
ECS Concepts clés
En résumé, ECS est sur la configuration services de maintien et d ' échelle tâches définis par définitions des tâches courir sur un cluster . Les tâches peuvent être exécutées sur deux types de lancement . Le premier est une manière sans serveur appelée Fargate , et l’autre est traditionnelle EC2 instances .
Définition des tâches
Les définitions de tâches sont les configurations d’un groupe de 1 à 10 conteneurs qui fonctionneront ensemble une fois initialisés. Ces conteneurs peuvent être courts ou longs.
Dans une définition de tâche, vous choisissez la quantité de ressources des instances que vous allez allouer et combien chaque conteneur peut consommer de ces ressources préaffectées. Outre les ressources de chaque conteneur, vous configurez également des choses comme les images à utiliser, les ports à ouvrir, les variables d’environnement, etc.
Task
Une tâche est l’instantané d’une définition de tâches au sein d’un groupe.
Cluster
Vos tâches et services fonctionnent sur l’infrastructure qui est enregistrée dans un cluster. Les clusters sont utilisés pour séparer les groupes de services et/ou les tâches indépendantes les uns des autres dans une région donnée. Clusters supportent les deux types de lancement simultanément.
Fargate
Fargate est une option sans serveur pour le fonctionnement des conteneurs. Les instances de Fargate sont gérées par AWS et ne peuvent exécuter qu’une seule tâche à la fois. Ces instances peuvent être configurées avec aussi peu que .25 vCPU et 512MB de RAM jusqu’à 16 vCPU et 120 Go de RAM avec un stockage allant de 20 à 200 Go. La RAM doit toujours correspondre 2x à 8x la configuration vCPU.
EC2 Container Instance
Les cas de conteneurs ECS sont des machines EC2 utilisant un AMI optimisé par ECS. Ils sont configurés pour exécuter des tâches d’un cluster ECS particulier. Ces instances peuvent exécuter autant de tâches que leurs ressources peuvent gérer.
Exemple
Vous pouvez écrire une définition de tâches qui affecte 4 vCPU et 8 Go de RAM et a 3 conteneurs C1, C2 et C3, où C1 et C2 obtiennent 1vCPU et 2GB de RAM chacun et C3 obtient 2 vCPU et 4GB de RAM. Imaginez une instance EC2 avec 8 vCPU et 16 Go de RAM. Ne pas considérer les ressources utilisées par l’OS, vous pouvez exécuter 2 tâches définies par cette définition de tâche. Notez que si vous utilisez Fargate, vous devez activer deux machines, une pour chaque tâche. Les ressources seront fournies automatiquement selon la définition de la tâche.
Types d ' application
Standalone Task
Une tâche autonome est une tâche que vous commencez manuellement ou programmatiquement. Elles sont idéalement courtes et s’arrêtent après avoir fini leur exécution. Il est recommandé une charge de travail de fourche comme les emplois par lots.
Services
Contrairement à une tâche autonome, un service vous permet de maintenir un nombre déterminé de tâches fonctionnant dans un cluster. Si, pour une raison quelconque, une tâche échoue, le service insère automatiquement un autre pour que vous le remplaçiez. Les services sont la méthode recommandée pour exécuter des applications Web, par exemple.
Certaines autres caractéristiques sont constituées de services tels que :
- Si vous devez exécuter plusieurs copies d’une tâche, vous pouvez mettre un service comme un groupe cible derrière un balanceur de charge et le faire distribuer la charge pour vous.
- Vous pouvez configurer l’échelle automatique pour vos tâches en fonction des métriques et des alarmes que vous définissez dans CloudWatch, pour plus d’informations sur cette vérification [lien].
- Les services vous permettent de définir des politiques de déploiement telles que les mises à jour de roulement ou les déploiements bleu/vert lors de la mise à jour des définitions de tâches.
Ce qui est ECR
Amazon Elastic Container Registry (ECR) est la mise en œuvre de l’initiative Open Container Initiative (OCI) Distribution Specification. OCI suggère une philosophie «build, ship, run» pour traiter l’emballage et la livraison des applications containerizzato. Ce que cela signifie, c’est que vous construisez une image, expédiez quelque part et récupérez-le quand vous avez besoin de lancer un conteneur. L’endroit où vous expédiez vos images pour la récupérer est appelé un registre, comme ECR.
Comment ECS utilise ECR
Lorsque vous définissez une image à utiliser dans une Définition de tâches, vous spécifiez une image URI qui pointera vers un registre contenant où ECS va récupérer l’image à partir de l’initialisation d’une tâche. Lorsque vous utilisez AWS ECS, vous pouvez bénéficier d’une meilleure performance et de moindre coût en utilisant ECR pour stocker vos images.
Tutoriel
Partie 1 – Demande
Pour notre application, nous allons utiliser le guide FastAPI sur la façon de déployer le cadre comme référence, avec quelques changements mineurs. Le guide complet avec les recomendations se trouve à l ' adresse https://fastapi.tiangolo.com/deployment/docker.
- Étape 1.1 – Commencez par construire la structure de votre dossier comme suit:
src├── app│ ├── __init__.py│ └── main.py├── Dockerfile└── requirements.txt
- Étape 1.2 – Ajouter les exigences suivantes
requirements.txt
.
fastapiuvicorn
- Étape 1.3 – Dans votre
main.py
écrire le code suivant:
from fastapi import FastAPIfrom typing import Unionapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}@app.get("/items/{item_id}")def read_item(item_id: int, q: Union[str, None] = None): return {"item_id": item_id, "q": q}
Ce code définit deux itinéraires appelables lorsque l’API fonctionne. Une seule /
et autres /items/{id}
. Les deux itinéraires répondent aux HTTP méthode GET
seulement.
- Étape 1.4 – Dans votre
Dockerfile
écrire:
FROM python:3.10-slimWORKDIR /codeCOPY ./requirements.txt /code/requirements.txtRUN pip install --no-cache-dir --upgrade -r /code/requirements.txtCOPY ./app /code/appCMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
Quand une image est construite à l’aide de cette définition, elle commence par chercher la python:3.10-slim
image de base du registre public docker. Puis, copiez le requirements.txt
fichier et installer les exigences en utilisant pip
. Enfin, il copie le dossier de l’application. Quand un conteneur démarre, il court uvicorn
serveur web ASGI utilisant l’application définie dans main.py
.
Partie 2 – ECR
Pour suivre cette partie assurez-vous que vous avez Docker et le CLI AWS installé. Pour savoir comment les installer et les configurer se référer à [link] et [link], respectivement.
- Étape 2.1 – Créer un répertoire:
Vous pouvez créer un nouveau référentiel ECR en utilisant le CLI AWS en exécutant la commande:
aws ecr create-repository --repository-name
ou en utilisant la console comme indiqué ci-dessous.
- Accédez à la console Elastic Container Registry dans la console AWS Management Console et cliquez sur Créer un dépôt
- Choisissez un nom et cliquez sur Créer un dépôt . Vous pouvez laisser d’autres configurations par défaut.
- Une fois le dépôt créé, copiez votre dépôt URI pour la prochaine étape.
- Puis, cliquez sur Voir Push Commands [2] . Sauvez les commandes pour une utilisation ultérieure. Vous utiliserez les commandes 1 et 4, et une fusion des commandes 2 et 3.
- Étape 2.2 – Build the Image:
- Sur votre terminal, allez au
src/
dossier et exécuter
docker build -t
pour construire votre image et l’étiqueter avec:latest . :latest - Courez votre conteneur localement avec
docker run
pour s’assurer que tout fonctionne comme prévu. Vous devriez voir une sortie semblable à ce qui est présenté ci-dessous.:latest
Notez que notre API est définie pour fonctionner sur le port 80, tel que défini paruvicorn
commande in theDockerfile
. Nous aurons besoin de cette information plus tard lors de la définition de notre conteneur dans notre définition de tâche.
- Sur votre terminal, allez au
- Si tout fonctionne, connectez-vous à ECR en exécutant la commande d’authentification:
aws ecr get-login-password --region
C’est la commande. 1 vous avez enregistré sur l’étape précédente. Vous devriez voir la sortie ci-dessous.
- Si le login réussit, cours:
docker push
:latest
pour pousser l’image vers le dépôt. C’est la commande. 4 .
- Lorsque l’image termine le téléchargement vers ECR, vous pourrez le voir sur la console de dépôt.
Partie 3 – ECS
- Étape 3.1 – Créer un cluster:
- Allez à la console Elastic Container Service dans la console AWS Management Console. Sélectionnez clusters dans le panneau de gauche et cliquez Créer Cluster . Vous serez présenté avec la page suivante:
- Choisissez un nom pour le cluster et le VPC sur lequel vous souhaitez exécuter des tâches. Vous pouvez également choisir de créer des instances conteneur EC2 tout en créant votre cluster. On ne va pas s’approcher de ça dans ce tutoriel.
- Under Surveillance Active Utiliser les informations du contenant et cliquez Créer .
- Allez à la console Elastic Container Service dans la console AWS Management Console. Sélectionnez clusters dans le panneau de gauche et cliquez Créer Cluster . Vous serez présenté avec la page suivante:
- Étape 3.2 – Créer une définition de tâches:
- Allez sur la console ECS et sélectionnez Définitions des tâches dans le panneau de gauche et cliquez Créer une nouvelle définition des tâches , et cliquez encore une fois.
- Définir a famille et a conteneur nommé app avec un port 80 créé. Vous pouvez laisser le reste avec les valeurs par défaut. Cliquez sur Suivant .
- Choisissez une taille de tâche de .25vCPU et .5GB de Mémoire. Comme nous n’avons qu’un seul conteneur, configurer la taille du conteneur app pour correspondre aux spécifications de la définition de tâche. Cliquez sur Suivant .
- Allez sur la console ECS et sélectionnez Définitions des tâches dans le panneau de gauche et cliquez Créer une nouvelle définition des tâches , et cliquez encore une fois.
Rôle du groupe
Le rôle de travail est les permissions de votre conteneurs aura quand une tâche sera exécutée. Vous pourriez avoir besoin de télécharger quelque chose de S3 pendant l’exécution. C’est le rôle que vous devez configurer avec les permissions de le faire. Rôle d ' exécution des tâches
Rôle de l ' exécution des tâches
Le rôle des exécutions de tâches est les autorisations container agent qui féculent vos images et configurer votre environnement aura lors des tâches de démarrage. Vous pouvez obtenir des autorisations comme chercher des secrets ou des paramètres du gestionnaire de secrets ou du magasin de paramter pour définir comme variables d’environnement, par exemple. C’est le rôle que vous devriez configurer avec les permissions de le faire.
- Examen et clic Créer .
Partie 4 – Exécuter une tâche autonome
Étape 4.1 – Configurer la tâche:
- Sur votre nouvelle définition de tâche cliquez sur déploiement , puis sélectionnez Cours. .
- Sur la page de configuration sélectionnez cluster vous avez créé dans l’étape précédente et sélectionnez type de lancement , puis fargate .
- Under Networking , sélectionnez le VPC associé à votre cluster et quelques **subnets. Sélectionnez groupe de sécurité qui permet l’accès à HTTP protocole sur le port 80 . C’est le port et le protocole que notre conteneur est configuré pour recevoir des requêtes.
- Assure-toi. Public IP est actif, parfois ECS ne parvient pas à récupérer des images lorsque cela est désactivé.
- Task et Rebords de conteneurs sont utilisés pour remplacer les configurations de tâches et de conteneurs pour un lancement. Nous n’avons pas besoin de changer quoi que ce soit.
- Cliquez sur Créer .
Étape 4.2 – Vérifier si la tâche a commencé:
- Une fois une tâche créée, vous pouvez vérifier son statut sous votre Cluster’s console.
- Cliquez sur la tâche id sous Task pour ouvrir la console de tâches.
- Attends. Dernier statut pour fonctionner, vous pouvez polluer les journaux pour voir l’activité et si des erreurs se produisent.
- Attrape le Public IP umder Configuration
Étape 4.3 – Testez l’API :
- Allez. http:// tempyour_public_ip>/docs pour ouvrir la page de documentation auto-générée de FastAPI pour voir si elle fonctionne correctement.
- Vous pouvez également faire une demande à l’un des paramètres que nous avons créés.
- Étape 4.4 – Arrêter la tâche:
- Assurez-vous de retourner au Taks’ Console et arrêtez la tâche sur le coin supérieur droit, donc vous n’avez aucune charge.
Partie 5 – Créer un service
- Étape 5.1 – Créer le service:
- Sur toi Définition de la tâche console cliquez sur déploiement , puis sélectionnez Créer un service .
- Tout comme avec la tâche autonome, configurez votre type de lancement .
- Under Configuration du déploiement Sélectionner réplique and set tâches souhaitées à 1.
- Tout comme avec la tâche autonome, configurez votre réseautage . Nous n’allons pas avoir besoin d’équilibrage de charge pour l’instant. Cliquez sur Créer
- Étape 5.1 – Vérifier le service:
- Sur la console de votre Cluster, vous pouvez voir tous vos services en cours. Cliquez sur celui que vous venez de créer.
- Sur la console de votre service Configuration et tâches tu trouveras tes tâches et leurs Ids. Vous pouvez vérifier s’ils fonctionnent comme vous l’avez fait avec la tâche autonome.
Dans l’ensemble, AWS ECS et ECR sont des outils puissants qui peuvent vous aider à déployer, gérer et échellener vos applications conteneurisées. Ils offrent un moyen d’automatiser la gestion des grappes et des ressources, ainsi qu’un moyen de stocker et de distribuer vos images conteneur de manière privée et sécurisée. Avec les connaissances acquises dans cet article, vous êtes prêt à construire et déployer vos propres applications en utilisant ces services sur AWS.
- Si vous utilisez Fargate, vous devez activer deux machines, une pour chaque tâche. Les ressources seront fournies automatiquement selon la définition de la tâche. ✕
- Vous pouvez trouver ce bouton en cliquant sur le nom du dépôt si vous avez manqué la notification. ✕