Partager via


Déployer une application web Python Django avec PostgreSQL dans Azure

Dans ce tutoriel, vous déployez une application web Python pilotée par les données sur Azure App Service qui utilise le service de base de données relationnelle Azure Database pour PostgreSQL . Azure App Service prend en charge Python dans un environnement serveur Linux. Cet article utilise Django. Les alternatives incluent Flask ou le didacticiel FastAPI.

Diagramme montrant l’architecture d’un App Service avec une base de données PostgreSQL dans Azure.

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 du développement Python avec 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 didacticiel s’exécutant dans Azure, exécutez les commandes suivantes dans Azure Cloud Shell et 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

Exécuter l’exemple

En guise de point de départ, configurez un exemple d’application pilotée par les données. Pour plus de commodité, l’exemple de référentiel inclut une configuration de conteneur de développement. Le conteneur de développement a 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 dont l’exemple d’application a besoin. Le conteneur de développement peut s’exécuter dans un espace de code GitHub. Vous pouvez donc exécuter l’exemple sur n’importe quel ordinateur avec un navigateur web.

Remarque

Si vous suivez ce tutoriel avec votre propre application, examinez la description du fichierrequirements.txt dans README.md pour voir les packages dont vous avez besoin.

Étape 1 : Dans une nouvelle fenêtre de navigateur :

  1. Connectez-vous à votre compte GitHub.
  2. Accédez à https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
  3. Désélectionnez Copier la branche principale uniquement. Vous voulez toutes les branches.
  4. Sélectionnez Créer un fork.

Étape 2 : dans le fork GitHub :

  1. Sélectionnez main>starter-no-infra pour la branche initiale. Cette branche contient uniquement l’exemple de projet et aucun fichier ou configuration lié à Azure.
  2. Sélectionnez Code>Créer un codespace sur starter-no-infra. Il faut quelques minutes pour configurer le codespace. Il s’exécute pip install -r requirements.txt pour votre référentiel. Le fichier .env fourni contient déjà une variable factice SECRET_KEY que Django doit exécuter localement.

Étape 3 : Dans le terminal codespace :

  1. Exécutez des migrations de base de données avec python manage.py migrate.
  2. Exécutez l’application avec python manage.py runserver.
  3. 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, tapez Ctrl+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.

Créer App Service, une base de données et un cache

Dans cette étape, créez les ressources Azure. Ce tutoriel crée un ensemble de ressources sécurisées par défaut qui incluent App Service, Azure Database 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.
  • La Région du monde où l’application sera physiquement exécutée. Il fait également partie du nom DNS de votre application.
  • La Pile du runtime de l’application. Vous sélectionnez la version de Python à utiliser pour votre application.
  • Le Plan d’hébergement de l’application. Le niveau tarifaire inclut l’ensemble des fonctionnalités et la capacité de mise à l’échelle pour votre application.
  • Le groupe de ressources pour l’application. Un groupe de ressources vous permet de regrouper toutes les ressources Azure nécessaires pour l’application dans un conteneur logique.

Connectez-vous au portail Azure. Suivez ces étapes pour créer vos ressources Azure App Service.

Étape 1 : Dans le Portail Azure :

  1. En haut du portail Azure, dans la zone de recherche, entrez la base de données d’application web.
  2. Sous le titre Place de marché , sélectionnez l’élément intitulé Web App + Base de données. Vous pouvez également accéder directement à Créer une application web .

Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.

  1. Groupe de ressources : sélectionnez Créer et entrez msdocs-django-postgres-tutorial.
  2. Région : toute région Azure près de chez vous.
  3. Nom : msdocs-python-postgres-XYZ.
  4. Pile d’exécution : Python 3.14.
  5. 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.
  6. Ajouter Azure Cache pour Redis : Oui.
  7. 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.
  8. Sélectionnez Revoir + créer.
  9. 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 Accéder à la ressource. Le déploiement crée les ressources suivantes :

  • Groupe de ressources : conteneur pour toutes les ressources créées.
  • Plan App Service : définit les ressources de calcul pour App Service. Cette instance est un plan Linux dans 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 : 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. Le déploiement crée une base de données et un utilisateur sur le serveur.
  • Cache Azure pour Redis : accessible uniquement à partir de 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.

Sécuriser les secrets de connexion et ajouter SECRET_KEY

Le processus de déploiement génère les variables de connectivité pour vous en tant que paramètres d’application. La meilleure pratique de sécurité consiste à maintenir les informations sensibles hors de l'Azure App Service. Déplacez vos secrets vers un Key Vault et modifiez le paramètre de votre application en Key Vault references à l’aide des Service Connectors.

