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.
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_HOSTNAMEvariable d’environnement est définie. Azure App Service définit automatiquement cette variable sur l’URL de l’application web, telle quemsdocs-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
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_PWdoit 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.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 $LOCATIONCréez le serveur de base de données. Si vous êtes invité à activer l’accès à l’adresse IP du client actuel, tapez
youi. 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 EnabledSi la commande
azn'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
--nameparamètre. Le nom doit être unique dans toutes les Azure. - Avec la référence SKU spécifiée avec le
--sku-nameparamètre.
- Avec le nom du serveur spécifié avec le
- Créez un compte d’administrateur avec un nom d’utilisateur et un mot de passe spécifiés par les paramètres
--admin-useret--admin-password. - Créez une base de données dont le nom est spécifié par le paramètre
--database-name.
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_ADDRESSUtilisez 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 ?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
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.
Exécutez la commande suivante
az webapp uppour 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 B1La 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_NAMEdans laeastusrégion dans cet exemple).- Créez un plan App Service dans le niveau tarifaire De base (B1). Vous pouvez omettre
--skupour 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.
- Créez un plan App Service dans le niveau tarifaire De base (B1). Vous pouvez omettre
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
- 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))
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-accessCréez un conteneur appelé
photosdans 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.
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.
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 :
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.