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.
Hinweis
In diesem Tutorial verwenden Sie einen Dienstconnector, um eine Web-App mit einem Datenbankdienst zu verbinden. Dieses Lernprogramm ist eine Änderung des App-Dienst-Lernprogramms, daher werden möglicherweise einige Ähnlichkeiten angezeigt. Schauen Sie sich den Abschnitt "Erstellen eines kennwortlosen Connectors zu Postgres-Datenbank " an, um zu sehen, wo Service Connector ins Spiel kommt und vereinfacht den im App-Dienst-Lernprogramm angegebenen Verbindungsprozess.
In diesem Lernprogramm wird gezeigt, wie Sie eine datengesteuerte Python Django Web-App für Azure App Service bereitstellen und mit einer Azure Database for PostgreSQL Flexible Serverdatenbank verbinden.
In diesem Lernprogramm verwenden Sie die Azure CLI, um die folgenden Aufgaben auszuführen:
- Einrichten der ersten Umgebung mit Python und der Azure CLI
- Erstellen einer Azure Database for PostgreSQL flexiblen Serverdatenbank
- Bereitstellen von Code zum Azure App Service und Herstellen einer Verbindung mit dem flexiblen PostgreSQL-Server
- Aktualisieren Ihres Codes und erneutes Bereitstellen
- Anzeigen von Diagnoseprotokollen
- Verwalten der Web-App im Azure-Portal
Einrichten der anfänglichen Umgebung
Starten Sie von Azure Cloud Shell im Azure Portal, und installieren Sie die kennwortlose Erweiterung des Serviceconnectors für die Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Klonen oder Herunterladen der Beispiel-App
Klonen Sie das Beispielrepository:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Navigieren Sie zum folgenden Ordner:
cd serviceconnector-webapp-postgresql-django-passwordless
In diesem Lernprogramm stellen Sie eine Django Web App für Azure App Service bereit. Die Web-App verwendet eine vom System zugewiesene managed Identity (kennwortlose Verbindungen) mit Azure rollenbasierten Zugriffssteuerung für den Zugriff auf Azure Storage und Azure Database for PostgreSQL - Flexible ServerRessourcen. Der Code verwendet die Klasse DefaultAzureCredential der Azure Identity-Clientbibliothek für Python. Die klasse DefaultAzureCredential erkennt automatisch, dass eine verwaltete Identität für den App-Dienst vorhanden ist und verwendet sie für den Zugriff auf andere Azure-Ressourcen.
- Produktionseinstellungen befinden sich in der Datei "azuresite/production.py ". Entwicklungseinstellungen befinden sich in azuresite/settings.py.
- Die App verwendet Produktionseinstellungen, wenn die
WEBSITE_HOSTNAMEUmgebungsvariable festgelegt wird. Azure App Service legt diese Variable automatisch auf die URL der Web-App fest, z. B.msdocs-django.azurewebsites.net.
Die Produktionseinstellungen gelten nicht speziell für App Service, sondern ermöglichen die Konfiguration von Django für die Ausführung in einer beliebigen Produktionsumgebung. Weitere Informationen finden Sie in der Checkliste für die Django-Bereitstellung. Weitere Informationen zu einigen Änderungen finden Sie unter Production-Einstellungen für Django auf Azure.
Treten Probleme auf? Informieren Sie uns darüber.
Erstellen einer Postgres-Datenbank in Azure
Richten Sie die für das Tutorial erforderlichen Umgebungsvariablen fest.
LOCATION="eastus" 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="{your database password}"Wichtig
Die
ADMIN_PWmuss 8 bis 128 Zeichen aus drei der folgenden Kategorien enthalten: englische Großbuchstaben, englische Kleinbuchstaben, Zahlen und nicht-alphanumerische Zeichen. Verwenden Sie beim Erstellen von Benutzernamen oder Kennwörtern nicht das Zeichen$. Später erstellen Sie Umgebungsvariablen mit diesen Werten, bei denen das Zeichen$eine bestimmte Bedeutung innerhalb des Linux-Containers hat, der zum Ausführen Python Apps verwendet wird.Erstellen Sie eine Ressourcengruppe (Sie können den Namen bei Bedarf ändern). Der Ressourcengruppenname wird zwischengespeichert und automatisch auf nachfolgende Befehle angewandt.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONErstellen Sie den Datenbankserver. Wenn Sie aufgefordert werden, den Zugriff auf die aktuelle Client-IP-Adresse zu aktivieren, geben Sie
y"Ja" ein. Dieser Vorgang dauert einige Minuten: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 --active-directory-auth EnabledWenn der Befehl "
az" nicht erkannt wird, stellen Sie sicher, dass die Azure CLI installiert ist, wie in "Einrichtung Ihrer anfänglichen Umgebung" beschrieben.Der Befehl "az postgres flexible-server create " führt die folgenden Aktionen aus, die einige Minuten dauern:
- Erstellen Sie eine Standardressourcengruppe, wenn noch kein zwischengespeicherter Name vorhanden ist.
- Erstellen Sie einen PostgreSQL Flexible Server:
- Mit dem Servernamen, der mit dem
--nameParameter angegeben ist. Der Name muss für alle Azure eindeutig sein. - Mit der mit dem
--sku-name-Parameter angegebenen SKU.
- Mit dem Servernamen, der mit dem
- Erstellen Sie ein Administratorkonto mit einem Benutzernamen und Kennwort, die mit den Parametern
--admin-userund--admin-passwordangegeben sind. - Erstellen Sie eine Datenbank, deren Name mit dem
--database-nameParameter spezifiziert ist.
Konfigurieren Sie eine Firewall-Regel auf Ihrem Server mit dem Befehl az postgres flexible-server firewall-rule create. Diese Regel ermöglicht der lokalen Umgebung Zugriff auf den Server. (Wenn Sie aufgefordert werden, den Zugriff von Ihrer Client-IP-Adresse aus dem vorherigen Schritt zu aktivieren, können Sie diesen Schritt überspringen.)
IP_ADDRESS=<your IP> 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_ADDRESSVerwenden Sie ein beliebiges Tool oder eine Website, die Ihre IP-Adresse anzeigt, um
<your IP>im Befehl zu ersetzen. Sie können zum Beispiel die Website Was ist meine IP-Adresse? verwenden.Erstellen Sie eine Datenbank namens
restaurantmit dem Befehl az postgres flexible-server execute.az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Bereitstellen des Codes für Azure App Service
In diesem Abschnitt erstellen Sie einen App-Host in der App Service-App, verbinden die App mit der Postgres-Datenbank und stellen anschließend Ihren Code auf dem Host bereit.
Erstellen der App Service-App
Stellen Sie im Terminal sicher, dass Sie sich im Repositoryordner "serviceconnector-webapp-postgresql-django-passwordless " befinden, der den App-Code enthält.
Führen Sie den folgenden
az webapp upBefehl aus, um den App-Diensthost für die App zu erstellen:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1Die sku definiert die Größe (CPU, Speicher) und die Kosten des App Service-Plans. Der Dienstplan B1 (Basic) verursacht geringe Kosten im Rahmen Ihres Azure-Abonnements. Für eine vollständige Liste der App Service-Pläne sehen Sie die Seite App Service – Preise an.
Dieser Befehl führt die folgenden Aktionen aus, die einige Minuten dauern können, wobei Ressourcengruppe und Speicherort aus dem vorherigen
az group createBefehl (die Gruppe$RESOURCE_GROUP_NAMEin dereastusRegion in diesem Beispiel) zwischengespeichert werden.- Erstellen Sie einen App Service-Plan im Standard-Preisniveau (B1). Sie können
--skuweglassen, um Standardwerte zu verwenden. - Erstellen Sie die App Service-App.
- Aktivieren Sie die Standardprotokollierung für die App.
- Das Repository hochladen per ZIP-Bereitstellung mit aktivierter Buildautomatisierung.
- Erstellen Sie einen App Service-Plan im Standard-Preisniveau (B1). Sie können
Konfigurieren Sie App Service zur Verwendung von start.sh im Repo mit dem Befehl az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Erstellen eines kennwortlosen Connectors für die Postgres-Datenbank
Nachdem der Code jetzt für App Service bereitgestellt wurde, besteht der nächste Schritt darin, die App mit der Postgres-Datenbank in Azure zu verbinden. Der App-Code erwartet, dass Datenbankinformationen in einer Umgebungsvariable namens AZURE_POSTGRESQL_CONNECTIONSTRING für den flexiblen PostgreSQL-Server und eine Umgebungsvariable namens AZURE_STORAGEBLOB_RESOURCEENDPOINT für Azure Storage Konto gefunden werden.
Die Dienstconnector-Befehle konfigurieren Azure Storage und Azure-Datenbank für PostgreSQL-Ressourcen zur Verwendung der verwalteten Identität und Azure-rollenbasierte Zugriffssteuerung. Die Befehle erstellen App-Einstellungen im App Service, die Ihre Web-App mit diesen Ressourcen verbinden. Die Ausgabe aus den Befehlen listet die Aktionen des Dienstconnectors auf, die zum Aktivieren der kennwortlosen Funktion ausgeführt werden.
Fügen Sie einen PostgreSQL Service-Connector mit dem Befehl az webapp connection create postgres-flexible hinzu. Die systemseitig zugewiesene verwaltete Identität wird verwendet, um die Web-App bei der Zielressource zu authentifizieren, in diesem Fall PostgreSQL.
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
Hinweis
Wird die Fehlermeldung „Das Abonnement ist nicht für die Verwendung des Ressourcenanbieters registriert“ angezeigt, führen Sie az provider register -n Microsoft.ServiceLinker aus, um den Dienstconnector-Ressourcenanbieter zu registrieren. Führen Sie anschließend erneut den Verbindungsbefehl aus.
In Ihrem Python Code greifen Sie auf diese Einstellungen als Umgebungsvariablen mit Anweisungen wie os.environ.get('AZURE_POSTGRESQL_HOST') zu. Weitere Informationen finden Sie unter Access-Umgebungsvariablen.
Treten Probleme auf? Lesen Sie zunächst das Handbuch zur Problembehandlung, andernfalls informieren Sie uns darüber.
Erstellen eines Speicherkontos und Herstellen einer Verbindung mit diesem
- Verwenden Sie den Befehl az webapp connection create storage-blob, um ein Speicherkonto zu erstellen und einen Dienstconnector zu konfigurieren, der die folgenden Einstellungen vornimmt:
Aktivieren der systemseitig zugewiesenen verwalteten Identität für die Web-App
Fügt die Web-App mit der Rolle Speicher Blob Datenmitwirkender zum neu erstellten Speicherkonto hinzu.
Konfigurieren des Speicherkontonetzwerks, um den Zugriff von der Web-App zu akzeptieren
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, damit die Restaurant-App-Benutzer öffentlichen Zugriff auf Bilder über den Blob-Dienst erhalten.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessErstellen Sie einen Container namens
photosim Speicherkonto mit dem Befehl az storage container create. Lassen Sie den anonymen Lesezugriff (öffentlich) auf Blobs im neu erstellten Container zu:# 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
Das Beispiel Python-App verwendet das Paket azure.identity und dessen DefaultAzureCredentialKlasse. Wenn die App in Azure ausgeführt wird, erkennt DefaultAzureCredential automatisch, ob eine verwaltete Identität für den App-Dienst vorhanden ist, und verwendet sie in diesem Fall für den Zugriff auf andere Azure-Ressourcen (Speicher und PostgreSQL in diesem Fall). Sie müssen dem App Service keine Storage-Schlüssel, Zertifikate oder Anmeldeinformationen zur Verfügung stellen, um auf diese Ressourcen zuzugreifen.
Navigieren Sie zur bereitgestellten Anwendung unter der URL
http://$APP_SERVICE_NAME.azurewebsites.net.Es kann ein oder zwei Minuten dauern, bis die App gestartet ist. Wenn Sie eine Standardseite der App sehen, die nicht die Standardseite der Beispielanwendung 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 für das Restaurant hinzufügen. Das Restaurant und die Bewertungsinformationen werden in Azure Database for PostgreSQL gespeichert und die Fotos werden in Azure Storage gespeichert. Hier ist ein Beispiel-Screenshot:
Bereinigen von Ressourcen
Wenn Sie die App beibehalten oder weitere Lernprogramme ausführen möchten, fahren Sie mit den nächsten Schritten fort. Löschen Sie andernfalls die für dieses Tutorial erstellte Ressourcengruppe, um laufende Gebühren zu vermeiden:
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Wenn Sie die Ressourcengruppe löschen, wird auch die Zuordnung aller darin enthaltenen Ressourcen aufgehoben, und die Ressourcen werden gelöscht. Stellen Sie sicher, dass Sie die Ressourcen in der Gruppe nicht mehr benötigen, bevor Sie den Befehl ausführen.
Das Löschen aller Ressourcen kann einige Zeit dauern. Mit --no-wait dem Argument kann der Befehl sofort zurückgegeben werden.
Treten Probleme auf? Informieren Sie uns darüber.