Tutoriel : Connecter une application web Django à Azure Database pour PostgreSQL via Service Connector

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 :

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 :

    1. Installez Azure CLI 2.87.0 ou une version ultérieure. Pour vérifier votre version, exécutez az version. Pour effectuer la mise à niveau, exécutez az upgrade.
    2. Installez Python 3.
    3. Installez Git.
    4. Connectez-vous à Azure à l’aide de az login et suivez les invites.

Configurer votre environnement

  1. Inscrivez les fournisseurs de ressources Microsoft.ServiceLinker et Microsoft.DBforPostgreSQL pour votre abonnement.

    az provider register --namespace Microsoft.ServiceLinker
    az provider register --namespace Microsoft.DBforPostgreSQL
    
  2. Installez la dernière version de l’extension sans mot de passe Service Connector. Le --upgrade paramè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.

  1. Clonez l’exemple de référentiel d’application.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Sinon, 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.

  2. Accédez au répertoire dans le dossier du dépôt en utilisant cd serviceconnector-webapp-postgresql-django-passwordless et 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.

  • LOCATION doit ê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.
  1. 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"
    
  2. 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 && echo
    
  3. Cré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.

  1. 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.txt
    
  2. Cré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"
    
  3. 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=true
    
  4. Depuis 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.zip
    

    La 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.

  1. 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 Enabled
    

    La commande réussit lorsque l’état de provisionnement du serveur flexible PostgreSQL est Succeeded.

  2. Retirez le mot de passe administrateur du shell actuel après la création du serveur :

    unset ADMIN_PW
    
  3. Cré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_RESOURCEENDPOINT pour 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

  1. 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 true
    
  2. Attribuez à 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_ID
    

    Le réglage MSYS_NO_PATHCONV de 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.

  3. Utilisez la création du conteneur de stockage az pour créer un conteneur appelé photos et 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_ENDPOINT
    

    Le conteneur est prêt lorsque la réponse apparaît "created": true pour le photos conteneur.

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 browse pour ouvrir l’application dans votre navigateur par défaut :

    az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
    
  • Azure 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 :

Capture d’écran de l’application web d’avis de restaurant montrant une entrée de restaurant avec un avis client et une photo téléchargée.

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 :