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 Web-App mit dem Datenbank- und Speichercontainer mithilfe von 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:
- Installieren Sie Azure CLI 2.30.0 oder höher. Führen Sie zum Überprüfen der Version
az --versionaus. Führen Sie zum Upgrade die Ausführung ausaz upgrade. - Melden Sie sich mit
az loginbei Azure an, und folgen Sie den Eingabeaufforderungen.
- Installieren Sie Azure CLI 2.30.0 oder höher. Führen Sie zum Überprüfen der Version
Richten Sie Ihre Umgebung ein
Stellen Sie sicher, dass Ihr Abonnement registriert ist, um die
Microsoft.ServiceLinkerundMicrosoft.DBforPostgreSQL-Ressourcenanbieter zu verwenden. Wenn nicht, führen Sieaz provider register -n Microsoft.[name of service]aus, um die Anbieter zu registrieren.Installieren Sie die folgenden Azure CLI Erweiterungen:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Klonen der Beispiel-App
Klonen Sie das Beispiel-App-Repository.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativ können Sie die App von https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless herunterladen und in einen Ordner namens serviceconnector-webapp-postgresql-django-passwordless entpacken.
Wechseln Sie in das Verzeichnis des Repo-Ordners mit
cd serviceconnector-webapp-postgresql-django-passwordlessund führen Sie alle verbleibenden Befehle dort aus.
In der Beispiel-App befinden sich die Web App-Produktionseinstellungen in der Datei "azuresite/production.py ". Entwicklungseinstellungen befinden sich in azuresite/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. Für Azure Postgres-Verbindungszeichenfolgen legt der App-Dienst diese Variable automatisch auf die URL der Web-App fest, z. B. https://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 ein ausreichendes Kontingent verfügt, um die Ressourcen zu erstellen und die Azure Database for PostgreSQL für Ihr Abonnement nicht einzuschränken. - Das
ADMIN_PWMuss mindestens 8 bis 128 Zeichen in mindestens drei der vier Kategorien Großbuchstaben, Kleinbuchstaben, Ziffern und nichtalphanumerische Zeichen enthalten, ausgenommen$.
Richten Sie die folgenden Umgebungsvariablen ein, und ersetzen Sie die
<region>Platzhalter<database password>durch gültige Werte.LOCATION="<region>" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="<database password>"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, und stellen Sie den Beispiel-App-Code auf diesem Host bereit. Der az webapp up Befehl führt die folgenden Aktionen aus:
- Erstellt einen App Service-Plan im Preisniveau "Basic (B1)".
- Erstellt die App Service-App.
- Aktiviert die Standardprotokollierung für die App.
- Lädt das Repository mithilfe der ZIP-Bereitstellung mit aktivierter Buildautomatisierung hoch.
- Erstellt die App.
Im Code definiert der sku Code die CPU, den Arbeitsspeicher und die Kosten des App Service-Plans. Der Basisdienstplan (B1) verursacht in Ihrem Azure-Abonnement geringe Kosten. Sie können den --sku Parameter weglassen, um die Standard-SKU zu verwenden, in der Regel P1v3 (Premium v3). Eine vollständige Liste der App Service-Pläne finden Sie unter App Service-Preise.
Führen Sie im Repositoryordner serviceconnector-webapp-postgresql-django-passwordless den folgenden
az webapp upBefehl aus:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Hinweis
Die Bereitstellung dauert einige Minuten, und der Befehl kann hängen bleiben oder eine Zeitüberschreitung verursachen, insbesondere bei einer Basic SKU. Sobald die App erfolgreich erstellt wurde und die Ausgabe angezeigt wird
Starting the site, können Sie den Befehl beenden, indem Sie STRG+C auswählen.Konfigurieren Sie die App so, dass das Repository start.sh Datei verwendet wird, indem Sie den Befehl "az webapp config set" ausführen.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Erstellen der Postgres-Datenbank in Azure
Erstellen Sie die Azure Database for PostgreSQL-Datenbank zum Speichern von App-Informationen. Der Befehl az postgres flexible-server create erstellt einen Azure Database for PostgreSQL flexible Server in der angegebenen Ressourcengruppe, die:
- Der im
--nameParameter angegebene Servername. Der Name muss für alle Azure eindeutig sein. - SKU im
--sku-nameParameter angegeben. - Benutzername und Kennwort des Administratorkontos, die in den Parametern
--admin-userund--admin-passwordangegeben sind.
Erstellen Sie den Azure Database for PostgreSQL-Server. Wenn Sie aufgefordert werden, den Zugriff auf die aktuelle Client-IP-Adresse zu aktivieren, geben Sie
y"Ja" ein.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 EnabledWenn Sie nicht aufgefordert werden, den Zugriff auf Ihre aktuelle Client-IP-Adresse zu aktivieren, konfigurieren Sie eine Firewallregel auf Ihrem Server mit dem Befehl "az postgres flexible-server firewall-rule create ". Diese Regel ermöglicht der lokalen Umgebung Zugriff auf den Server.
IP_ADDRESS=<your IP address> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESSTipp
Verwenden Sie ein beliebiges Tool oder eine Website, die Ihre IP-Adresse anzeigt, um
<your IP address>im Befehl zu ersetzen. Sie können z. B. "Meine IP-Adresse" verwenden.Erstellen Sie eine Datenbank mit dem Namen
restaurantauf dem Server, indem Sie den Befehl az postgres flexible-server execute verwenden.az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Erstellen einer kennwortlosen Dienstverbindung
Verwenden Sie az webapp connection create postgres-flexible, um einen Dienst-Connector hinzuzufügen, der die Azure-Webanwendung mit der Postgres-Datenbank verbindet und dabei eine kennwortlose verwaltete Identitätsauthentifizierung nutzt. 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 Umgebungsvariable namens AZURE_POSTGRESQL_CONNECTIONSTRING , die die Datenbankverbindungsinformationen für die App bereitstellt. Der App-Code greift auf App-Umgebungsvariablen mit Befehlen wie os.environ.get('AZURE_POSTGRESQL_HOST') zu. 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 restaurant \
--client-type python \
--system-identity
Speicherkonto erstellen und verbinden
Verwenden Sie az webapp connection create storage-blob, um ein Azure-Speicherkonto und einen Dienstanschluss zu erstellen. Der Befehl führt die folgenden Aktionen aus:
- Aktiviert die vom System zugewiesene verwaltete Identität in der Web-App.
- Fügt die Web-App mit der Rolle Storage Blob Data Contributor zum neuen 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.
Führen Sie den folgenden Befehl aus, um das Speicherkonto und die Verbindung zu erstellen:
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))Aktualisieren Sie das Speicherkonto, um öffentlichen Blob-Zugriff für App-Benutzer zum Zugriff auf Fotos zu ermöglichen.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessVerwenden Sie az storage container create, um einen Container namens
photosim Speicherkonto zu erstellen, und erlauben Sie anonymen öffentlichen Lesezugriff auf Blobs im neuen Container.# Set the BLOB_ENDPOINT variable BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g') echo $BLOB_ENDPOINT # Create the storage container using the BLOB_ENDPOINT variable az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINT
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.azurewebsites.net --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 besteht die einfachste Möglichkeit zum Öffnen der Web-App darin, die Default-Domäne Link oben rechts auf der Azure Portalseite der App auszuwählen.
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
Das Löschen aller Ressourcen kann einige Zeit dauern. Mit --no-wait dem Argument kann der Befehl sofort zurückgegeben werden.
Problembehandlung
Wenn beim Ausführen dieses Tutorials Probleme auftreten, sehen Sie sich die folgenden Ressourcen an: