Déployer une application web Flask ou FastAPI conteneurisée sur Azure App Service
Ce tutoriel vous montre comment déployer une application web Python Flask ou FastAPI sur Azure App Service à l’aide de la fonctionnalité Web App for Containers. Web App for Containers fournit une rampe d’accès facile pour les développeurs afin de tirer parti de la plateforme Azure App Service entièrement managée, mais qui veulent également un seul artefact déployable contenant une application et toutes ses dépendances. Pour plus d’informations sur l’utilisation de conteneurs dans Azure, consultez Comparaison des options de conteneur Azure.
Dans ce tutoriel, vous utilisez l’interface CLI Docker et Docker pour créer éventuellement une image Docker et la tester localement. Vous utilisez également Azure CLI pour créer une image Docker dans Azure et la déployer sur Azure App Service. Vous pouvez également déployer avec Visual Studio Code avec l’extension Azure Tools installée. Pour obtenir un exemple de création et de création d’une image Docker à exécuter sur Azure Container Apps, consultez Déployer une application web Flask ou FastPI sur Azure Container Apps.
Remarque
Ce tutoriel montre comment créer une image Docker qui peut ensuite être exécutée sur App Service. Il n’est pas nécessaire d’utiliser App Service. Vous pouvez déployer du code directement à partir d’un espace de travail local vers App Service sans créer d’image Docker. Pour obtenir un exemple, consultez Démarrage rapide : Déployer une application web Python (Django ou Flask) sur Azure App Service.
Prérequis
Pour terminer ce tutoriel, vous avez besoin de ce qui suit :
Un compte Azure dans lequel vous pouvez déployer une application web sur Azure App Service et Azure Container Registry.
Azure CLI pour créer une image Docker et la déployer sur App Service. Et éventuellement, Dockeret Docker CLI pour créer un Docker et le tester dans votre environnement local.
Obtenir l’exemple de code
Dans votre environnement local, obtenez le code.
Ajouter des fichiers Dockerfile et .dockerignore
Ajoutez un fichier Dockerfile pour indiquer à Docker comment générer l’image. Le fichier Dockerfile spécifie l’utilisation de Gunicorn, un serveur web de niveau production qui transfère les requêtes web aux frameworks Flask et FastAPI. Les commandes ENTRYPOINT et CMD indiquent à Gunicorn de gérer les requêtes pour l’objet d’application.
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "app:app"]
50505
est utilisé pour le port de conteneur (interne) dans cet exemple, mais vous pouvez utiliser n’importe quel port gratuit.
Vérifiez le fichier requirements.txt pour vous assurer qu’il contient gunicorn
.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Ajoutez un fichier .dockerignore pour exclure les fichiers inutiles de l’image.
.git*
**/*.pyc
.venv/
Configurer gunicorn
Gunicorn peut être configuré avec un fichier gunicorn.conf.py . Lorsque le fichier gunicorn.conf.py se trouve dans le même répertoire que gunicorn, vous n’avez pas besoin de spécifier son emplacement dans le fichier Dockerfile. Pour plus d’informations sur la spécification du fichier de configuration, consultez les paramètres Gunicorn.
Dans ce tutoriel, le fichier de configuration suggéré configure gunicorn pour augmenter son nombre de workers en fonction du nombre de cœurs de processeur disponibles. Pour plus d’informations sur les paramètres de fichier gunicorn.conf.py , consultez la configuration de Gunicorn.
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
Générer et exécuter l’image localement
Générez l’image localement.
Remarque
Si la docker build
commande retourne une erreur, vérifiez que le démon Docker est en cours d’exécution. Sur Windows, assurez-vous que Docker Desktop est en cours d’exécution.
Exécutez l’image localement dans un conteneur Docker.
docker run --detach --publish 5000:50505 flask-demo
Ouvrez l’URL http://localhost:5000
dans votre navigateur pour voir l’application web s’exécutant localement.
L’option --detach
exécute le conteneur en arrière-plan. L’option --publish
mappe le port du conteneur à un port sur l’hôte. Le port hôte (externe) est d’abord dans la paire, et le port de conteneur (interne) est deuxième. Pour plus d’informations, consultez Informations de référence sur l’exécution de Docker.
Créer un groupe de ressources et Azure Container Registry
Créez un groupe avec la commande az group create .
az group create --name web-app-simple-rg --location eastus
Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Lors de la création d’un groupe de ressources, vous spécifiez un emplacement, tel que eastus.
Créez un Registre de conteneurs Azure avec la commande az acr create .
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic --admin-enabled true
Remarque
Le nom du registre doit être unique dans Azure. Si vous obtenez une erreur, essayez un autre nom. Les noms de Registre peuvent comporter 5 à 50 caractères alphanumériques. Les traits d’union et les traits de soulignement ne sont pas autorisés. Pour en savoir plus, consultez les règles de nom d’Azure Container Registry. Si vous utilisez un autre nom, veillez à utiliser votre nom plutôt que
webappacr123
dans les commandes qui référencent les artefacts de Registre et de Registre dans les sections suivantes.Azure Container Registry est un registre Docker privé qui stocke les images à utiliser dans Azure Container Instances, Azure App Service, Azure Kubernetes Service et d’autres services. Lors de la création d’un registre, vous spécifiez un nom, une référence SKU et un groupe de ressources. La deuxième commande enregistre le mot de passe dans une variable avec la commande az credential show . Le mot de passe est utilisé pour s’authentifier auprès du Registre dans une étape ultérieure.
Définissez une variable d’environnement sur la valeur du mot de passe du Registre.
ACR_PASSWORD=$(az acr credential show \ --resource-group web-app-simple-rg \ --name webappacr123 \ --query "passwords[?name == 'password'].value" \ --output tsv)
La commande permettant de créer la variable d’environnement s’affiche pour l’interpréteur de commandes Bash. Modifiez la syntaxe et le caractère de continuation (
\
) en fonction des autres interpréteurs de commandes.Vous pouvez également obtenir le mot de passe (
ACR_PASSWORD
) à partir du Portail Azure en accédant au Registre, en sélectionnant clés d’accès et en copiant le mot de passe.
Générer l’image dans Azure Container Registry
Générez l’image Docker dans Azure avec la commande az acr build . La commande utilise le fichier Dockerfile dans le répertoire actif et envoie (push) l’image au registre.
az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .
L’option --registry
spécifie le nom du Registre et l’option --image
spécifie le nom de l’image. Le nom de l’image est au format registry.azurecr.io/repository:tag
.
Déployer une application web sur Azure
Créez un plan App Service avec la commande az appservice plan .
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
Créez l’application web avec la commande az webapp create .
az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --docker-registry-server-password $ACR_PASSWORD \ --docker-registry-server-user webappacr123 \ --role acrpull \ --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest
Remarques :
Le nom de l’application web doit être unique dans Azure. Si vous obtenez une erreur, essayez un autre nom. Le nom peut se composer de caractères alphanumériques et de traits d’union, mais ne peut pas commencer ou se terminer par un trait d’union. Pour plus d’informations, consultez les règles de nom Microsoft.Web.
Si vous utilisez un nom différent de
webappacr123
celui de votre Registre de conteneurs Azure, veillez à mettre à jour les--docker-registry-server-user
paramètres de--deployment-container-image-name
manière appropriée.La création de l’application web peut prendre quelques minutes. Vous pouvez case activée les journaux de déploiement avec la commande az webapp log tail. Par exemple :
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Si vous voyez des entrées avec « préchauffement » dans ces entrées, le conteneur est en cours de déploiement.L’URL de l’application web est
<web-app-name>.azurewebsites.net
, par exemple,https://webappsimple123.azurewebsites.net
.
Mettre à jour et redéployer
Après avoir apporté des modifications de code, vous pouvez redéployer dans App Service avec les commandes az acr build et az webapp update .
Nettoyage
Toutes les ressources Azure créées dans ce tutoriel se trouvent dans le même groupe de ressources. La suppression du groupe de ressources supprime toutes les ressources du groupe de ressources et est le moyen le plus rapide de supprimer toutes les ressources Azure utilisées pour votre application.
Pour supprimer des ressources, utilisez la commande az group delete .
az group delete --name web-app-simple-rg
Vous pouvez également supprimer le groupe dans le Portail Azure ou dans Visual Studio Code et l’extension Azure Tools.
Étapes suivantes
Pour plus d’informations, consultez les ressources suivantes :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour