Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Erstellen Sie eine Python Django Web-App, und stellen Sie sie in Azure App Service bereit.
- Erstellen Sie einen Azure Database for PostgreSQL flexiblen Server und eine flexible Datenbank.
- Erstellen Sie ein Azure StorageKonto und einen Container.
- Verbinden Sie die Webanwendung mit der Datenbank und dem Speichercontainer über Service Connector mit verwalteter Identitätsauthentifizierung .
- Interagieren Sie mit der Web-App.
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:
Richten Sie Ihre Umgebung ein
Registrieren Sie die
Microsoft.ServiceLinkerundMicrosoft.DBforPostgreSQLRessourcenanbieter für Ihr Abonnement.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstallieren Sie die neueste Version der passwortlosen Service Connector-Erweiterung. Der Parameter
--upgradeaktualisiert 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.
Klonen Sie das Beispiel-App-Repository.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativ 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.
Wechseln Sie mit
cd serviceconnector-webapp-postgresql-django-passwordlessund 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.
-
LOCATIONmuss 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.
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"Lies das PostgreSQL-Administrator-Passwort, ohne es anzuzeigen oder deiner Shell-Historie hinzuzufügen:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoErstellen 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.
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.txtErstellen 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"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=trueVom 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.zipDer 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.
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 EnabledDer Befehl gelingt, wenn der Bereitstellungszustand des flexiblen PostgreSQL-Servers ist
Succeeded.Entfernen Sie das Administratorpasswort aus der aktuellen Shell, nachdem der Server erstellt wurde:
unset ADMIN_PWErstellen 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_RESOURCEENDPOINTfü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
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
photosermö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 trueWeisen 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_IDDie Einstellung
MSYS_NO_PATHCONVdieses 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.Verwenden Sie az storage container create, um einen Container mit dem Namen
photoszu 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_ENDPOINTDer Container ist bereit, wenn die Antwort
"created": truefür denphotos-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 browseverwenden, um die App in Ihrem Standardbrowser zu öffnen:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell kann keinen lokalen Browser öffnen, sodass der Befehl
az webapp browsenicht 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:
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: