Remarque
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.
Dans ce tutoriel, vous allez apprendre à déployer une application web Django Python pilotée par les données pour Azure App Service et utiliser Service Connector pour la connecter à d’autres services Azure. L’exemple d’application web stocke les informations sur les restaurants et les avis dans une base de données Azure Database pour PostgreSQL et stocke des photos dans un conteneur stockage Azure.
Vous utilisez Azure CLI pour effectuer les tâches suivantes :
- Créez une application web Python Django et déployez-la sur Azure App Service.
- Créez un serveur et une base de données flexibles Azure Database pour PostgreSQL.
- Créez un compte et un conteneur stockage Azure.
- Connectez l’application web à la base de données et au conteneur de stockage en utilisant Service Connector avec authentification d’identité gérée .
- Interagissez avec l’application web.
Remarque
Ce didacticiel est similaire au didacticiel App Service Deploy a Python Django web app with PostgreSQL in Azure tutorial, mais utilise une identité managée sans mot de passe affectée par le système avec Azure contrôle d’accès en fonction du rôle pour accéder à d’autres ressources Azure. La section Créer une connexion de service sans mot de passe de cet article montre comment Service Connector simplifie le processus de connexion.
L’application web utilise la classe DefaultAzureCredential de la bibliothèque cliente Python Azure Identity pour détecter automatiquement lorsqu’une identité managée existe et l’utilise pour accéder aux autres ressources.
Prerequisites
Un abonnement Azure avec des autorisations d’attribution de rôle et d’écriture pour les ressources du didacticiel, dans une région Azure qui prend en charge Service Connector et dispose d’un App Service support et quota suffisants.
Azure Cloud Shell pour exécuter les étapes du didacticiel, ou si vous préférez exécuter localement :
Configurer votre environnement
Inscrivez les fournisseurs de ressources
Microsoft.ServiceLinkeretMicrosoft.DBforPostgreSQLpour votre abonnement.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstallez la dernière version de l’extension sans mot de passe Service Connector. Le
--upgradeparamètre met à jour l’extension si elle est déjà installée :az extension add --name serviceconnector-passwordless --upgrade
Clonage de l’exemple d’application
Important
Le dépôt d’échantillons du tutoriel a été archivé le 15 juin 2026 et n’est plus maintenu activement. Utilisez-le uniquement pour compléter ce tutoriel.
Clonez l’exemple de référentiel d’application.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitSinon, vous pouvez télécharger l’application depuis le dépôt serviceconnector-webapp-postgresql-django-passwordless et la décompresser dans un dossier appelé serviceconnector-webapp-postgresql-django-passwordless.
Accédez au répertoire dans le dossier du dépôt en utilisant
cd serviceconnector-webapp-postgresql-django-passwordlesset exécutez toutes les commandes restantes depuis ce dossier.
Dans l’application d’exemple, les paramètres de production de l’application web se trouvent dans le fichier azureproject/production.py . Les paramètres de développement sont dans Azureproject/settings.py. Les paramètres de production configurent Django pour qu’ils s’exécutent dans n’importe quel environnement de production et ne sont pas spécifiques à App Service.
L’application utilise des paramètres de production lorsque la WEBSITE_HOSTNAME variable d’environnement est définie. App Service définit cette variable au nom d’hôte de l’application, comme msdocs-django.azurewebsites.net.
Pour plus d’informations, consultez la liste de contrôle de déploiement Django. Consultez également Paramètres de production pour Django sur Azure.
Définir les variables d’environnement initiales
Le code suivant définit les variables d’environnement nécessaires pour ce didacticiel.
-
LOCATIONdoit être une région Azure où votre abonnement dispose d'un quota suffisant pour créer les ressources et ne limite pas Azure Database pour PostgreSQL pour votre abonnement. - Le mot de passe administrateur de PostgreSQL doit contenir de 8 à 128 caractères provenant d’au moins trois de ces catégories : lettres majuscules, minuscules, chiffres et caractères non alphanumériques. N’utilisez
$pas le mot de passe de ce tutoriel.
Configurez les variables d’environnement suivantes, en les remplaçant
<region>par une valeur valide :LOCATION="<region>" RAND_ID=$RANDOM$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" DATABASE_NAME="restaurant" STORAGE_ACCOUNT_NAME="account$RAND_ID" ADMIN_USER="demoadmin"Lisez le mot de passe administrateur PostgreSQL sans l’afficher ni l’ajouter à l’historique de votre shell :
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoCréez un groupe de ressources pour contenir toutes les ressources du projet. Le nom du groupe de ressources est mis en cache et appliqué automatiquement aux commandes suivantes.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Déployer le code d’application sur App Service
Créez l’hôte de l’application dans App Service, activez l’automatisation des builds, puis déployez le code d’exemple de l’application. Le plan App Service de base (B1) utilisé dans ce tutoriel entraîne un coût dans votre abonnement Azure. Pour les prix actuels, voir Prix des services d’applications.
Le fichier requirements.txt de l’échantillon archivé ne déclare pas le serveur Gunicorn utilisé par start.sh. Ajoutez-le à votre copie locale s’il n’est pas déjà présent :
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtCréez un plan de service d’applications Linux dans la catégorie tarifaire Basic (B1), puis créez l’application web avec la commande de démarrage de l’exemple :
az appservice plan create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_PLAN_NAME \ --location $LOCATION \ --sku B1 \ --is-linux az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --runtime "PYTHON:3.14" \ --startup-file "start.sh"Activez l’automatisation de la construction des services d’applications afin que le déploiement installe les paquets dans requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueDepuis la racine du référentiel, créez un fichier ZIP de l’application d’exemple et déployez-le en utilisant az webapp deploy :
rm -f app.zip python -m zipfile -c app.zip * az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --src-path app.zip \ --type zip \ --track-status false rm app.zipLa commande de déploiement réussit lorsque App Service accepte le fichier ZIP. La compilation se poursuit dans App Service et peut prendre plusieurs minutes.
Créer la base de données PostgreSQL dans Azure
Créez un serveur flexible et une base de données Azure Database pour PostgreSQL pour stocker les données de l’application.
Créer la base de données Azure Database pour PostgreSQL Server :
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledLa commande réussit lorsque l’état de provisionnement du serveur flexible PostgreSQL est
Succeeded.Retirez le mot de passe administrateur du shell actuel après la création du serveur :
unset ADMIN_PWCréez la base de données à l’aide de az postgres flexible-server db create :
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Créer une connexion de service sans mot de passe
Utilisez az-webapp connection create postgres-flexible pour ajouter un connecteur de service qui connecte l’application web Azure à la base de données PostgreSQL en utilisant une authentification d’identité gérée sans mot de passe. La commande suivante configure Azure Database pour PostgreSQL pour utiliser l’identité managée et Azure contrôle d’accès en fonction du rôle. La sortie de commande répertorie les actions effectuées par Service Connector.
La commande crée un paramètre d’application nommé AZURE_POSTGRESQL_CONNECTIONSTRING qui contient les informations de connexion à la base de données. L’exemple indique ce paramètre dans azureproject/production.py. Pour plus d’informations, consultez Variables d’environnement Access.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database $DATABASE_NAME \
--client-type python \
--system-identity \
--yes
La connexion est prête lorsque la commande rapporte la connexion serveur flexible PostgreSQL et crée le paramètre de l’application AZURE_POSTGRESQL_CONNECTIONSTRING .
Connectez l’application web Django à stockage Azure avec Service Connector
Créez un compte de stockage Azure, puis utilisez la connexion web d’az-webapp Create Storage-blob pour le connecter à l’application web. La commande de connexion effectue les actions suivantes :
- Active l’identité managée affectée par le système sur l’application web.
- Ajoute l’application web avec le rôle Storage Blob Data Contributor au compte de stockage.
- Configure le réseau de compte de stockage pour accepter l’accès à partir de l’application web.
- Crée une variable d’environnement nommée
AZURE_STORAGEBLOB_RESOURCEENDPOINTpour le compte stockage Azure.
Créer un compte de stockage Azure
Créez un compte de stockage v2 polyvalent avec un stockage localement redondant :
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Créer une connexion de stockage sans mot de passe
Créez la connexion sans mot de passe au compte de stockage :
az webapp connection create storage-blob \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--account $STORAGE_ACCOUNT_NAME \
--client-type python \
--system-identity
La connexion est prête lorsque la commande signale la connexion au compte de stockage et crée le paramètre de l’application AZURE_STORAGEBLOB_RESOURCEENDPOINT .
Configurez le conteneur de photos d’exemple
Mettez à jour le compte stockage Azure pour permettre l’accès public en lecture aux blobs de cette application d’exemple archivée.
Remarque
Cet échantillon archivé utilise des URL directes de blob pour afficher les photos. Le didacticiel active donc l’accès anonyme en lecture sur le conteneur
photos. Ce paramètre est spécifique à l’échantillon et n’est pas requis par Service Connector. Pour les applications de production, gardez les conteneurs privés et utilisez une méthode de livraison contrôlée, comme un point d’accès authentifié.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueAttribuez à votre utilisateur connecté la permission de créer le conteneur en utilisant l’authentification Microsoft Entra :
SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv) STORAGE_ACCOUNT_ID=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query id \ --output tsv) MSYS_NO_PATHCONV=1 az role assignment create \ --assignee-object-id $SIGNED_IN_USER_ID \ --assignee-principal-type User \ --role "Storage Blob Data Contributor" \ --scope $STORAGE_ACCOUNT_IDLe réglage
MSYS_NO_PATHCONVde cette commande empêche Git Bash sur Windows de convertir l’identifiant de ressource Azure en chemin Windows. Cela n’a aucun effet dans Azure Cloud Shell ou d’autres environnements Bash. Les attributions de rôles peuvent prendre quelques minutes avant de devenir efficaces.Utilisez la création du conteneur de stockage az pour créer un conteneur appelé
photoset permettre un accès anonyme en lecture aux blobs de ce conteneur :BLOB_ENDPOINT=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query primaryEndpoints.blob \ --output tsv) az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINTLe conteneur est prêt lorsque la réponse apparaît
"created": truepour lephotosconteneur.
Tester l’application web Python dans Azure
Ouvrez et testez l’application web Azure Restaurant Review. L’application utilise le package azure.identity et sa DefaultAzureCredential classe. Lorsque l’application s’exécute dans Azure, le DefaultAzureCredential détecte automatiquement lorsqu’une identité managée existe pour App Service et l’utilise pour accéder aux ressources stockage Azure et Azure Database pour PostgreSQL. L’application n’a pas besoin de fournir des clés de stockage, des certificats ou des informations d’identification pour accéder à ces ressources.
Pour une installation Azure CLI locale, vous pouvez utiliser
az webapp browsepour ouvrir l’application dans votre navigateur par défaut :az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell ne peut pas ouvrir un navigateur local. Il ne prend donc pas en charge la commande
az webapp browse. Depuis Cloud Shell, sélectionnez le lien Domaine par défaut en haut à droite de la page du portail Azure de l'application.
Le démarrage de l’application peut prendre une minute ou deux. Si vous voyez une page d’application par défaut qui n’est pas l’exemple d’application, attendez une minute et actualisez le navigateur.
Testez les fonctionnalités de l’exemple d’application en ajoutant un restaurant et quelques avis avec des photos. L’application doit ressembler à la capture d’écran suivante :
Nettoyer les ressources
Pour éviter les frais en cours, vous pouvez supprimer les ressources que vous avez créées pour ce didacticiel en supprimant le groupe de ressources qui les contient. Veillez à ne plus avoir besoin de l’application ou des ressources avant d’exécuter la commande.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
La commande revient immédiatement tandis qu’Azure supprime les ressources.
Résolution des problèmes
Si l'application ne démarre pas ou ne se connecte pas à ses ressources, vérifiez les journaux de déploiement des services d'applications, confirmez que les paramètres de l'AZURE_POSTGRESQL_CONNECTIONSTRINGapplication and AZURE_STORAGEBLOB_RESOURCEENDPOINT existent, et laissez quelques minutes pour que les attributions de rôles Azure prennent effet. Pour les problèmes de démarrage d’applications Python, voir l’article suivant :