Déployer une application web Python Django avec PostgreSQL dans Azure
Dans ce tutoriel, vous allez déployer une application web Python pilotée par les données (Django) sur Azure App Service avec le service de base de données relationnelle Azure Database pour PostgreSQL. Azure App Service prend en charge Python dans un environnement serveur Linux. Si vous le souhaitez, consultez le didacticiel Flask ou le didacticiel FastAPI à la place.
Dans ce tutoriel, vous allez apprendre à :
- Créer une architecture App Service, PostgreSQL et Cache Redis sécurisée par défaut.
- Sécuriser les secrets de connexion à l’aide d’une identité managée et de références Key Vault.
- Déployer un exemple d’application Python sur App Service à partir d’un référentiel GitHub.
- Accéder aux chaînes de connexion App Service et aux paramètres d’application dans le code de l’application.
- Effectuer des mises à jour, et redéployer le code de l’application.
- Générer des schémas de base de données en exécutant des migrations de base de données.
- Diffuser des journaux de diagnostic à partir d’Azure.
- Gérer l’application dans le portail Azure.
- Approvisionner la même architecture et la déployer à l’aide d’Azure Developer CLI.
- Optimiser votre workflow de développement avec GitHub Codespaces et GitHub Copilot.
Prérequis
- Compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
- Un compte GitHub. Vous pouvez aussi en obtenir un gratuitement.
- Connaissance de Python avec le développement Django.
- (Facultatif) Pour essayer GitHub Copilot, un compte GitHub Copilot. Un essai gratuit de 30 jours est disponible.
- Compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
- Azure Developer CLI installé. Vous pouvez suivre les étapes avec Azure Cloud Shell, car Azure Developer CLI est déjà installé.
- Connaissance de Python avec le développement Django.
- (Facultatif) Pour essayer GitHub Copilot, un compte GitHub Copilot. Un essai gratuit de 30 jours est disponible.
Passer à la fin
Si vous souhaitez simplement voir l’exemple d’application dans ce tutoriel s’exécutant dans Azure, exécutez simplement les commandes suivantes dans Azure Cloud Shell, puis suivez l’invite :
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
1. Exécution de l'exemple
Tout d’abord, vous configurez un exemple d’application pilotée par les données comme point de départ. Pour plus de commodité, l’exemple de référentiel inclut une configuration de conteneur de développement. Le conteneur de développement dispose de tout ce dont vous avez besoin pour développer une application, notamment la base de données, le cache et toutes les variables d’environnement nécessaires par l’exemple d’application. Le conteneur de développement peut s’exécuter dans un codespace GitHub, ce qui signifie que vous pouvez exécuter l’exemple sur n’importe quel ordinateur avec un navigateur web.
Remarque
Si vous suivez ce tutoriel avec votre propre application, consultez la description du fichier requirements.txt dans README.md pour voir les packages dont vous aurez besoin.
Étape 1 : Dans une nouvelle fenêtre de navigateur :
- Connectez-vous à votre compte GitHub.
- Accédez à https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Désélectionnez Copier la branche principale uniquement. Vous voulez toutes les branches.
- Sélectionnez Créer la duplication.
Étape 2 : dans la fourche GitHub :
- Sélectionnez principal>starter-no-infra pour la branche de démarrage. Cette branche contient uniquement l’exemple de projet et aucun fichier ou configuration lié à Azure.
- Sélectionnez Code>Créer un codespace sur starter-no-infra.
L’espace de code prend quelques minutes à configurer, et il exécute
pip install -r requirements.txt
pour votre référentiel à la fin. En outre, le fichier .env fourni contient déjà une variableSECRET_KEY
factice que Django doit exécuter localement.
Étape 3 : Dans le terminal codespace :
- Exécutez des migrations de base de données avec
python manage.py migrate
. - Exécutez l’application avec
python manage.py runserver
. - Lorsque la notification
Your application running on port 8000 is available.
s’affiche, sélectionnez Ouvrir dans le navigateur. Vous devez voir l’exemple d’application dans un nouvel onglet du navigateur. Pour arrêter l’application, tapezCtrl
+C
.
Conseil
Vous pouvez interroger GitHub Copilot à propos de ce référentiel. Par exemple :
- @workspace Que fait ce projet ?
- @workspace Que fait le dossier .devcontainer ?
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
2. Créer l’App Service, la base de données et le cache
Dans cette étape, vous créez les ressources Azure. La procédure indiquée dans ce tutoriel permet de créer un ensemble de ressources sécurisées par défaut qui incluent App Service, Azure DB pour PostgreSQL et Azure Cache. Pour le processus de création, vous devez spécifier :
- Le nom de l’application web. Il est utilisé dans le cadre du nom DNS de votre application sous la forme
https://<app-name>-<hash>.<region>.azurewebsites.net
. - La Région du monde où l’application sera physiquement exécutée. Il est également utilisé dans le cadre du nom DNS de votre application.
- La Pile du runtime de l’application. C’est là que vous sélectionnez la version de Python à utiliser pour votre application.
- Le Plan d’hébergement de l’application. Il s’agit du niveau tarifaire qui inclut l’ensemble des fonctionnalités et la scalabilité de l’application.
- Le groupe de ressources pour l’application. Un groupe de ressources vous permet de regrouper (dans un conteneur logique) toutes les ressources Azure nécessaires à l’application.
Connectez-vous au portail Azure et procédez comme suit pour créer vos ressources Azure App Service.
Étape 1 : Dans le Portail Azure :
- Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
- Sélectionnez l’élément intitulé Application web + Base de données sous le titre Place de marché. Vous pouvez également accéder directement à l’Assistant de création.
Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.
- Groupe de ressources : sélectionnez Créer et utilisez le nom msdocs-django-postgres-tutorial.
- Région : toute région Azure près de chez vous.
- Nom : msdocs-python-postgres-XYZ.
- Runtime stack : Python 3.12.
- Base de données : PostgreSQL : serveur Flexible est sélectionné par défaut comme moteur de base de données. Les noms du serveur et de la base de données sont aussi définis par défaut sur les valeurs appropriées.
- Ajouter Azure Cache pour Redis : Oui.
- Nom du plan d’hébergement : Basic. Une fois que vous êtes prêt, vous pouvez effectuer un scale-up vers un niveau tarifaire de production.
- Sélectionnez Revoir + créer.
- Une fois la validation terminée, sélectionnez Créer.
Étape 3 : Le déploiement prend quelques minutes. Une fois le déploiement terminé, sélectionnez le bouton Accéder à la ressource. L’application App Service s’ouvre automatiquement, mais les ressources suivantes sont créées :
- Groupe de ressources : conteneur pour toutes les ressources créées.
- Plan App Service : définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau De base.
- App Service : représente votre application et s’exécute dans le plan App Service.
- Réseau virtuel : intégré à l’application App Service, isole le trafic réseau principal.
- Point de terminaison privé : point de terminaison d’accès au cache Redis dans le réseau virtuel.
- Interfaces réseau : représente les adresses IP privées, une pour chacun des points de terminaison privés.
- Azure Database pour PostgreSQL – Serveur flexible : accessible uniquement à partir du réseau virtuel. Une base de données et un utilisateur sont créés pour vous sur le serveur.
- Azure Cache pour Redis : accessible uniquement derrière son réseau privé.
- Zones DNS privées : active la résolution DNS du serveur de base de données et du cache Redis dans le réseau virtuel.
3. Sécuriser les secrets de connexion et ajouter SECRET_KEY
L’assistant de création a généré les variables de connectivité pour vous déjà en tant que paramètres d’application. Toutefois, la meilleure pratique de sécurité consiste à éliminer complètement les secrets d’App Service. Vous allez déplacer vos secrets vers un coffre de clés et modifier votre paramètre d’application sur Références Key Vault à l’aide des connecteurs de services.
Étape 1 : Récupérer la chaîne de connexion existante
- Dans le menu de gauche de la page App Service, sélectionnez Paramètres > Variables d’environnement.
- Sélectionnez AZURE_POSTGRESQL_CONNECTIONSTRING.
- Dans Ajouter/modifier le paramètre d’application, dans le champ Valeur, recherchez la partie Password= à la fin de la chaîne.
- Copiez la chaîne de mot de passe après password= pour une utilisation ultérieure.
Ces paramètres d’application vous permettent de vous connecter à une base de données Postgres et un cache Redis sécurisés derrière des points de terminaison privés. Toutefois, les secrets sont enregistrés directement dans l’application App Service, ce qui n’est pas le meilleur. Vous allez changer ça. En outre, vous allez ajouter un paramètre
SECRET_KEY
, qui est requis par votre application Django.
Étape 2 : Créer un coffre de clés pour la gestion sécurisée des secrets
- Dans la barre de recherche supérieure, tapez « coffre de clés », puis sélectionnez Place de marché>Coffre de clés.
- Dans Groupe de ressources, sélectionnez msdocs-python-postgres-tutorial.
- Dans nom du coffre de clés, tapez un nom composé uniquement de lettres et de chiffres.
- Dans Région, définissez-la sur le même emplacement en tant que groupe de ressources.
Étape 3 : Sécuriser le coffre de clés avec un point de terminaison privé
- Sélectionnez l’onglet Réseau.
- Désélectionnez Activer l’accès public.
- Séllectionnez Créer un point de terminaison privé.
- Dans Groupe de ressources, sélectionnez msdocs-python-postgres-tutorial.
- Dans la boîte de dialogue, dans Emplacement,sélectionnez le même emplacement que votre application App Service.
- Dans Nom, tapez msdocs-python-postgres-XYZVaultEndpoint.
- Dans Réseau virtuel, sélectionnez msdocs-python-postgres-XYZVnet.
- Dans Sous-réseau, msdocs-python-postgres-XYZSubnet.
- Cliquez sur OK.
- Sélectionnez Vérifier + créer, puis sélectionnez Créer. Attendez que le déploiement du coffre de clés se termine. Vous devez voir « Votre déploiement est terminé ».
Étape 4 : configurer le connecteur PostgreSQL
- Dans la principale barre de recherche, tapez msdocs-python-postgres, puis sélectionnez la ressource App Service appelée msdocs-python-postgres-XYZ.
- Sur la page App Service, dans le menu de gauche, sélectionnez Paramètres > Connecteur de services. Il existe déjà deux connecteurs, que l’Assistant Création d’application a créés pour vous.
- Cochez la case en regard du connecteur PostgreSQL, puis sélectionnez Modifier.
- Dans Type de client, sélectionnez Django. Le type de client Django dans le connecteur de service PostgreSQL vous donne des variables de base de données dans des paramètres distincts au lieu d’une chaîne de connexion. Les variables distinctes sont plus faciles à utiliser dans les paramètres de base de données de Django.
- Sélectionnez l’onglet Authentification.
- Dans Mot de passe, collez le mot de passe que vous avez copié précédemment.
- Sélectionnez Stocker le secret dans Key Vault.
- Sous Connexion du coffre de clés, sélectionnez Créer. Une boîte de dialogue Créer une connexion est ouverte en haut de la boîte de dialogue d’édition.
Étape 5 : Établir la connexion Key Vault
- Dans la boîte de dialogue Créer une connexion pour la connexion Key Vault, dans Key Vault, sélectionnez le coffre de clés que vous avez créé précédemment.
- Sélectionnez Vérifier + créer.
- Lorsque la validation terminée, sélectionnez Créer.
Étape 6 : finaliser les paramètres du connecteur PostgreSQL
- Vous revenez dans la boîte de dialogue d’édition pour defaultConnector. Sous l’onglet Authentification, attendez que le connecteur de coffre de clés soit créé. Une fois l’opération terminée, la liste déroulante Connexion Key Vault effectue automatiquement la sélection.
- Sélectionnez Suivant : Réseau.
- Cliquez sur Enregistrer. Attendez que la notification Mise à jour réussie s’affiche.
Étape 7 : configurer le connecteur Redis pour utiliser les secrets Key Vault
- Dans la page Connecteurs de service, cochez la case en regard du connecteur Cache pour Redis, puis sélectionnez Modifier.
- Sélectionnez l’onglet Authentification.
- Sélectionnez Stocker le secret dans Key Vault.
- Sous Connexion Key Vault, sélectionnez le coffre de clés que vous avez créé.
- Sélectionnez Suivant : Réseau.
- Sélectionnez Configurer des règles de pare-feu pour activer l’accès au service cible. L’Assistant Création d’application a déjà sécurisé la base de données SQL avec un point de terminaison privé.
- Cliquez sur Enregistrer. Attendez que la notification Mise à jour réussie s’affiche.
Étape 8 : vérifier l’intégration de Key Vault
- Dans le menu de gauche, sélectionnez à nouveau Paramètres > Variables d’environnement.
- À côté d’AZURE_POSTGRESQL_PASSWORD, sélectionnez Afficher la valeur. La valeur doit être
@Microsoft.KeyVault(...)
, ce qui signifie qu’il s’agit d’une référence coffre de clés, car le secret est maintenant managé dans le coffre de clés. - Pour vérifier la chaîne de connexion Redis, sélectionnez Afficher la valeur en regard de AZURE_REDIS_CONNECTIONSTRING.
Étape 9 : l’exemple d’application lit la variable d’environnement SECRET_KEY pour définir le paramètre SECRET_KEY requis. Vous le créez en tant que paramètre d'application dans cette étape.
- Sous l’onglet Paramètres d’application, sélectionnez Ajouter.
- Définissez Nom sur SECRET_KEY.
- Définissez Valeur sur une chaîne aléatoire longue.
- Cliquez sur Appliquer, puis Appliquer à nouveau, puis Confirmer.
En résumé, le processus de sécurisation de vos secrets de connexion est complexe :
- Récupération des secrets de connexion dans les variables d'environnement de l'application App Service.
- Création d’un coffre de clés
- Création d'une connexion Key Vault avec l'identité gérée attribuée par le système.
- Mise à jour des connecteurs de service pour stocker les secrets dans le coffre de clés.
Remarque
Dans l’idéal, le paramètre d’application SECRET_KEY
doit également être configuré comme référence de coffre de clés, qui est un processus en plusieurs étapes. Pour plus d’informations, consultez Comment faire pour modifier le paramètre d’application SECRET_KEY en référence Key Vault ?
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
4. Déployer l’exemple de code
Dans cette étape, vous configurez le déploiement GitHub avec GitHub Actions. Cette méthode fait partie des nombreuses façons de déployer sur App Service, mais elle permet également de bénéficier d’une intégration continue dans votre processus de déploiement. Par défaut, chaque git push
vers votre référentiel GitHub lance l’action de build et de déploiement.
Étape 1 : Dans le menu de gauche, sélectionnez Déploiement>Centre de déploiement.
Étape 2 : Dans la page Centre de déploiement :
- Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
- Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
- Dans Organisation, sélectionnez votre compte.
- Dans Référentiel, sélectionnez msdocs-django-postgresql-sample-app.
- Dans Branche, sélectionnez starter-no-infra. Il s’agit de la même branche que celle dans laquelle vous avez travaillé avec votre exemple d’application, sans fichiers ou configuration liés à Azure.
- Pour le Type d’authentification, sélectionnez Identité affectée par l’utilisateur.
- Dans le menu principal, sélectionnez Enregistrer.
App Service valide un fichier de flux de travail dans le référentiel GitHub choisi, au sein du répertoire
.github/workflows
. Par défaut, le centre de déploiement crée une identité affectée par l’utilisateur pour que le flux de travail s’authentifie à l’aide de Microsoft Entra (authentification OIDC). Pour des options d’authentification alternatives, consultez Déployer sur App Service à l’aide de GitHub Actions.
Étape 3 : De retour dans le codespace GitHub de votre exemple de duplication, exécutez git pull origin starter-no-infra
.
Cela extrait le fichier de workflow nouvellement validé dans votre espace de code.
Étape 4 (Option 1 : avec GitHub Copilot) :
- Démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.
- Demandez, « @espace de travail Comment l’application se connecte-t-elle à la base de données et redis ? » Copilot peut vous donner des explications sur comment les paramètres sont configurés dans azureproject/development.py et azureproject/production.py.
- Demandez, « @espace de travail en mode de production, mon application s’exécute dans une application web App Service, qui utilise Azure Service Connector pour se connecter à un serveur flexible PostgreSQL à l’aide du type de client Django. Quels sont les noms des variables d'environnement que je dois utiliser ? « Copilot peut vous faire une suggestion de code similaire à celle présentée dans les étapes de l’Option 2 : sans GitHub Copilot ci-dessous, et même vous demander d’effectuer le changement dans le fichier azureproject/production.py.
- Ouvrez azureproject/production.py dans l’explorateur et ajoutez la suggestion de code.
- Demandez, « @espace de travail Mon application App Service utilise également Azure Service Connector pour se connecter à un Cache for Redis en utilisant le type de client Django. Quels sont les noms des variables d'environnement que je dois utiliser ? *« Copilot peut vous faire une suggestion de code similaire à celle présentée dans les étapes de l’Option 2 : sans GitHub Copilot ci-dessous, et même vous demander d’effectuer le changement dans le fichier azureproject/production.py.
- Ajouter la suggestion de code. GitHub Copilot ne vous donne pas la même réponse à chaque fois, et elle n’est pas toujours correcte. Vous devrez peut-être poser plus de questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?
Étape 4 (Option 2 : sans GitHub Copilot) :
- Ouvrez Program.cs dans l’Explorateur.
- Recherchez le code commenté (lignes 29 à 48), puis supprimez les marques de commentaire.
Cela crée des connexions PostgreSQL et Redis à l’aide de
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
etAZURE_REDIS_CONNECTIONSTRING
.
Étape 5 :
- Sélectionnez l’extension Contrôle de code source.
- Dans la zone de texte, tapez un message de commit comme
Configure Azure database and cache connectons
. Vous pouvez également sélectionner, puis laisser GitHub Copilot générer un message de commit à votre place.
- Sélectionnez Valider, puis confirmez en choisissant Oui.
- Sélectionnez Synchroniser les modifications 1, puis confirmez en choisissant OK.
Étape 6 : de retour dans la page Centre de déploiement du Portail Azure :
- Sélectionnez l’onglet Journaux, puis Actualiser pour voir la nouvelle exécution du déploiement.
- Dans l’élément de journal de l’exécution du déploiement, sélectionnez l’entrée Générer/déployer des journaux avec l’horodatage le plus récent.
Étape 7 : Vous êtes dirigé vers votre référentiel GitHub où vous voyez que l’action GitHub est en cours d’exécution. Le fichier de workflow définit deux étapes distinctes : la build et le déploiement. Attendez que l’exécution de GitHub affiche l’état Opération réussie. Cela prend environ 5 minutes.
Vous rencontrez des problèmes ? Consultez le Guide de résolution des problèmes.
5. Générer le schéma de la base de données
Avec la base de données PostgreSQL protégée par le réseau virtuel, le moyen le plus simple d’exécuter les migrations de base de données Django est de le faire dans une session SSH avec le conteneur Linux dans App Service.
Étape 1 : De retour dans la page App Service, dans le menu de gauche,
- Sélectionnez Outils de développement>SSH.
- Sélectionnez Go.
Étape 2 : dans la session SSH, exécutez python manage.py migrate
. Si cela réussit, App Service se connecte avec succès à la base de données.
Conseil
Dans la session SSH, seuls les changements apportés aux fichiers dans /home
peuvent être conservés au-delà des redémarrages de l’application. Les modifications effectuées en dehors de /home
ne sont pas conservées. La session SSH est utile pour exécuter des commandes python manage.py
courantes, telles que la création d’utilisateurs avec le python manage.py createsuperuser
. Pour plus d’informations, consultez la documentation sur django django-admin and manage.py. Utilisez le compte de superutilisateur pour accéder à la partie /admin
du site web.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
6. Accéder à l’application
Étape 1 : Dans la page App Service :
- Dans le menu de gauche, sélectionnez Vue d’ensemble.
- Sélectionnez l’URL de votre application.
Étape 2 : Ajoutez quelques restaurants à la liste. Félicitations, vous exécutez une application web Flask dans Azure App Service, avec une connectivité sécurisée vers Azure Database pour PostgreSQL.
7. Diffuser les journaux de diagnostic
Azure App Service capture tous les journaux de la console pour vous aider à diagnostiquer les problèmes liés à votre application. L’exemple d’application inclut des instructions print()
pour montrer cette fonctionnalité, comme ci-dessous.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Étape 1 : Dans la page App Service :
- Dans le menu de gauche, sélectionnez Monitoring>Journaux App Service.
- Sous Application Logging, sélectionnez Système de fichiers.
- Dans le menu principal, sélectionnez Enregistrer.
Étape 2 : Dans le menu de gauche, sélectionnez Flux de journaux. Les journaux de votre application (notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur) apparaissent.
Apprenez-en davantage sur la journalisation dans les applications Python dans la série sur la configuration d’Azure Monitor pour votre application Python.
8. Nettoyer les ressources
Lorsque vous avez terminé, vous pouvez supprimer toutes les ressources de votre abonnement Azure en supprimant le groupe de ressources.
Étape 1 : Dans la barre de recherche située en haut du Portail Microsoft Azure :
- Entrez le nom du groupe de ressources.
- Sélectionnez le groupe de ressources.
Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.
Étape 3 :
- Entrer le nom du groupe de ressources pour confirmer la suppression.
- Sélectionnez Supprimer.
2. Créer des ressources Azure et déployer un exemple d’application
Dans cette étape, vous allez créer les ressources Azure et déployer un exemple d’application dans App Service sur Linux. La procédure indiquée dans ce tutoriel permet de créer un ensemble de ressources sécurisées par défaut qui incluent App Service, Azure DB pour PostgreSQL et Azure Cache pour Redis.
Le conteneur de développement dispose déjà d’Azure Developer CLI (AZD).
Depuis la racine du référentiel, exécutez
azd init
.azd init --template python-app-service-postgresql-infra
Lorsque vous y êtes invité, fournissez les réponses suivantes :
Question Réponse Le répertoire actif n’est pas vide. Voulez-vous initialiser un projet ici dans «<votre-répertoire>» ? Y Que souhaitez-vous faire de ces fichiers ? Conserver mes fichiers existants inchangés Entrer un nom pour le nouvel environnement Tapez un nom unique. Le modèle AZD utilise ce nom dans le cadre du nom DNS de votre application web dans Azure ( <app-name>-<hash>.azurewebsites.net
). Les caractères alphanumériques et les traits d’union sont autorisés.Connectez-vous à Azure en exécutant la commande
azd auth login
et en suivant l’invite :azd auth login
Créez les ressources Azure nécessaires avec la commande
azd provision
. Suivez l’invite pour sélectionner l’abonnement et l’emplacement souhaités pour les ressources Azure.azd provision
La commande
azd provision
prend environ 15 minutes (le cache Redis prend le plus de temps). Plus tard, vous modifierez votre code pour qu'il fonctionne avec App Service et déploierez les changements avecazd deploy
. Pendant son exécution, la commande fournit des messages sur le processus d’approvisionnement et de déploiement, y compris un lien vers le déploiement dans Azure.Ce modèle AZD contient des fichiers (azure.yaml et le répertoire infra) qui génèrent une architecture sécurisée par défaut avec les ressources Azure suivantes :
- Groupe de ressources : conteneur pour toutes les ressources créées.
- Plan App Service : définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau De base.
- App Service : représente votre application et s’exécute dans le plan App Service.
- Réseau virtuel : intégré à l’application App Service, isole le trafic réseau principal.
- Points de terminaison privés : Points de terminaison d’accès pour le coffre de clés et le cache Redis dans le réseau virtuel.
- Interfaces réseau : représente les adresses IP privées, une pour chacun des points de terminaison privés.
- Azure Database pour PostgreSQL – Serveur flexible : accessible uniquement à partir du réseau virtuel. Une base de données et un utilisateur sont créés pour vous sur le serveur.
- Zone DNS privée : active la résolution DNS du serveur PostgreSQL dans le réseau virtuel.
- L’espace de travail Log Analytics : agit comme le conteneur cible de votre application pour expédier ses journaux d’activité, dans lequel vous pouvez également interroger les journaux.
- Azure Cache pour Redis : accessible uniquement derrière son point de terminaison privé.
- Coffre de clés : accessible uniquement derrière son point de terminaison privé. Permet de gérer les secrets de l’application App Service.
Une fois que la commande a fini de créer les ressources et de déployer le code de l’application pour la première fois, l’exemple d’application déployé ne fonctionne pas encore, car vous devez apporter de petits changements pour qu’il se connecte à la base de données dans Azure.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
3. Utiliser la chaîne de connexion de base de données
Le modèle AZD utilisé a généré les variables de connectivité pour vous en tant que paramètres d’application et les restitue sur le terminal pour plus de facilité. Les paramètres d’application sont un moyen de préserver les secrets de connexion hors de votre référentiel de code.
Dans la sortie AZD, recherchez les paramètres
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
,AZURE_POSTGRESQL_NAME
etAZURE_REDIS_CONNECTIONSTRING
. Pour préserver la sécurité des secrets, seuls les noms des paramètres sont affichés. Ils ressemblent à ceci dans la sortie AZD :App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
Pour votre commodité, le modèle AZD affiche le lien direct vers la page des paramètres d’application de l’application. Recherchez le lien et ouvrez-le dans un nouvel onglet de navigateur.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
4. Modifier l’exemple de code et effectuer au redéploiement
Dans le codespace GitHub, démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.
Demandez, « @espace de travail Comment l’application se connecte-t-elle à la base de données ? » Copilot peut vous donner des explications sur comment les paramètres de connexion sont configurés dans azureproject/development.py et azureproject/production.py.
Demandez, « @espace de travail en mode de production, mon application s’exécute dans une application web App Service, qui utilise Azure Service Connector pour se connecter à un serveur flexible PostgreSQL à l’aide du type de client Django. Quels sont les noms des variables d'environnement que je dois utiliser ? « Copilot peut vous faire une suggestion de code similaire à celle présentée dans les étapes de l’Option 2 : sans GitHub Copilot ci-dessous, et même vous demander d’effectuer le changement dans le fichier azureproject/production.py.
Ouvrez azureproject/production.py dans l’explorateur et ajoutez la suggestion de code.
GitHub Copilot ne vous donne pas la même réponse à chaque fois, et elle n’est pas toujours correcte. Vous devrez peut-être poser plus de questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?
Dans le terminal, exécutez
azd deploy
.azd deploy
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
5. Générer le schéma de la base de données
Avec la base de données PostgreSQL protégée par le réseau virtuel, le moyen le plus simple d’exécuter les migrations de base de données Django est de le faire dans une session SSH avec le conteneur Linux dans App Service.
Dans la sortie AZD, retrouvez l’URL de la session SSH et accédez-y dans le navigateur. Cela ressemble à ceci dans la sortie :
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Dans la session SSH, exécutez
python manage.py migrate
. Si cela réussit, App Service se connecte avec succès à la base de données.Remarque
Seules les modifications apportées aux fichiers dans
/home
peuvent être conservées au-delà des redémarrages d’application. Les modifications effectuées en dehors de/home
ne sont pas conservées.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
6. Accéder à l’application
Dans la sortie AZD, retrouvez l’URL de votre application et accédez-y dans le navigateur. L’URL ressemble à ceci dans la sortie AZD :
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Ajoutez quelques restaurants à la liste.
Félicitations, vous exécutez une application web Flask dans Azure App Service, avec une connectivité sécurisée vers Azure Database pour PostgreSQL.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
7. Diffuser les journaux de diagnostic
Azure App Service peut capturer les journaux de la console pour vous aider à diagnostiquer les problèmes liés à votre application. Pour plus de facilité, le modèle AZD active déjà la journalisation sur le système de fichiers local et expédie les journaux vers un espace de travail Log Analytics.
L’exemple d’application contient des instructions print()
pour montrer cette fonctionnalité, comme illustré dans l’extrait suivant.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Dans la sortie AZD, retrouvez le lien pour diffuser en continu les journaux App Service et accédez-y dans le navigateur. Le lien ressemble à ceci dans la sortie AZD :
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Apprenez-en davantage sur la journalisation dans les applications Python dans la série sur la configuration d’Azure Monitor pour votre application Python.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
8. Nettoyer les ressources
Pour supprimer toutes les ressources Azure dans le présent environnement de déploiement, exécutez azd down
et suivez les invites.
azd down
Dépannage
Vous allez trouver ci-dessous les problèmes que vous pouvez rencontrer lorsque vous travaillez avec ce tutoriel et les étapes à suivre pour les résoudre.
Je n’arrive pas à me connecter à la session SSH
Si vous ne pouvez pas vous connecter à la session SSH, c’est que l’application elle-même n’a pas pu démarrer. Pour plus d’informations, consultez les journaux de diagnostic. Par exemple, si vous voyez une erreur du type KeyError: 'AZURE_POSTGRESQL_HOST'
, cela peut signifier que la variable d’environnement est manquante (vous pouvez avoir supprimé le paramètre de l’application).
Je reçois une erreur lors de l’exécution des migrations de bases de données
Si vous rencontrez des erreurs liées à la connexion à la base de données, vérifiez si les paramètres de l’application (AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
et AZURE_POSTGRESQL_NAME
) ont été modifiés ou supprimés. Sans cette chaîne de connexion, la commande de migration ne peut pas communiquer avec la base de données.
Forum aux questions
- Quel est le coût de cette configuration ?
- Comment se connecter au serveur PostgreSQL sécurisé derrière le réseau virtuel avec d’autres outils ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Comment l’exemple Django est-il configuré pour fonctionner sur Azure App Service ?
- Comment faire pour modifier le paramètre d’application SECRET_KEY en référence Key Vault ?
- Comment déboguer des erreurs pendant le déploiement de GitHub Actions ?
- Je n’ai pas les autorisations pour créer une identité affectée par l’utilisateur
- Que puis-je faire avec GitHub Copilot dans mon codespace ?
- Quel est le coût de cette configuration ?
- Comment se connecter au serveur PostgreSQL sécurisé derrière le réseau virtuel avec d’autres outils ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Comment l’exemple Django est-il configuré pour fonctionner sur Azure App Service ?
- Comment déboguer des erreurs pendant le déploiement de GitHub Actions ?
- Je n’ai pas les autorisations pour créer une identité affectée par l’utilisateur
- Que puis-je faire avec GitHub Copilot dans mon codespace ?
Quel est le coût de cette configuration ?
Le prix des ressources créées est calculé comme suit :
- Le plan App Service est créé au niveau De base. Il peut faire l’objet d’un scale-up ou d’un scale-down. Consultez la tarification App Service.
- Le serveur flexible PostgreSQL est créé dans le plus bas niveau burstable Standard_B1ms, avec la taille minimale de stockage qui peut être augmentée ou diminuée. Consultez Tarifs d’Azure Database pour PostgreSQL.
- Le réseau virtuel n’entraîne pas de frais, sauf si vous configurez des fonctionnalités supplémentaires, telles que le peering. Consultez Tarification du réseau virtuel Azure.
- La zone DNS privée entraîne des frais minimes. Consultez la tarification d’Azure DNS.
Comment se connecter au serveur PostgreSQL sécurisé derrière le réseau virtuel avec d’autres outils ?
- Pour un accès de base à partir d’un outil en ligne de commande, vous pouvez exécuter
psql
à partir de la session SSH de l’application. - Pour vous connecter à partir d’un outil de bureau, votre ordinateur doit se trouver dans le réseau virtuel. Par exemple, il peut s’agir d’une machine virtuelle Azure connectée à l’un des sous-réseaux ou d’une machine dans un réseau local disposant d’une connexion VPN de site à site avec le réseau virtuel Azure.
- Vous pouvez également intégrer Azure Cloud Shell au réseau virtuel.
Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
Grâce au fichier de flux de travail généré automatiquement à partir d’App Service comme exemple, chaque git push
démarre une nouvelle exécution de build et de déploiement. À partir d’un clone local du référentiel GitHub, vous effectuez les mises à jour souhaitées et poussez vers GitHub. Par exemple :
git add .
git commit -m "<some-message>"
git push origin main
Comment l’exemple Django est-il configuré pour fonctionner sur Azure App Service ?
L’exemple d’application Django configure les paramètres dans le fichier azureproject/production.py afin qu’il puisse s’exécuter dans Azure App Service. Ces modifications sont courantes pour déployer Django en production et non spécifiques à App Service.
Django valide l’en-tête HTTP_HOST dans les requêtes entrantes. L’exemple de code utilise la variable d’environnement
WEBSITE_HOSTNAME
dans App Service pour ajouter le nom de domaine de l’application au paramètre ALLOWED_HOSTS de Django.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Django ne prend pas en charge le traitement des fichiers statiques en production. Pour ce tutoriel, vous utilisez WhiteNoise pour permettre le traitement des fichiers. Le package WhiteNoise a déjà été installé avec requirements.txt, et son intergiciel est ajouté à la liste.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Ensuite, les paramètres de fichier statique sont configurés en fonction de la documentation Django.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Pour plus d’informations, consultez Paramètres de production des applications Django.
Comment faire pour modifier le paramètre d’application SECRET_KEY en référence Key Vault ?
À partir des étapes du portail ci-dessus, vous pouvez passer SECRET_KEY
à une référence Key Vault en exécutant les commandes Azure CLI suivantes dans cloud shell :
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Vous pouvez également faire la même chose dans le portail. Pour plus d’informations, consultez l’article suivant :
Comment déboguer des erreurs pendant le déploiement de GitHub Actions ?
Si une étape échoue dans le fichier de flux de travail GitHub généré automatiquement, essayez de modifier la commande ayant échoué pour générer une sortie plus détaillée. Par exemple, vous pouvez obtenir plus de sorties à partir de la commande python
en ajoutant l’option -d
. Validez et envoyez vos modifications pour déclencher un autre déploiement à App Service.
Je n’ai pas les autorisations pour créer une identité affectée par l’utilisateur
Consultez Configurer le déploiement de GitHub Actions à partir du Centre de déploiement.
Que puis-je faire avec GitHub Copilot dans mon codespace ?
Vous avez peut-être remarqué que la vue de conversation GitHub Copilot était déjà là pour vous quand vous avez créé le codespace. Pour plus de commodité, nous incluons l’extension de conversation GitHub Copilot dans la définition du conteneur (consultez .devcontainer/devcontainer.json). Cependant, vous avez besoin d’un compte GitHub Copilot (essai gratuit de 30 jours disponible).
Quelques conseils à appliquer quand vous parlez à GitHub Copilot :
- Dans une session de conversation unique, les questions et réponses s’appuient les unes sur les autres et vous pouvez ajuster vos questions pour affiner la réponse que vous obtenez.
- Par défaut, GitHub Copilot n’a accès à aucun fichier de votre référentiel. Pour poser des questions sur un fichier, vous devez d’abord l’ouvrir dans l’éditeur.
- Pour permettre à GitHub Copilot d’accéder à tous les fichiers du référentiel lors de la préparation de ses réponses, commencez votre question par
@workspace
. Pour plus d’informations, consultez Use the @workspace agent. - Dans la session de conversation, GitHub Copilot peut suggérer des modifications et même (avec
@workspace
) où apporter les modifications, mais il n’est pas autorisé à apporter les modifications pour vous. C’est à vous d’ajouter les changements suggérés et de les tester.
Étapes suivantes
Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.
Découvrez comment App Service exécute une application Python :