Étape 1 : Récupérer la chaîne de connexion existante

  1. Dans le menu de gauche de la page App Service, sélectionnez Paramètres>Variables d'environnement.
  2. Sélectionnez AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. Dans Ajouter/modifier le paramètre d’application, dans le champ Valeur, recherchez la partie Password= à la fin de la chaîne.
  4. Copiez la chaîne de mot de passe après password= pour une utilisation ultérieure. Ce paramètre d’application vous permet de vous connecter à la base de données Postgres et au cache Redis sécurisé derrière les points de terminaison privés. Les secrets sont enregistrés directement dans l’application App Service, ce qui n’est pas la meilleure approche. Vous allez modifier cette configuration. Vous ajoutez également un SECRET_KEY paramètre dont votre application Django a besoin.

Étape 2 : Créer un coffre de clés pour la gestion sécurisée des secrets

  1. Dans la barre de recherche supérieure, entrez Key Vault, puis sélectionnez Marketplace>Key Vault.
  2. Dans Groupe de ressources, sélectionnez msdocs-python-postgres-tutorial.
  3. Dans le nom du coffre de clés, entrez un nom composé uniquement de lettres et de chiffres.
  4. Dans région, sélectionnez le même emplacement que le groupe de ressources.

Étape 3 : Verrouiller le coffre-fort de clés avec un point de terminaison privé

  1. Sélectionnez l’onglet Réseau.
  2. Désélectionnez Activer l’accès public.
  3. Séllectionnez Créer un point de terminaison privé.
  4. Dans Groupe de ressources, sélectionnez msdocs-python-postgres-tutorial.
  5. Dans la boîte de dialogue, dans Emplacement,sélectionnez le même emplacement que votre application App Service.
  6. Dans Nom, tapez msdocs-python-postgres-XYZVaultEndpoint.
  7. Dans Réseau virtuel, sélectionnez msdocs-python-postgres-XYZVnet.
  8. Dans Sous-réseau, msdocs-python-postgres-XYZSubnet.
  9. Cliquez sur OK.
  10. 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 que votre déploiement est terminé.

Étape 4 : configurer le connecteur PostgreSQL

  1. Dans la barre de recherche supérieure, entrez msdocs-python-postgres, puis sélectionnez votre ressource App Service msdocs-python-postgres-XYZ.
  2. Dans la page App Service , dans le menu de gauche, sélectionnez Settings>Service Connector. Il existe déjà deux connecteurs, que le processus de création d’application a créés pour vous.
  3. Cochez la case en regard du connecteur PostgreSQL, puis sélectionnez Modifier.
  4. 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.
  5. Sélectionnez Authentification.
  6. Dans Mot de passe, collez le mot de passe que vous avez copié précédemment.
  7. Sélectionnez Stocker le secret dans Key Vault.
  8. Sous Connexion du coffre de clés, sélectionnez Créer nouveau. Cette action ouvre une boîte de dialogue Créer une connexion par-dessus la boîte de dialogue d'édition.

Étape 5 : Établir la connexion Key Vault

  1. 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.
  2. Sélectionnez Vérifier + créer.
  3. Lorsque la validation terminée, sélectionnez Créer.

Étape 6 : finaliser les paramètres du connecteur PostgreSQL

  1. Vous revenez dans la boîte de dialogue d’édition pour defaultConnector. Sous Authentification, attendez que le connecteur key vault soit créé. La liste déroulante Connexion Key Vault la sélectionne automatiquement.
  2. Sélectionnez Suivant : Réseau.
  3. 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

  1. Dans la page Connecteurs de service , cochez la case en regard du connecteur Cache pour Redis, puis sélectionnez Modifier.
  2. Sélectionnez Authentification.
  3. Sélectionnez Stocker le secret dans Key Vault.
  4. Sous Key Vault Connection, sélectionnez le Key Vault que vous avez créé.
  5. Sélectionnez Suivant : Réseau.
  6. Sélectionnez Configurer des règles de pare-feu pour activer l’accès au service cible. Le processus de création d’application a déjà sécurisé la base de données SQL avec un point de terminaison privé.
  7. Cliquez sur Enregistrer. Attendez que la notification Mise à jour réussie s’affiche.

Étape 8 : vérifier l’intégration de Key Vault

  1. Dans le menu de gauche, sélectionnez à nouveau Paramètres > Variables d’environnement.
  2. À 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.
  3. 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.

  1. Sous l’onglet Paramètres d’application, sélectionnez Ajouter.
  2. Définissez Nom sur SECRET_KEY.
  3. Définissez Valeur sur une chaîne aléatoire longue.
  4. Sélectionnez Appliquer, puis Appliquer à nouveau, puis Confirmez.

En résumé, le processus de sécurisation de vos secrets de connexion est complexe :

  • Récupération des secrets de connexion depuis 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.


Déployer un exemple de code

Dans cette section, configurez le déploiement GitHub à l’aide de GitHub Actions. Il s’agit de l’une des nombreuses façons de déployer sur App Service. Il s’agit d’un excellent moyen d’intégrer continuellement 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 :

  1. Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
  2. Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
  3. Dans Organisation, sélectionnez votre compte.
  4. Dans Référentiel, sélectionnez msdocs-django-postgresql-sample-app.
  5. Dans Branche, sélectionnez starter-no-infra. Cette branche est la même que celle dans laquelle vous avez travaillé avec votre exemple d’application, sans fichiers ou configuration liés à Azure.
  6. Pour le Type d’authentification, sélectionnez Identité affectée par l’utilisateur.
  7. Dans le menu principal, sélectionnez Enregistrer. App Service valide un fichier de flux de travail dans le référentiel GitHub dans le .github/workflows répertoire. 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 obtenir d’autres options d’authentification, 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. Cette commande extrait le fichier de flux de travail nouvellement validé dans votre espace de code.

Étape 4 (Option 1 : avec GitHub Copilot) :

  1. Démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.
  2. 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.
  3. Demandez : « @workspace 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 de variables d’environnement que j’ai besoin d’utiliser ? » Copilot peut vous donner une suggestion de code similaire à celle de l’option 2 : sans étapes gitHub Copilot suivantes et même vous indiquer d’apporter la modification dans le fichier azureproject/production.py .
  4. Ouvrez azureproject/production.py dans l’explorateur et ajoutez la suggestion de code.
  5. Posez la question à « @workspace Mon application My App Service utilise également Azure Service Connector pour se connecter à Cache for Redis en utilisant le type de client Django. Quels sont les noms de variables d’environnement que j’ai besoin d’utiliser ? » Copilot peut vous donner une suggestion de code similaire à celle de l’option 2 : sans les étapes de GitHub Copilot suivantes et même vous indiquer d’apporter la modification dans le fichier azureproject/production.py .
  6. Ajouter la suggestion de code. GitHub Copilot ne vous donne pas la même réponse à chaque fois. Les réponses ne sont pas toujours correctes. 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) :

  1. Ouvrez azureproject/production.py dans l’Explorateur.
  2. Recherchez le code commenté (lignes 29 à 48) et décommentez-le. Ce code crée des connexions PostgreSQL et Redis en utilisant AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME et AZURE_REDIS_CONNECTIONSTRING.

Étape 5 :

  1. Sélectionnez l’extension Contrôle de code source.
  2. Dans la zone de texte, tapez un message de commit comme Configure Azure database and cache connections. Vous pouvez également sélectionner , puis laisser GitHub Copilot générer un message de commit à votre place.
  3. Sélectionnez Valider, puis confirmez en choisissant Oui.
  4. Sélectionnez Synchroniser les modifications 1, puis confirmez en choisissant OK.

Étape 6 : De retour dans le Centre de déploiement dans le portail Azure :

  1. Sélectionnez Journaux, puis Actualisez pour voir la nouvelle exécution du déploiement.
  2. Dans l’élément de log de l’exécution du déploiement, sélectionnez l’entrée Journaux de génération/déploiement avec l’horodatage le plus récent.

Étape 7 : Vous êtes redirigé vers votre dépôt GitHub. 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.

Générer un schéma de 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 :

  1. Sélectionnez Outils de développement>SSH.
  2. 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 django django-admin et 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.

Accéder à l’application

Étape 1 : Dans la page App Service :

  1. Dans le menu de gauche, sélectionnez Vue d’ensemble.
  2. Sélectionnez l’URL de votre application.

Étape 2 : Ajoutez quelques restaurants à la liste. Félicitations! Vous exécutez une application web dans Azure App Service, avec une connectivité sécurisée à Azure Database pour PostgreSQL.

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 print() instructions pour illustrer cette fonctionnalité.

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 :

  1. Dans le menu de gauche, sélectionnez Monitoring>Journaux App Service.
  2. Sous Application Logging, sélectionnez Système de fichiers.
  3. Dans le menu principal, sélectionnez Enregistrer.

Étape 2 : Dans le menu de gauche, sélectionnez Flux de logs. Les journaux de votre application, notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur, apparaissent.

Pour plus d’informations sur la journalisation dans les applications Python, consultez la configuration d’Azure Monitor pour votre application Python.

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 :

  1. Entrez le nom du groupe de ressources.
  2. Sélectionnez le groupe de ressources.

Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.

Étape 3 :

  1. Pour confirmer votre suppression, entrez le nom du groupe de ressources.
  2. Sélectionnez Supprimer.

Créer des ressources Azure et déployer un exemple d’application

Dans cette section, créez les ressources Azure et déployez un exemple d’application sur 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).

  1. Depuis la racine du référentiel, exécutez azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. 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>» ? Oui
    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.
  3. Connectez-vous à Azure en exécutant la commande azd auth login et en suivant l’invite :

    azd auth login
    
  4. 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 azd provision commande prend environ 15 minutes. Le cache Redis prend le plus de temps. Plus tard, modifiez votre code pour qu’il fonctionne avec App Service et déployez les modifications avec azd deploy. Pendant son exécution, la commande fournit des messages sur le processus d’approvisionnement et de déploiement. La sortie inclut 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. Il crée un plan Linux dans 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 : adresses IP privées, une pour chacun des points de terminaison privés.
    • Serveur flexible Azure Database pour PostgreSQL : accessible uniquement à partir du réseau virtuel. Il crée une base de données et un utilisateur 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 depuis l’arrière de son point de terminaison privé. Permet de gérer les secrets de l’application App Service.

    Une fois la commande terminée la création de ressources et le déploiement du code de l’application la première fois, l’exemple d’application déployé ne fonctionne pas encore. Vous devez apporter de petites modifications pour qu’elle se connecte à la base de données dans Azure.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

Utiliser la chaîne de connexion de base de données

Le modèle AZD que vous utilisez a généré les variables de connectivité pour vous en tant que paramètres d’application. Il les affiche dans le terminal. Les paramètres d’application sont un moyen de préserver les secrets de connexion hors de votre référentiel de code.

  1. Dans la sortie AZD, recherchez les paramètres AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME et AZURE_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
     
  2. 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.

Modifier l’exemple de code et le redéployer

  1. Dans le codespace GitHub, démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.

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

  3. Demandez : « @workspace 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 de variables d’environnement que j’ai besoin d’utiliser ? » Copilot peut vous donner une suggestion de code similaire à celle de l’option 2 : sans étapes gitHub Copilot suivantes et même vous indiquer d’apporter la modification dans le fichier azureproject/production.py .

  4. 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. Les réponses ne sont pas toujours correctes. 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 ?

  5. Dans le terminal, exécutez azd deploy.

    azd deploy
    

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

Générer un schéma de 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.

  1. 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: <URL>
    
  2. Dans la session SSH, exécutez python manage.py migrate. Si la commande réussit, App Service se connecte correctement à la base de données.

    Capture d’écran montrant les commandes à exécuter dans l’interpréteur de commandes SSH et leur sortie (Django).

    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.

Accéder à l’application

  1. 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: <URL>
    
  2. Ajoutez quelques restaurants à la liste.

    Capture d’écran de l’application web Django avec PostgreSQL s’exécutant dans Azure montrant des restaurants et critiques de restaurants (Django).

    Félicitations! Vous exécutez une application web dans Azure App Service, avec une connectivité sécurisée à Azure Database pour PostgreSQL.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

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, recherchez le lien pour diffuser en continu des journaux App Service et accédez-y dans le navigateur.

Stream App Service logs at: <URL>

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.

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

Voici des problèmes que vous pouvez rencontrer lors de la tentative d’utilisation de ce didacticiel et des étapes pour les résoudre.

Je n’arrive pas à me connecter à la session SSH

Si vous ne pouvez pas vous connecter à la session SSH, l’application elle-même ne parvient pas à démarrer. Pour plus d’informations, consultez les journaux de diagnostic. Par exemple, si vous voyez une erreur semblable KeyError: 'AZURE_POSTGRESQL_HOST'à celle-ci, cela peut signifier que la variable d’environnement est manquante. Vous avez peut-être supprimé le paramètre d’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.

Questions fréquemment posées

Quel est le coût de cette configuration ?

Le prix des ressources créées est calculé comme suit :

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 d’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 Azure décrites, 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é assigné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 ?

La vue de conversation Copilot GitHub était déjà là pour vous lorsque vous avez créé l’espace de code. 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.

Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.

Vous pouvez également découvrir comment App Service exécute une application Python :