Partager via


Tutoriel : Connecter une application web Django à Azure PostgreSQL à l’aide de 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.30.0 ou version ultérieure. Pour vérifier votre version, exécutez az --version. Pour effectuer la mise à niveau, exécutez az upgrade.
    2. Connectez-vous à Azure à l’aide de az login et suivez les invites.

Configurer votre environnement

  1. Vérifiez que votre abonnement est inscrit pour utiliser les fournisseurs de ressources Microsoft.ServiceLinker et Microsoft.DBforPostgreSQL. Si ce n’est pas le cas, exécutez az provider register -n Microsoft.[name of service] pour inscrire les fournisseurs.

  2. Installez les extensions Azure CLI suivantes :

    az extension add --name serviceconnector-passwordless --upgrade
    az extension add --name rdbms-connect
    

Clonage de l’exemple d’application

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

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

    Vous pouvez également télécharger l’application à partir de https://github.com/Azure-Samples/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’exemple d’application, les paramètres de production de l’application web se trouvent dans le fichier azuresite/production.py . Les paramètres de développement se trouvent dans azuresite/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. Pour les chaînes de connexion Azure Postgres, App Service définit automatiquement cette variable sur l’URL de l’application web, telle que https://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.
  • La ADMIN_PW doit contenir 8 à 128 caractères dans au moins trois des quatre catégories : majuscules, lettres minuscules, chiffres et caractères non alphanumériques, à l’exclusion de $.
  1. Configurez les variables d’environnement suivantes, en remplaçant les emplacements réservés <region> et <database password> par des valeurs valides.

    LOCATION="<region>"
    RAND_ID=$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    ADMIN_USER="demoadmin"
    ADMIN_PW="<database password>"
    
  2. 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 d’application dans App Service et déployez l’exemple de code d’application sur cet hôte. La az webapp up commande effectue les actions suivantes :

  • Crée un plan App Service dans le niveau tarifaire de base (B1).
  • Crée l’application App Service.
  • Active la journalisation par défaut de l’application.
  • Télécharge le référentiel à l'aide du déploiement ZIP, avec l'automatisation de la construction activée.
  • Génère l’application.

Dans le code, le sku définit le processeur, la mémoire et le coût du plan de service d'application. Le plan de service de base (B1) entraîne un petit coût dans votre abonnement Azure. Vous pouvez omettre le --sku paramètre pour utiliser la référence SKU par défaut, généralement P1v3 (Premium v3). Pour obtenir la liste complète des plans App Service, consultez la tarification d’App Service.

  1. À partir du dossier du dépôt serviceconnector-webapp-postgresql-django-passwordless, exécutez la commande suivante az webapp up :

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.10 \
      --sku B1
    

    Remarque

    Le déploiement prend quelques minutes, et la commande peut se figer ou expirer, en particulier avec un SKU de base. Une fois l’application générée avec succès et que la sortie s’affiche Starting the site, vous pouvez quitter la commande en sélectionnant Ctrl+C.

  2. Configurez l’application pour utiliser le dépôt start.sh fichier en exécutant la commande az webapp config set .

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Créer la base de données Postgres dans Azure

Créez la base de données Azure Database pour PostgreSQL pour stocker les informations d’application. La commande az postgres flexible-server create crée un serveur flexible Azure Database pour PostgreSQL dans le groupe de ressources spécifié qui a :

  • Nom du serveur spécifié dans le --name paramètre. Le nom doit être unique dans toutes les Azure.
  • Référence SKU spécifiée dans le --sku-name paramètre.
  • Nom d’utilisateur et mot de passe du compte d’administrateur spécifiés dans les paramètres --admin-user et --admin-password.
  1. Créez le serveur Azure Database pour PostgreSQL. Si vous êtes invité à activer l’accès à l’adresse IP du client actuel, entrez y pour 'oui'.

    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
    
  2. Si vous n’êtes pas invité à activer l’accès à votre adresse IP cliente actuelle, configurez une règle de pare-feu sur votre serveur avec la commande az postgres flexible-server firewall-rule create . Cette règle permet à votre environnement local d’accéder au serveur.

    IP_ADDRESS=<your IP address>
    az postgres flexible-server firewall-rule create \
       --resource-group $RESOURCE_GROUP_NAME \
       --name $DB_SERVER_NAME \
       --rule-name AllowMyIP \
       --start-ip-address $IP_ADDRESS \
       --end-ip-address $IP_ADDRESS
    

    Conseil / Astuce

    Utilisez n’importe quel outil ou site web qui affiche votre adresse IP pour remplacer <your IP address> dans la commande. Par exemple, vous pouvez utiliser Qu’est-ce que mon adresse IP ?.

  3. Créez une base de données nommée restaurant dans le serveur à l’aide de la commande az postgres flexible-server execute .

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

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 Postgres à l’aide de l’authentification d’identité managé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 une variable d’environnement nommée AZURE_POSTGRESQL_CONNECTIONSTRING qui fournit les informations de connexion de base de données pour l’application. Le code de l’application accède aux variables d’environnement d’application avec des instructions telles que os.environ.get('AZURE_POSTGRESQL_HOST'). 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 restaurant \
  --client-type python \
  --system-identity

Créer et se connecter à un compte de stockage

Utilisez az webapp connection create storage-blob pour créer un compte de stockage Azure et un connecteur de service. La commande 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 de Contributeur de données Blob de stockage au nouveau 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.
  1. Exécutez la commande suivante pour créer le compte de stockage et la connexion :

    STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \
      --new true \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --client-type python \
      --system-identity \
      --query configurations[].value \
      --output tsv)
    STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
    
  2. Mettez à jour le compte de stockage pour permettre l'accès public aux blobs, afin que les utilisateurs de l'application puissent accéder aux photos.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  3. Utilisez az storage container create pour créer un conteneur appelé photos dans le compte de stockage et autoriser l’accès en lecture public anonyme aux objets blob dans le nouveau conteneur.

    # Set the BLOB_ENDPOINT variable
    BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g')
    echo $BLOB_ENDPOINT
    
    # Create the storage container using the BLOB_ENDPOINT variable
    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --auth-mode login \
      --blob-endpoint $BLOB_ENDPOINT
    

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.azurewebsites.net --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. À partir de Cloud Shell, le moyen le plus simple d'ouvrir l'application web consiste à sélectionner le domaine Default 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 :

Screenshot de l’exemple d’application montrant les fonctionnalités de révision des restaurants à l’aide d’App Service, Azure Database pour PostgreSQL et stockage Azure.

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 suppression de toutes les ressources peut prendre un certain temps. L’argument --no-wait permet à la commande de retourner immédiatement.

Résolution des problèmes

Si vous rencontrez des problèmes lors de l’exécution de ce didacticiel, consultez les ressources suivantes :