Tutorial: Verbinde eine Django-Webanwendung mit Azure Database for PostgreSQL über Service Connector

In diesem Lernprogramm erfahren Sie, wie Sie eine datengesteuerte Python Django-Web-App für Azure App Service bereitstellen und Service Connector verwenden, um sie mit anderen Azure Diensten zu verbinden. Die Beispielweb-App speichert Restaurant- und Überprüfungsinformationen in einer Azure Database for PostgreSQL-Datenbank und speichert Fotos in einem Azure Storage Container.

Sie verwenden Azure CLI, um die folgenden Aufgaben auszuführen:

Hinweis

Dieses Lernprogramm ähnelt dem App Service Deploy a Python Django Web App with PostgreSQL in Azure Tutorial, verwendet jedoch eine vom System zugewiesene kennwortlose verwaltete Identität mit Azure rollenbasierten Zugriffssteuerung, um auf andere Azure Ressourcen zuzugreifen. Im Abschnitt "Erstellen einer kennwortlosen Dienstverbindung " in diesem Artikel wird gezeigt, wie Service Connector den Verbindungsprozess vereinfacht.

Die Web-App verwendet die DefaultAzureCredentialKlasse der Python Azure Identity-Clientbibliothek, um automatisch zu erkennen, wann eine verwaltete Identität vorhanden ist und verwendet sie für den Zugriff auf die anderen Ressourcen.

Voraussetzungen

  • Ein Azure-Abonnement mit Schreib- und Rollenzuweisungsberechtigungen für die Lernprogrammressourcen in einer Azure-Region, die den Service Connector unterstützt und über ausreichenden App Service-Support und Kontingent verfügt.

  • Azure Cloud Shell, um die Lernprogrammschritte auszuführen, oder wenn Sie es vorziehen, lokal auszuführen:

    1. Install Azure CLI 2.87.0 oder neuer. Führen Sie zum Überprüfen der Version az version aus. Führen Sie zum Upgrade die Ausführung aus az upgrade.
    2. Installieren Sie Python 3.
    3. Installieren Sie Git.
    4. Melden Sie sich mit az login bei Azure an, und folgen Sie den Eingabeaufforderungen.

Richten Sie Ihre Umgebung ein

  1. Registrieren Sie die Microsoft.ServiceLinker und Microsoft.DBforPostgreSQL Ressourcenanbieter für Ihr Abonnement.

    az provider register --namespace Microsoft.ServiceLinker
    az provider register --namespace Microsoft.DBforPostgreSQL
    
  2. Installieren Sie die neueste Version der passwortlosen Service Connector-Erweiterung. Der Parameter --upgrade aktualisiert die Erweiterung, falls sie bereits installiert ist:

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

Klonen der Beispiel-App

Important

Das Beispiel-Repository des Tutorials wurde am 15. Juni 2026 archiviert und wird nicht mehr aktiv gepflegt. Nutze es nur, um dieses Tutorial abzuschließen.

  1. Klonen Sie das Beispiel-App-Repository.

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

    Alternativ können Sie die App aus dem Serviceconnector-webapp-postgresql-django-passwordless-Repository herunterladen und in einen Ordner namens serviceconnector-webapp-postgresql-django-passwordless entpacken.

  2. Wechseln Sie mit cd serviceconnector-webapp-postgresql-django-passwordless und führen Sie alle verbleibenden Befehle aus diesem Ordner aus.

In der Beispiel-App befinden sich die Produktionseinstellungen der Web-App in der Datei azureproject/production.py . Entwicklungseinstellungen sind in Azureproject/settings.py. Die Produktionseinstellungen konfigurieren Django für die Ausführung in einer Produktionsumgebung und sind nicht spezifisch für App Service.

Die App verwendet Produktionseinstellungen, wenn die WEBSITE_HOSTNAME Umgebungsvariable festgelegt wird. App Service setzt diese Variable auf den Hostnamen der App, zum Beispiel msdocs-django.azurewebsites.net.

