Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel montre comment déployer une application web Python Flask ou FastAPI sur Azure App Service à l’aide de la fonctionnalité Web App pour conteneurs. Cette approche fournit un chemin simplifié pour les développeurs qui souhaitent bénéficier des avantages d’une plateforme entièrement managée tout en déployant leur application en tant qu’artefact conteneurisé unique avec toutes les dépendances incluses. Pour en savoir plus sur l’utilisation des conteneurs dans Azure, consultez Comparaison des options de conteneur Azure.
Dans ce tutoriel, vous utilisez l’interface CLI Docker et Docker pour générer et tester une image Docker localement. Vous utilisez ensuite Azure CLI pour envoyer (push) l’image Docker à Azure Container Registry (ACR) et la déployer sur Azure App Service. L’application web est configurée avec son identité managée attribuée par le système pour un accès sécurisé sans mot de passe afin de télécharger l’image depuis ACR à l’aide du contrôle d’accès en fonction du rôle (RBAC) Azure. Vous pouvez également déployer avec Visual Studio Code avec l'extension Azure Tools installée.
Pour obtenir un exemple de conception 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 être déployée sur Azure App Service. Toutefois, l’utilisation d’une image Docker n’est pas nécessaire pour effectuer le déploiement sur App Service. Vous pouvez également déployer votre code d’application directement à partir de votre espace de travail local vers App Service sans créer d’image Docker. Pour voir 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. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Azure CLI pour créer une image Docker et la déployer dans App Service. Et éventuellement, Docker et l’interface 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.
- Fiole
- FastAPI
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
Ajouter des fichiers Dockerfile et .dockerignore
Ajoutez un fichier Dockerfile pour indiquer à Docker comment générer l’image. Le Dockerfile spécifie l’utilisation de Gunicorn, un serveur web de niveau production qui transmet 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.
- Fiole
- FastAPI
# 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"]
Dans cet exemple, 50505
est utilisé pour le port de conteneur (interne), mais vous pouvez utiliser n'importe quel port gratuit.
Vérifiez le fichier requirements.txt pour vous assurer qu’il contient gunicorn
.
Flask==3.1.0
gunicorn
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 où gunicorn est exécuté, il n’est pas nécessaire de spécifier son emplacement dans le fichier Dockerfile. Pour en savoir plus 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 en savoir plus sur les paramètres du fichier gunicorn.conf.py, consultez la configuration de Gunicorn.
- Fiole
- FastAPI
# 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érer l’image localement.
- Fiole
- FastAPI
docker build --tag flask-demo .
Remarque
Si la commande docker build
renvoie une erreur, vérifiez que le démon Docker est en cours d’exécution. Sous Windows, assurez-vous que Docker Desktop est en cours d’exécution.
Exécutez l’image localement dans un conteneur Docker.
- Fiole
- FastAPI
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
associe le port du conteneur à un port sur l'hôte. Le port de l’hôte (externe) est le premier de la paire, et le port du conteneur (interne) est le second. Pour plus d’informations, consultez Informations de référence sur l’exécution de Docker.
Créez un groupe de ressources et un Azure Container Registry.
Exécutez la commande az login pour vous connecter à Azure.
az login
Exécutez la commande az upgrade pour vous assurer que votre version d’Azure CLI est en vigueur.
az upgrade
Créez un groupe avec la commande az group create.
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
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. Remplacez
<location>
par l’emplacement que vous choisissez. Certaines références SKU ne sont pas disponibles dans certains emplacements. Vous risquez donc d’obtenir une erreur indiquant cela. Utilisez un autre emplacement et réessayez.Créez un Azure Container Registry à l’aide de la commande az acr create. Remplacez
<container-registry-name>
par un nom unique pour votre instance.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku Basic
Remarque
Le nom du registre doit être unique dans Azure. Si vous obtenez un message d’erreur, essayez avec 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 nommage de l'Azure Container Registry. Si vous utilisez un autre nom, veillez à utiliser votre nom plutôt que
webappacr123
dans les commandes qui référencent le registre et les artéfacts de registre dans les sections suivantes.Un 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.
Générer l’image dans Azure Container Registry
Générez l’image Docker dans Azure à l’aide de la commande az acr build. La commande utilise le fichier Dockerfile dans le répertoire actif et envoie l’image au registre.
az acr build \
--resource-group $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--image webappsimple:latest .
L’option --registry
spécifie le nom du registre et l’option --image
le nom de l’image. Le nom de l’image est au format suivant : registry.azurecr.io/repository:tag
.
Déployer l’application web sur Azure
Créez un plan App Service avec la commande az appservice plan.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Définissez une variable d’environnement pour votre ID d’abonnement. Il est utilisé dans le paramètre
--scope
dans la commande suivante.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
La commande permettant de créer la variable d’environnement s’affiche pour l’interpréteur de commandes Bash. Modifiez la syntaxe appropriée pour d’autres environnements.
Créez l'application web avec la commande az webapp create.
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latest
Remarques :
Le nom de l’application web doit être unique dans Azure. Si vous obtenez un message d’erreur, essayez avec 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 en savoir plus, voir les règles de nomenclature de Microsoft.Web.
Si vous utilisez un nom autre que
webappacr123
pour votre Azure Container Registry, veillez à mettre à jour le paramètre--container-image-name
en conséquence.Les paramètres
, et activent l'identité managée attribuée par le système sur l'application web et lui attribuent le rôle sur le groupe de ressources. Cela permet à l’identité managée d’extraire des images de n’importe quel Azure Container Registry dans le groupe de ressources.Les paramètres
--acr-use-identity
et--acr-identity
configurent l’application web pour qu’elle utilise son identité gérée assignée par le système afin de récupérer des images depuis l'Azure Container Registry.La création de l’application web peut prendre plusieurs minutes. Vous pouvez vérifier 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 contenant « préchauffage », 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 modifié le code, vous pouvez redéployer vers 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. Supprimer le groupe de ressources permet de supprimer toutes les ressources qu’il contient. Cette méthode est la plus rapide pour supprimer toutes les ressources Azure utilisées pour votre application.
Pour supprimer des ressources, utilisez la commande az group delete.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
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 :
- Déployer une application web Python sur Azure Container Apps
- Guide de démarrage rapide : Déployer une application web Python (Django ou Flask) sur Azure App Service