Comment mettre à disposition une application Flask
DIDACTICIEL
Introduction
Amazon Lightsail est un serveur privé virtuel convivial qui propose un service de conteneurs. Suivez ce didacticiel pour découvrir comment mettre à disposition une application Flask sur le service de conteneurs Lightsail.
Dans ce didacticiel, vous allez créer une application Flask, un conteneur Docker, un service de conteneur sur Lightsail, puis déployer l’application.
Présentation
Dans ce didacticiel, vous allez configurer un conteneur Docker sur votre machine locale, configurer un conteneur dans le service Amazon Lightsail et lancer des applications « Hello, World ! ».
Conditions préalables
Pour pouvoir démarrer ce didacticiel, vous avez besoin des éléments suivants :
- Un compte AWS : si vous n’en avez pas encore, suivez les instructions du guide de mise en route Configuration de votre environnement pour une présentation rapide.
- Une interface de ligne de commande (CLI) AWS correctement configurée : pour plus d’informations sur la configuration d’AWS CLI, consultez la documentation AWS CLI. Assurez-vous d’utiliser la dernière version d’AWS CLI, qui est la v2. Enfin, assurez-vous qu’une région est définie par défaut ou vous devrez la spécifier lors de l’exécution des commandes de déploiement de Lightsail.
- Docker installé sur votre machine locale.
- Plug-in Amazon Lightsail Control (lightsailctl) installé et configuré : pour plus d’informations sur l’installation de Lightsail Control, consultez la documentation de Lightsail Control.
Expérience AWS
Intermédiaire
Temps nécessaire
30 minutes
Coût de réalisation
Admissible à l’offre gratuite. Consultez la page Tarification de Lightsail pour plus de détails.
Éléments requis
Compte AWS actif
AWS CLI
Amazon Lightsail Control
Docker
Services utilisés
Amazon Lightsail
Date de la dernière mise à jour
17 octobre 2023
Mise en œuvre
Étape 1 : création d’une application Flask
Procédez comme suit sur votre machine locale qui exécute Docker. Ces étapes vous guident tout au long du processus de création des fichiers d’application Flask.
Étape 1a : dans la ligne de commande de votre machine locale, créez un répertoire de projet et basculez vers ce répertoire.
mkdir lightsail-containers-flask
cd lightsail-containers-flask
Étape 1b : créez un fichier nommé app.py avec le code suivant :
Cette application Flask minimale contient une fonction unique hello_world qui est déclenchée lorsque la route « / » est demandée. Lorsqu’elle s’exécute, cette application se lie à toutes les adresses IP du système (« 0.0.0.0 ») et écoute sur le port 5000, qui est le port Flask par défaut.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello, World!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
Étape 1c : créez un fichier, requirements.txt. Modifiez le fichier et ajoutez le code suivant. Enregistrez ensuite le fichier.
Les fichiers requirements.txt sont utilisés pour spécifier les packages Python requis par l’application. Pour cette application Flask minimale, un seul package est requis, Flask.
flask===3.0.0
Étape 1d : créez un fichier nommé Dockerfile. Modifiez le fichier et ajoutez-y le code suivant. Enregistrez le fichier.
L’image alpine Python garantit que le conteneur obtenu est aussi compact et petit que possible. La commande à exécuter au démarrage du conteneur est la même que si elle était exécutée depuis la ligne de commande : python app.py
# Set base image (host OS)
FROM python:3.12-alpine
# By default, listen on port 5000
EXPOSE 5000/tcp
# Set the working directory in the container
WORKDIR /app
# Copy the dependencies file to the working directory
COPY requirements.txt .
# Install any dependencies
RUN pip install -r requirements.txt
# Copy the content of the local src directory to the working directory
COPY app.py .
# Specify the command to run on container start
CMD [ "python", "./app.py" ]
Étape 1e : à ce stade, votre répertoire doit contenir les fichiers suivants :
$ tree
.
├── app.py
├── Dockerfile
└── requirements.txt
0 répertoire, 3 fichiers
Étape 2 : création de l’image de votre conteneur
Étape 2a : créez le conteneur à l’aide de Docker. Utilisez la commande suivante depuis le même répertoire que le Dockerfile :
Cette commande crée un conteneur à l’aide du Dockerfile du répertoire actuel et étiquette le conteneur « flask-container ».
docker build -t flask-container .
Étape 2b : une fois la création du conteneur terminée, testez l’application Flask localement en exécutant le conteneur.
docker run -p 5000:5000 flask-container
Étape 2c : l’application Flask s’exécutera dans le conteneur et sera exposée à votre système local sur le port 5000. Accédez à http://localhost:5000 ou utilisez curl depuis la ligne de commande et vous verrez « Hello, World! ».
$ curl localhost:5000
Hello, World!
Étape 3 : création d’un service de conteneur
Procédez comme suit pour créer le service de conteneur Lightsail à l’aide de l’AWS CLI, puis transférez votre image de conteneur local vers votre nouveau service de conteneur à l’aide du plug-in de contrôle Lightsail (lightsailctl).
Étape 3a : créez un service de conteneur Lightsail à l’aide de la commande create-container-service.
Les paramètres de puissance et d’échelle spécifient la capacité du service de conteneur. Pour une application Flask minimale, une faible capacité est requise.
La sortie de la commande create-container-service indique que l’état du nouveau service est « PENDING ». Reportez-vous au deuxième bloc de code pour le voir.
aws lightsail create-container-service --service-name flask-service --power small --scale 1
Étape 3b : utilisez la commande get-container-services pour surveiller l’état du conteneur pendant sa création.
Attendez que l’état du service de conteneur passe à « READY » avant de passer à l’étape suivante. Votre service de conteneur devrait être prêt au bout de quelques minutes.
aws lightsail get-container-services
Sortie :
{
"containerService": {
"containerServiceName": "flask-service",
...
"state": "PENDING",
Sortie :
{
"containerService": {
"containerServiceName": "flask-service",
...
"state": "READY",
Étape 3c : envoyez le conteneur de l’application vers Lightsail à l’aide de la commande push-container-image.
Remarque : le X dans ":flask-service.flask-container.X" sera une valeur numérique. Si c’est la première fois que vous envoyez une image à votre service de conteneur, ce numéro sera 1. Vous aurez besoin de ce numéro à l’étape suivante.
aws lightsail push-container-image --service-name flask-service --label flask-container --image flask-container
Image "flask-container" registered.
...Refer to this image as ":flask-service.flask-container.X" in deployments.
Étape 4 : déploiement du conteneur
Procédez comme suit pour créer des fichiers JSON de déploiement et de configuration de point de terminaison public, puis déployez votre image de conteneur sur votre service de conteneur.
Étape 4a : créez un fichier, containers.json. Modifiez le fichier et ajoutez le code suivant.
Remplacez le X dans :flask-service.flask-container.X par la valeur numérique de l’étape précédente.
Enregistrez le fichier.
Le fichier containers.json décrit les paramètres des conteneurs qui seront lancés sur le service de conteneur. Dans ce cas, le fichier containers.json décrit le conteneur Flask, l’image qu’il utilisera et le port qu’il exposera.
{
"flask": {
"image": ":flask-service.flask-container.X",
"ports": {
"5000": "HTTP"
}
}
}
Étape 4b : créez un fichier, public-endpoint.json.
Modifiez le fichier et ajoutez le code suivant.
Enregistrez le fichier.
Le fichier public-endpoint.json décrit les paramètres du point de terminaison public pour le service de conteneur. Dans ce cas, le fichier public-endpoint.json indique que le conteneur Flask exposera le port 5000. Les paramètres des points de terminaison publics ne sont requis que pour les services nécessitant un accès public.
Après avoir créé les fichiers containers.json et public-endpoint.json, le répertoire de votre projet doit contenir les fichiers suivants :
- app.py
- containers.json
- Dockerfile
- public-endpoint.json
- requirements.txt
{
"containerName": "flask",
"containerPort": 5000
}
Étape 4c : déployez le conteneur sur le service de conteneur avec l’AWS CLI à l’aide de la commande create-container-service-deployment.
La sortie de la commande create-container-servicedeployment indique que l’état du service de conteneur est désormais « DEPLOYING », comme indiqué.
aws lightsail create-container-service-deployment --service-name flask-service --containers file://containers.json --public-endpoint file://public-endpoint.json
Sortie :
{
"containerServices": [{
"containerServiceName": "flask-service",
...
"state": "DEPLOYING",
Étape 4d : utilisez la commande get-container-services pour surveiller l’état du conteneur jusqu’à ce qu’il passe à « RUNNING » avant de passer à l’étape suivante.
La commande get-container-service renvoie également l’URL du point de terminaison pour le service de conteneur.
Une fois que l’état du service de conteneur passe à « RUNNING », ce qui prend généralement quelques minutes, accédez à cette URL dans votre navigateur pour vérifier que votre service de conteneur fonctionne correctement. La sortie de votre navigateur devrait afficher « Hello, World! » comme avant.
aws lightsail get-container-services --service-name flask-service
Sortie :
{
"containerServices": [{
"containerServiceName": "flask-service",
...
"state": "RUNNING",
... "url": "https://flask-service...
Félicitations ! Vous avez correctement déployé une application Flask conteneurisée à l’aide de conteneurs Amazon Lightsail.
Étape 5 : nettoyage des ressources
Procédez comme suit pour accéder au service de conteneur Lightsail que vous avez créé dans le cadre de ce didacticiel.
Étape 5a : pour nettoyer et supprimer des ressources Lightsail, utilisez la commande delete-container-service.
Le service delete-container-service supprime le service de conteneur, tous les déploiements de conteneurs associés et les images de conteneurs.
aws lightsail delete-container-service --service-name flask-service
Étape 5b : vérifiez qu’aucun conteneur n’est en cours d’exécution à l’aide de la commande get-container-services.
aws lightsail get-container-services
Sortie :
{
"containerServices": []
}
Conclusion
Félicitations ! Vous avez correctement déployé une application Flask conteneurisée à l’aide de conteneurs Amazon Lightsail.
Amazon Lightsail constitue un excellent moyen de développer et de déployer diverses applications comme WordPress, des sites Web et des blogs.