Comment mettre à disposition une application Flask

avec des conteneurs Amazon Lightsail

DIDACTICIEL

Introduction

Amazon Lightsail est un serveur privé virtuel convivial qui propose un service de conteneursSuivez 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. 

Démarrez gratuitement avec Amazon Lightsail. 

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.

Étapes suivantes

Poursuivez votre parcours avec AWS en suivant les étapes de la section ci-dessous.

Cette page vous a-t-elle été utile ?