Weitere Informationen finden Sie in der Checkliste für die Django-Bereitstellung. Siehe auch Production-Einstellungen für Django auf Azure.

Definieren anfänglicher Umgebungsvariablen

Der folgende Code definiert die erforderlichen Umgebungsvariablen für dieses Lernprogramm.

  • LOCATION muss eine Azure-Region sein, in der Ihr Abonnement über ausreichende Kontingente zum Erstellen der Ressourcen verfügt und Azure Database for PostgreSQL für Ihr Abonnement nicht einschränkt.
  • Das PostgreSQL-Administratorpasswort muss 8 bis 128 Zeichen aus mindestens drei dieser Kategorien enthalten: Großbuchstaben, Kleinbuchstaben, Ziffern und nicht-alphanumerische Zeichen. Verwenden Sie $ nicht im Passwort für dieses Tutorial.
  1. Richte die folgenden Umgebungsvariablen ein und ersetze <region> sie durch einen gültigen Wert:

    LOCATION="<region>"
    RAND_ID=$RANDOM$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    DATABASE_NAME="restaurant"
    STORAGE_ACCOUNT_NAME="account$RAND_ID"
    ADMIN_USER="demoadmin"
    
  2. Lies das PostgreSQL-Administrator-Passwort, ohne es anzuzeigen oder deiner Shell-Historie hinzuzufügen:

    read -s -p "PostgreSQL administrator password: " ADMIN_PW && echo
    
  3. Erstellen Sie eine Ressourcengruppe , die alle Projektressourcen enthält. Der Ressourcengruppenname wird zwischengespeichert und automatisch auf nachfolgende Befehle angewandt.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

Bereitstellen des App-Codes für App Service

Erstellen Sie den App-Host in App Service, aktivieren Sie die Build-Automatisierung und bereitstellen Sie den Beispiel-App-Code aus. Der in diesem Tutorial verwendete Basic (B1) App Service-Plan verursacht Kosten für Ihr Azure-Abonnement. Für aktuelle Preise siehe App Service Preise.

  1. Die requirements.txt-Datei des archivierten Samples deklariert nicht, dass der von start.sh verwendete Gunicorn-Server verwendet wird. Füge es deiner lokalen Kopie hinzu, falls es noch nicht vorhanden ist:

    grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txt
    
  2. Erstellen Sie einen Linux-App-Service-Plan in der Basic-(B1)-Preisstufe und erstellen Sie dann die Webanwendung mit dem Startbefehl des Beispiels:

    az appservice plan create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_PLAN_NAME \
      --location $LOCATION \
      --sku B1 \
      --is-linux
    
    az webapp create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --plan $APP_SERVICE_PLAN_NAME \
      --runtime "PYTHON:3.14" \
      --startup-file "start.sh"
    
  3. Aktivieren Sie die App Service Build-Automatisierung, damit die Bereitstellung die Pakete in requirements.txtinstalliert :

    az webapp config appsettings set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
    
  4. Vom Repository-Root aus erstelle du eine ZIP-Datei der Beispiel-App und deploye sie mit az webapp deploy:

    rm -f app.zip
    python -m zipfile -c app.zip *
    
    az webapp deploy \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --src-path app.zip \
      --type zip \
      --track-status false
    
    rm app.zip
    

    Der Deployment-Befehl ist erfolgreich, wenn App Service die ZIP-Datei akzeptiert. Der Build läuft in App Service weiter und kann mehrere Minuten dauern.

Erstellen Sie die PostgreSQL-Datenbank in Azure

Erstellen Sie einen flexiblen Azure Database for PostgreSQL Server und eine Datenbank, um die App-Daten zu speichern.

  1. Erstellen Sie den Server für Azure Database for PostgreSQL:

    az postgres flexible-server create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $DB_SERVER_NAME \
      --location $LOCATION \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --sku-name Standard_D2ds_v4 \
      --microsoft-entra-auth Enabled
    

    Der Befehl gelingt, wenn der Bereitstellungszustand des flexiblen PostgreSQL-Servers ist Succeeded.

  2. Entfernen Sie das Administratorpasswort aus der aktuellen Shell, nachdem der Server erstellt wurde:

    unset ADMIN_PW
    
  3. Erstellen Sie die Datenbank mit az postgres flexible-server db create:

    az postgres flexible-server db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server-name $DB_SERVER_NAME \
      --name $DATABASE_NAME
    

Erstellen einer kennwortlosen Dienstverbindung

Verwenden Sie az WebApp Connection Create Postgres-flexible, um einen Service Connector hinzuzufügen, der die Azure-Webanwendung mit der PostgreSQL-Datenbank über passwortlose verwaltete Identitätsauthentifizierung verbindet. Der folgende Befehl konfiguriert Azure Database for PostgreSQL für die Verwendung der verwalteten Identität und Azure rollenbasierte Zugriffssteuerung. Die Befehlsausgabe listet die Aktionen auf, die der Dienstconnector ausführt.

Der Befehl erstellt eine App-Einstellung mit dem Namen AZURE_POSTGRESQL_CONNECTIONSTRING, die Informationen zur Datenbankverbindung enthält. Das Beispiel liest diese Einstellung in azureproject/production.py. Weitere Informationen finden Sie unter Access-Umgebungsvariablen.

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 $DATABASE_NAME \
  --client-type python \
  --system-identity \
  --yes

Die Verbindung ist bereit, wenn der Befehl die flexible PostgreSQL-Serververbindung meldet und die AZURE_POSTGRESQL_CONNECTIONSTRING App-Einstellung erstellt.

Verbinden Sie die Django-Web-App mithilfe von Service Connector mit Azure Storage

Erstelle ein Azure-Speicherkonto und verwende dann az webapp connection create storage-blob, um es mit der Web-App zu verbinden. Der Verbindungsbefehl führt folgende Aktionen aus:

  • Aktiviert die vom System zugewiesene verwaltete Identität in der Web-App.
  • Fügt die Webanwendung mit der Rolle Storage Blob Data Contributor zum Speicherkonto hinzu.
  • Konfiguriert das Netzwerk des Speicherkontos, um den Zugriff von der Web-App zu akzeptieren.
  • Erstellt eine Umgebungsvariable namens AZURE_STORAGEBLOB_RESOURCEENDPOINT für das Azure Storage Konto.

Erstellen eines Azure-Speicherkontos

Erstellen Sie ein allgemeines v2-Speicherkonto mit lokal redundantem Speicher:

az storage account create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $STORAGE_ACCOUNT_NAME \
  --location $LOCATION \
  --sku Standard_LRS \
  --kind StorageV2

Erstelle eine passwortlose Speicherverbindung

Stellen Sie die passwortlose Verbindung zum Speicherkonto her:

az webapp connection create storage-blob \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $APP_SERVICE_NAME \
  --target-resource-group $RESOURCE_GROUP_NAME \
  --account $STORAGE_ACCOUNT_NAME \
  --client-type python \
  --system-identity

Die Verbindung ist bereit, wenn der Befehl die Speicherkontoverbindung meldet und die AZURE_STORAGEBLOB_RESOURCEENDPOINT App-Einstellung erstellt.

Konfigurieren Sie den Beispiel-Fotocontainer

  1. Aktualisieren Sie das Azure Storage-Konto, um einen öffentlichen Lesezugriff auf Blobs für diese archivierte Beispiel-App zu ermöglichen.

    Hinweis

    Dieses archivierte Beispiel verwendet direkte Blob-URLs zur Darstellung von Fotos, sodass das Tutorial einen anonymen Lesezugriff auf den Container photos ermöglicht. Diese Einstellung ist spezifisch für das Sample und wird von Service Connector nicht verlangt. Für Produktionsanwendungen sollten Container privat bleiben und eine kontrollierte Liefermethode verwendet werden, wie zum Beispiel ein authentifizierter Anwendungsendepunkt.

    az storage account update \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --allow-blob-public-access true
    
  2. Weisen Sie Ihrem angemeldeten Benutzer die Berechtigung zu, den Container mit Microsoft Entra-Authentifizierung zu erstellen:

    SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv)
    STORAGE_ACCOUNT_ID=$(az storage account show \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --query id \
      --output tsv)
    
    MSYS_NO_PATHCONV=1 az role assignment create \
      --assignee-object-id $SIGNED_IN_USER_ID \
      --assignee-principal-type User \
      --role "Storage Blob Data Contributor" \
      --scope $STORAGE_ACCOUNT_ID
    

    Die Einstellung MSYS_NO_PATHCONV dieses Befehls verhindert, dass Git Bash auf Windows die Azure-Ressourcen-ID in einen Windows-Pfad umwandelt. Sie hat keine Wirkung in Azure Cloud Shell oder anderen Bash-Umgebungen. Rollenzuweisungen können einige Minuten dauern, bis sie wirksam werden.

  3. Verwenden Sie az storage container create, um einen Container mit dem Namen photos zu erstellen und anonymen Lesezugriff auf Blobs in diesem Container zuzulassen:

    BLOB_ENDPOINT=$(az storage account show \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $STORAGE_ACCOUNT_NAME \
      --query primaryEndpoints.blob \
      --output tsv)
    
    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --auth-mode login \
      --blob-endpoint $BLOB_ENDPOINT
    

    Der Container ist bereit, wenn die Antwort "created": true für den photos-Container anzeigt.

Testen der Python Web-App in Azure

Öffnen und testen Sie die Azure Restaurant Review Web App. Die App verwendet das Azure.Identity-Paket und dessen DefaultAzureCredential Klasse. Wenn die App in Azure ausgeführt wird, erkennt das DefaultAzureCredential automatisch, wann eine verwaltete Identität für den App-Dienst vorhanden ist, und verwendet sie für den Zugriff auf die Azure Storage und Azure Database for PostgreSQL Ressourcen. Die App muss keine Speicherschlüssel, Zertifikate oder Anmeldeinformationen für den Zugriff auf diese Ressourcen bereitstellen.

  • Bei einer lokalen Azure CLI-Installation können Sie az webapp browse verwenden, um die App in Ihrem Standardbrowser zu öffnen:

    az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell kann keinen lokalen Browser öffnen, sodass der Befehl az webapp browse nicht unterstützt wird. Von Cloud Shell aus wählen Sie den Link zur Standard-Domain oben rechts auf der Azure-Portalseite der App aus.

Es kann ein oder zwei Minuten dauern, bis die App gestartet ist. Wenn eine Standard-App-Seite angezeigt wird, die nicht die Beispiel-App ist, warten Sie eine Minute, und aktualisieren Sie den Browser.

Testen Sie die Funktionalität der Beispiel-App, indem Sie ein Restaurant und einige Bewertungen mit Fotos hinzufügen. Die App sollte dem folgenden Screenshot ähneln:

Screenshot der Beispiel-Restaurantbewertungs-Web-App, die einen Restauranteintrag mit einer Kundenbewertung und einem hochgeladenen Foto zeigt.

Bereinigen von Ressourcen

Um laufende Gebühren zu vermeiden, können Sie die ressourcen, die Sie für dieses Lernprogramm erstellt haben, löschen, indem Sie die Ressourcengruppe löschen, die sie enthält. Achten Sie darauf, dass Sie die App oder die Ressourcen nicht mehr benötigen, bevor Sie den Befehl ausführen.

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

Der Befehl kehrt sofort zurück, während Azure die Ressourcen löscht.

Problembehandlung

Wenn die App nicht startet oder sich mit ihren Ressourcen verbindet, überprüfe die App-Service-Deployment-Protokolle, vergewissere dich, dass die AZURE_POSTGRESQL_CONNECTIONSTRING App-Einstellungen AZURE_STORAGEBLOB_RESOURCEENDPOINT existieren, und lasse ein paar Minuten Zeit, damit Azure-Rollenzuweisungen in Kraft treten. Für Probleme beim Start von Python-Apps siehe den folgenden Artikel: