Partager via


Tutoriel : Utilisation de Service Connector pour créer une application Django avec Postgres sur Azure App Service

Remarque

Dans ce tutoriel, vous utilisez le Connecteur de services pour connecter une application web à un service de base de données. Ce tutoriel est une modification du didacticiel App Service, ce qui vous permet de voir des similitudes. Consultez la section Créer un connecteur sans mot de passe à la base de données Postgres pour voir où Service Connector entre en jeu et simplifie le processus de connexion donné dans le didacticiel App Service.

Ce didacticiel montre comment déployer une application web pilotée par les données Python Django sur Azure App Service et la connecter à une base de données Azure Database for PostgreSQL serveur flexible.

Dans ce tutoriel, vous utilisez le Azure CLI pour effectuer les tâches suivantes :

  • Configurez votre environnement initial avec Python et le Azure CLI
  • Créer une base de données de serveur flexible Azure Database for PostgreSQL
  • Déployer du code sur Azure App Service et se connecter au serveur flexible PostgreSQL
  • Mettre à jour votre code et effectuer un redéploiement
  • Afficher les journaux de diagnostic
  • Gérer l’application web dans le portail Azure

Configurer votre environnement initial

Lancez à partir de Azure Cloud Shell dans le portail Azure et installez l’extension sans mot de passe du connecteur de service pour le Azure CLI.

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

Cloner ou télécharger l’exemple d’application

Clonez l’exemple de dépôt :

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

Accédez au dossier suivant :

cd serviceconnector-webapp-postgresql-django-passwordless

Dans ce tutoriel, vous déployez une application web Django sur Azure App Service. L’application web utilise une identité managée assignée par le système (connexions sans mot de passe) avec le contrôle d'accès basé sur les rôles Azure pour accéder aux ressources Azure Storage et Azure Database for PostgreSQL - Flexible Server. Le code utilise la classe DefaultAzureCredential de la bibliothèque cliente Azure Identity pour Python. La classe DefaultAzureCredential détecte automatiquement qu’une identité managée existe pour App Service et l’utilise pour accéder à d’autres ressources Azure.

  • Les paramètres de production se trouvent dans le fichier azuresite/production.py . Les paramètres de développement se trouvent dans azuresite/settings.py.
  • L’application utilise des paramètres de production lorsque la WEBSITE_HOSTNAME variable d’environnement est définie. Azure App Service définit automatiquement cette variable sur l’URL de l’application web, telle que msdocs-django.azurewebsites.net.

Les paramètres de production sont propres à la configuration de Django pour s’exécuter dans n’importe quel environnement de production. Ils ne sont pas propres à App Service. Pour plus d’informations, consultez la liste de contrôle de déploiement Django. Consultez également Paramètres de production pour Django sur Azure pour plus d’informations sur certaines des modifications.

Vous rencontrez des problèmes ? Faites-le nous savoir.

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

  1. Configurez les variables d’environnement nécessaires pour le tutoriel.

    LOCATION="eastus"
    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="{your database password}"
    

    Important

    Le ADMIN_PW doit contenir entre 8 et 128 caractères de trois des catégories suivantes : Lettres majuscules, lettres minuscules, chiffres et caractères non alphanumériques. Lorsque vous créez des noms d’utilisateur ou des mots de passe, n’utilisez pas le caractère $. Plus tard, vous créez des variables d’environnement avec ces valeurs où le caractère $ a une signification spécifique dans le conteneur Linux utilisé pour exécuter des applications Python.

  2. Créez un groupe de ressources (vous pouvez modifier le nom, le cas échéant). 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
    
  3. Créez le serveur de base de données. Si vous êtes invité à activer l’accès à l’adresse IP du client actuel, tapez y oui. Ce processus prend quelques minutes :

    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
      --active-directory-auth Enabled
    

    Si la commande az n'est pas reconnue, vérifiez que le Azure CLI est installé comme décrit dans Set up your initial environment.

    La commande az postgres flexible-server create effectue les actions suivantes, qui prennent quelques minutes :

    • Créez un groupe de ressources par défaut s’il n’existe pas déjà de nom mis en cache.
    • Créez un serveur flexible PostgreSQL :
      • Avec le nom du serveur spécifié avec le --name paramètre. Le nom doit être unique dans toutes les Azure.
      • Avec la référence SKU spécifiée avec le --sku-name paramètre.
    • Créez un compte d’administrateur avec un nom d’utilisateur et un mot de passe spécifiés par les paramètres --admin-user et --admin-password.
    • Créez une base de données dont le nom est spécifié par le paramètre --database-name.
  4. Configurez une règle de pare-feu sur votre serveur à l’aide de la commande az postgres flexible-server firewall-rule create. Cette règle permet à votre environnement local d’accéder au serveur. (Si vous avez été invité à activer l’accès à partir de votre adresse IP cliente à l’étape précédente, vous pouvez ignorer cette étape.)

    IP_ADDRESS=<your IP>
    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
    

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

  5. Créez une base de données nommée restaurant à 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;'
    

Déployer le code sur Azure App Service

Dans cette section, vous allez créer un hôte d’application dans l’application App Service, connecter cette application à la base de données Postgres, puis déployer votre code sur cet hôte.

Créer l’application App Service

  1. Dans le terminal, vérifiez que vous êtes dans le dossier du référentiel serviceconnector-webapp-postgresql-django-passwordless qui contient le code de l’application.

  2. Exécutez la commande suivante az webapp up pour créer l’hôte App Service pour l’application :

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

    La référence sku définit la taille (UC, mémoire) et le coût du plan App Service. Le plan de service B1 (de base) entraîne un petit coût dans votre abonnement Azure. Pour obtenir la liste complète des plans App Service, consultez la page de Tarification App Service.

    Cette commande effectue les actions suivantes, qui peuvent prendre quelques minutes, à l’aide du groupe de ressources et de l’emplacement mis en cache à partir de la commande précédente az group create (le groupe $RESOURCE_GROUP_NAME dans la eastus région dans cet exemple).

    • Créez un plan App Service dans le niveau tarifaire De base (B1). Vous pouvez omettre --sku pour utiliser les valeurs par défaut.
    • Créez l’application App Service.
    • Activez la journalisation par défaut pour l'application.
    • Charger le dépôt via le déploiement ZIP avec l’automatisation de la compilation activée.
  3. Configurez App Service pour utiliser le start.sh dans le référentiel avec 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 un connecteur sans mot de passe pour la base de données Postgres

Avec le code maintenant déployé sur App Service, l’étape suivante consiste à connecter l’application à la base de données Postgres dans Azure. Le code de l’application s’attend à trouver des informations de base de données dans une variable d’environnement nommée AZURE_POSTGRESQL_CONNECTIONSTRING pour le serveur flexible PostgreSQL et une variable d’environnement nommée AZURE_STORAGEBLOB_RESOURCEENDPOINT pour Azure Storage compte.

Les commandes Service Connector configurent les ressources Azure Storage et Azure Database for PostgreSQL pour utiliser l’identité gérée et le contrôle d’accès basé sur les rôles d’Azure. Les commandes créent des paramètres d’application dans App Service, les quels connectent votre application web à ces ressources. La sortie des commandes répertorie les actions du connecteur de service effectuées pour activer la fonctionnalité sans mot de passe.

Ajoutez un connecteur de service PostgreSQL en utilisant la commande az webapp connection create postgres-flexible. L’identité managée affectée par le système est utilisée pour authentifier l’application web sur la ressource cible, PostgreSQL dans ce cas.

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

Remarque

Si vous voyez le message d’erreur « L’abonnement n’est pas inscrit pour utiliser Microsoft.ServiceLinker », exécutez az provider register -n Microsoft.ServiceLinker pour inscrire le fournisseur de ressources Service Connector et réexécutez la commande de connexion.

Dans votre code Python, vous accédez à ces paramètres en tant que variables d’environnement avec des instructions telles que os.environ.get('AZURE_POSTGRESQL_HOST'). Pour plus d’informations, consultez Variables d’environnement Access.

Vous rencontrez des problèmes ? Consultez d’abord le Guide de résolution des problèmes ; autrement, faites-le nous savoir.

Créer un compte de stockage et s’y connecter

  1. Utilisez la commande az webapp connection create storage-blob pour créer un compte de stockage et un connecteur de service qui effectue les configurations suivantes :
  • Active l’identité managée affectée par le système sur l’application web

  • Ajoute l'application web avec le rôle Contributeur de données Blob de stockage au compte de stockage nouvellement créé.

  • Configurez le réseau du compte de stockage pour accepter l’accès à partir de l’application web.

    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))
    
  1. Mettez à jour le compte de stockage Blob pour permettre aux utilisateurs de l'application de restaurant d’accéder aux images.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Créez un conteneur appelé photos dans le compte de stockage avec la commande az storage container create . Autorisez l’accès en lecture anonyme (public) aux blobs dans le conteneur nouvellement créé.

    # 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

L’exemple d’application Python utilise le package azure.identity et sa classe DefaultAzureCredential. Lorsque l’application s’exécute dans Azure, DefaultAzureCredential détecte automatiquement si une identité managée existe pour App Service et, le cas échéant, l’utilise pour accéder à d’autres ressources Azure (stockage et PostgreSQL dans ce cas). Pour accéder à ces ressources, il est inutile de fournir des clés de stockage, des certificats ou des informations d’identification à App Service.

  1. Accédez à l’application déployée à l’URL http://$APP_SERVICE_NAME.azurewebsites.net.

    Le démarrage de l’application peut prendre une minute ou deux. Si une page d’application par défaut s’affiche alors qu’il ne s’agit pas de la page de l’exemple d’application par défaut, attendez une minute et actualisez le navigateur.

  2. Testez les fonctionnalités de l’exemple d’application en ajoutant un restaurant et quelques revues avec des photos pour le restaurant. Le restaurant et les informations de révision sont stockées dans Azure Database for PostgreSQL et les photos sont stockées dans Azure Storage. Voici une capture d’écran :

    Screenshot de l’exemple d’application montrant les fonctionnalités de révision des restaurants à l’aide de Azure App Service, Azure base de données PostgreSQL et Azure Storage.

Nettoyer les ressources

Si vous souhaitez conserver l’application ou continuer à suivre d’autres didacticiels, passez aux étapes suivantes. Autrement, pour éviter des frais récurrents, supprimez le groupe de ressources créé pour ce tutoriel :

az group delete --name $RESOURCE_GROUP_NAME --no-wait

En supprimant le groupe de ressources, vous désallouez et supprimez également toutes les ressources qu’il contient. Vérifiez bien que vous n’avez plus besoin des ressources du groupe avant d’exécuter la commande.

La suppression de toutes les ressources peut prendre un certain temps. L’argument --no-wait permet à la commande de retourner immédiatement.

Vous rencontrez des problèmes ? Faites-le nous savoir.

Étape suivante