Tutorial: Verwenden des Dienstconnectors zum Erstellen einer Django-App mit Postgres für Azure App Service
Hinweis
In diesem Tutorial verwenden Sie den Dienstconnector, mit dem Sie Ihre Web-App einfacher mit dem Datenbankdienst verbinden können. Das Tutorial hier ist eine Abwandlung des Tutorials zu App Service zur Verwendung dieses Features, sodass Sie Ähnlichkeiten erkennen werden. In Abschnitt Konfigurieren von Umgebungsvariablen zum Herstellen einer Verbindung mit der Datenbank in diesem Tutorial erfahren Sie, wo der Dienstconnector ins Spiel kommt und den im App Service-Tutorial beschriebenen Verbindungsaufbau vereinfacht.
In diesem Tutorial erfahren Sie, wie Sie eine datengesteuerte Python-Web-App (Django) in Azure App Service bereitstellen und mit einer Azure Database for Postgres-Datenbank verbinden. Sie können PostgreSQL – Flexible Server auch ausprobieren, indem Sie die oben genannte Option auswählen. Flexible Server bietet einen einfacheren Bereitstellungsmechanismus und niedrigere laufende Kosten.
In diesem Tutorial wird die Azure CLI verwendet, um folgende Aufgaben auszuführen:
- Einrichten der anfänglichen Umgebung mit Python und der Azure CLI
- Erstellen einer Azure Database for PostgreSQL-Datenbankinstanz
- Bereitstellen von Code für Azure App Service und Herstellen einer Verbindung mit PostgresSQL
- Aktualisieren Ihres Codes und erneutes Bereitstellen
- Anzeigen von Diagnoseprotokollen
- Verwalten der Web-App im Azure-Portal
In diesem Tutorial wird veranschaulicht, wie Sie eine datengesteuerte Python-Web-App (Django) für Azure App Service bereitstellen und mit einer Datenbankinstanz von Azure Database for PostgreSQL – Flexible Server verbinden. Wenn Sie PostgreSQL – Flexible Server nicht verwenden können, wählen Sie oben die Option „Single Server“ aus.
In diesem Tutorial wird die Azure CLI verwendet, um folgende Aufgaben auszuführen:
- Einrichten der anfänglichen Umgebung mit Python und der Azure CLI
- Erstellen einer Datenbank mit Azure Database for PostgreSQL – Flexible Server
- Bereitstellen von Code für Azure App Service und Herstellen einer Verbindung mit PostgreSQL – Flexible Server
- Aktualisieren Ihres Codes und erneutes Bereitstellen
- Anzeigen von Diagnoseprotokollen
- Verwalten der Web-App im Azure-Portal
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Einrichten der anfänglichen Umgebung
Installieren Sie mindestens Python 3.8. Führen Sie in einem Terminalfenster den folgenden Code aus, um zu überprüfen, ob Sie mindestens über die Python-Version 3.8 verfügen:
python3 --version
Installieren Sie mindestens die Version 2.30.0 der Azure CLI. Führen Sie den Befehl
az --version
aus, um zu überprüfen, ob Sie mindestens über die Azure CLI-Version 2.30.0 verfügen. Falls Sie ein Upgrade durchführen müssen, führen Sieaz upgrade
aus (erfordert mindestens die Version 2.30.0).Verwenden Sie die CLI mit
az login
, um sich bei Azure anzumelden. Dieser Befehl öffnet einen Browser zum Erfassen Ihrer Anmeldeinformationen. Wenn der Befehl abgeschlossen ist, wird eine JSON-Ausgabe mit Informationen zu Ihren Abonnements angezeigt. Nachdem Sie sich angemeldet haben, können Sie Azure-Befehle mit der Azure CLI ausführen, um Ressourcen in Ihrem Abonnement zu verwenden.
Klonen oder Herunterladen der Beispiel-App
Klonen Sie das Beispielrepository:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django.git
Navigieren Sie zum folgenden Ordner:
cd serviceconnector-webapp-postgresql-django
Verwenden Sie den Branch „flexible-server“ des Beispiels, der einige erforderliche Änderungen enthält, z. B. in Bezug auf die Vorgehensweise beim Festlegen der URL des Datenbankservers und das Hinzufügen von 'OPTIONS': {'sslmode': 'require'}
zur Django-Datenbankkonfiguration gemäß den Anforderungen von Azure PostgreSQL – Flexible Server.
git checkout flexible-server
Das Beispiel „djangoapp“ enthält die datengesteuerte Django-Umfrage-App, die Sie erhalten, indem Sie die in der Django-Dokumentation unter Schreiben Ihrer ersten Django-App beschriebenen Schritte ausführen. Der Einfachheit halber wird Ihnen hier die fertige App zur Verfügung gestellt.
Das Beispiel wird außerdem für die Ausführung in einer Produktionsumgebung wie App Service angepasst:
- Die Produktionseinstellungen befinden sich in der Datei azuresite/production.py. Die Entwicklungseinstellungen befinden sich in azuresite/settings.py.
- Von der App werden Produktionseinstellungen verwendet, wenn die Umgebungsvariable
WEBSITE_HOSTNAME
festgelegt ist. Von Azure App Service wird diese Variable automatisch auf die URL der Web-App festgelegt, 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 Bereitstellungsprüfliste für Django. Ausführliche Informationen zu einigen Änderungen finden Sie unter Produktionseinstellungen für Django in Azure.
Treten Probleme auf? Informieren Sie uns darüber.
Erstellen einer Postgres-Datenbankinstanz in Azure
Aktivieren Sie das Zwischenspeichern von Parametern mit der Azure-Befehlszeilenschnittstelle, damit Sie diese Parameter nicht bei jedem Befehl angeben müssen. (Zwischengespeicherte Werte werden im Ordner .azure gespeichert.)
az config param-persist on
Installieren Sie die Erweiterung
db-up
für die Azure CLI:az extension add --name db-up
Wird der Befehl
az
nicht erkannt, sollten Sie sich vergewissern, dass die Azure CLI wie unter Einrichten der anfänglichen Umgebung beschrieben installiert wurde.Erstellen Sie mithilfe des Befehls
az postgres up
die Postgres-Datenbank in Azure:az postgres up --resource-group ServiceConnector-tutorial-rg --location eastus --sku-name B_Gen5_1 --server-name <postgres-server-name> --database-name pollsdb --admin-user <admin-username> --admin-password <admin-password> --ssl-enforcement Enabled
Ersetzen Sie die folgenden Platzhaltertexte durch Ihre eigenen Daten:
Ersetzen Sie
<postgres-server-name>
durch einen innerhalb von Azure eindeutigen Namen. (Der Serverendpunkt isthttps://<postgres-server-name>.postgres.database.azure.com
.) Ein bewährtes Muster ist eine Kombination aus Ihrem Firmennamen und einem anderen eindeutigen Wert.Geben Sie für
<admin-username>
und<admin-password>
Anmeldeinformationen ein, um einen Administratorbenutzer für diesen Postgres-Server zu erstellen. Der Administratorbenutzername darf nicht azure_superuser, azure_pg_admin, admin, administrator, root, guest oder public lauten. Er kann nicht mit pg_ beginnen. Das Kennwort muss 8 bis 128 Zeichen aus drei der folgenden Kategorien enthalten: Englische Großbuchstaben, englische Kleinbuchstaben, Zahlen (0 bis 9) und nicht alphanumerische Zeichen (z. B. !, #, %). Das Kennwort darf keinen Benutzernamen enthalten.Verwenden Sie nicht das Zeichen
$
im Benutzernamen oder Kennwort. Später erstellen Sie Umgebungsvariablen mit diesen Werten. Dabei hat das Zeichen$
innerhalb des Linux-Containers, der zum Ausführen von Python-Apps verwendet wird, eine besondere Bedeutung.Der hier verwendete Tarif
*B_Gen5_1*
(Basic, 5. Generation, ein Kern) ist der günstigste. Lassen Sie bei Produktionsdatenbanken das Argument--sku-name
weg, um stattdessen den Tarif „GP_Gen5_2“ (Universell, 5. Generation, zwei Kerne) zu verwenden.
Durch diesen Befehl werden folgende Aktionen ausgeführt, was einige Minuten dauern kann:
- Erstellen einer Ressourcengruppe namens
ServiceConnector-tutorial-rg
(sofern noch nicht vorhanden) - Erstellen eines nach dem Argument
--server-name
benannten Postgres-Servers - Erstellen eines Administratorkontos mithilfe der Argumente
--admin-user
und--admin-password
. Sie können diese Argumente weglassen, damit der Befehl eindeutige Anmeldeinformationen für Sie generiert. - Erstellen einer nach dem Argument
--database-name
benanntenpollsdb
-Datenbank - Ermöglichen des Zugriffs über Ihre lokale IP-Adresse
- Ermöglichen des Zugriffs über Azure-Dienste
- Erstellen eines neuen Datenbankbenutzers mit Zugriff auf die Datenbank
pollsdb
Die Schritte können zwar auch separat mit anderen Befehlen vom Typ
az postgres
undpsql
ausgeführt werden, mitaz postgres up
werden jedoch alle Schritte gemeinsam ausgeführt.Nach Abschluss der Befehlsausführung wird ein JSON-Objekt mit verschiedenen Verbindungszeichenfolgen für die Datenbank sowie mit der Server-URL, einem generierten Benutzernamen (beispielsweise „joyfulKoala@msdocs-djangodb-12345“) und einem GUID-Kennwort zurückgegeben.
Wichtig
Kopieren Sie den Benutzernamen und das Kennwort zur späteren Verwendung in diesem Tutorial in eine temporäre Textdatei.
Tipp
-l <location-name>
kann auf eine beliebige Azure-Region festgelegt werden. Sie können die Regionen, die für Ihr Abonnement verfügbar sind, mit demaz account list-locations
-Befehl abrufen. Legen Sie bei Produktions-Apps für Ihre Datenbank und Ihre App den gleichen Standort fest.
Aktivieren Sie das Zwischenspeichern von Parametern mit der Azure-Befehlszeilenschnittstelle, damit Sie diese Parameter nicht bei jedem Befehl angeben müssen. (Zwischengespeicherte Werte werden im Ordner .azure gespeichert.)
az config param-persist on
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 ServiceConnector-tutorial-rg --location eastus
Erstellen Sie den Datenbankserver (der Vorgang dauert einige Minuten):
az postgres flexible-server create --sku-name Standard_B1ms --public-access all
Wird der Befehl
az
nicht erkannt, sollten Sie sich vergewissern, dass die Azure CLI wie unter Einrichten der anfänglichen Umgebung beschrieben installiert wurde.Der Befehl az postgres flexible-server create führt die folgenden Aktionen aus, die einige Minuten in Anspruch nehmen:
- Erstellen Sie eine Standardressourcengruppe, wenn noch kein zwischengespeicherter Name vorhanden ist.
- Erstellen Sie eine Instanz von PostgreSQL – Flexible Server:
- Standardmäßig verwendet der Befehl einen generierten Namen wie
server383813186
. Sie können mit dem Parameter--name
einen eigenen Namen angeben. Der Name muss in ganz Azure eindeutig sein. - Der Befehl verwendet den kostengünstigsten Tarif
Standard_B1ms
. Lassen Sie das Argument--sku-name
aus, um den StandardtarifStandard_D2s_v3
zu verwenden. - Der Befehl verwendet die Ressourcengruppe und den Speicherort, die im vorherigen Befehl
az group create
zwischengespeichert wurden. In diesem Beispiel handelt es sich dabei um die RessourcengruppeServiceConnector-tutorial-rg
in der Regioneastus
.
- Standardmäßig verwendet der Befehl einen generierten Namen wie
- Erstellen Sie ein Administratorkonto mit einem Benutzernamen und einem Kennwort. Sie können diese Werte direkt in den Parametern
--admin-user
und--admin-password
angeben. - Erstellen Sie eine Datenbank mit der Standardbezeichnung
flexibleserverdb
. Mit dem Parameter--database-name
können Sie einen eigenen Datenbanknamen angeben. - Aktivieren Sie den vollständigen öffentlichen Zugriff, den Sie mithilfe des Parameters
--public-access
steuern können.
Kopieren Sie nach Abschluss des Befehls die JSON-Ausgabe des Befehls in eine Datei, da Sie die Werte aus der Ausgabe, insbesondere Host, Benutzername und Kennwort sowie den Datenbanknamen, später in diesem Tutorial benötigen.
Treten Probleme auf? Informieren Sie uns darüber.
Bereitstellen des Codes in 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
Vergewissern Sie sich im Terminal, dass Sie sich im Repositoryordner djangoapp befinden, der den App-Code enthält.
Erstellen Sie mithilfe des Befehls
az webapp up
eine App Service-App (den Hostprozess):az webapp up --resource-group ServiceConnector-tutorial-rg --location eastus --plan ServiceConnector-tutorial-plan --sku B1 --name <app-name>
- Achten Sie beim
--location
-Argument darauf, einen Standort zu verwenden, der vom Dienstconnector unterstützt wird. - Ersetzen Sie <app-name> durch einen innerhalb von Azure eindeutigen Namen. (Der Serverendpunkt ist
https://<app-name>.azurewebsites.net
). Gültige Zeichen für <app-name> sindA
-Z
,0
-9
und-
. Ein bewährtes Muster ist eine Kombination aus Ihrem Firmennamen und einer App-ID.
Durch diesen Befehl werden folgende Aktionen ausgeführt, was einige Minuten dauern kann:
- Erstellen einer Ressourcengruppe (sofern noch nicht vorhanden). Verwenden Sie in diesem Befehl die gleiche Ressourcengruppe, in der Sie zuvor schon die Datenbank erstellt haben.
- Erstellen Sie den App Service-PlanDjangoPostgres-tutorial-plan im Basic-Tarif (B1), sofern er nicht vorhanden ist.
--plan
und--sku
sind optional. - Erstellen der App Service-App (sofern noch nicht vorhanden)
- Aktivieren der Standardprotokollierung für die App (sofern noch nicht aktiviert)
- Hochladen des Repositorys per ZIP-Bereitstellung mit aktivierter Buildautomatisierung
- Zwischenspeichern allgemeiner Parameter wie dem Namen der Ressourcengruppe und dem App Service-Plan in der Datei .azure/config. Daher müssen bei späteren Befehlen nicht noch mal die gleichen Parameter angegeben werden. Wenn Sie die App also beispielsweise erneut bereitstellen möchten, nachdem Sie Änderungen vorgenommen haben, können Sie
az webapp up
einfach ohne Parameter erneut ausführen. Bei Befehlen von CLI-Erweiterungen (beispielsweiseaz postgres up
) wird der Cache dagegen aktuell nicht genutzt. Daher müssen hier die Ressourcengruppe und der Standort mit der anfänglichen Verwendung vonaz webapp up
angegeben werden.
- Achten Sie beim
Vergewissern Sie sich im Terminal, dass Sie sich im Repositoryordner djangoapp befinden, der den App-Code enthält.
Wechseln Sie zum Branch
flexible-server
der Beispiel-App. Dieser Branch enthält eine spezifische Konfiguration, die für PostgreSQL – Flexible Server erforderlich ist:git checkout flexible-server
Führen Sie den folgenden Befehl
az webapp up
aus, um den App Service-Host für die App zu erstellen:az webapp up --name <app-name> --sku B1
Dieser Befehl führt die folgenden Aktionen aus, die einige Minuten dauern können. Dabei werden die Ressourcengruppe und der Standort
az group create
(in diesem Beispiel die GruppePython-Django-PGFlex-rg
in der Regioneastus
) verwendet, die im vorherigen Befehl zwischengespeichert wurden.- Erstellen Sie den App Service-Plan im Basic-Tarif (B1). Sie können
--sku
auslassen, um die Standardwerte zu verwenden. - Erstellen Sie die App Service-App.
- Aktivieren Sie die Standardprotokollierung für die App.
- Hochladen des Repositorys per ZIP-Bereitstellung mit aktivierter Buildautomatisierung
- Erstellen Sie den App Service-Plan im Basic-Tarif (B1). Sie können
Nach erfolgreicher Bereitstellung wird eine JSON-Ausgabe wie im folgenden Beispiel generiert:
Treten Probleme auf? Lesen Sie zunächst das Handbuch zur Problembehandlung, andernfalls informieren Sie uns darüber.
Konfigurieren der Umgebungsvariablen für die Datenbankverbindung
Nachdem der Code nun in App Service bereitgestellt ist, muss als Nächstes eine Verbindung zwischen der App und der Postgres-Datenbank in Azure hergestellt werden.
Vom App-Code werden Datenbankinformationen in vier Umgebungsvariablen namens AZURE_POSTGRESQL_HOST
, AZURE_POSTGRESQL_NAME
, AZURE_POSTGRESQL_USER
und AZURE_POSTGRESQL_PASS
erwartet.
Erstellen Sie mithilfe des folgenden az connection create
-Befehls App-Einstellungen, um Umgebungsvariablen in App Service festzulegen.
az webapp connection create postgres --client-type django
Die Ressourcengruppe sowie der App- und Datenbankname werden den zwischengespeicherten Werten entnommen. Sie müssen während der Ausführung dieses Befehls das Administratorkennwort Ihrer Postgres-Datenbank angeben.
- Der Befehl erstellt wie vom App-Code erwartet die Einstellungen AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME, AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASS.
- Wenn Sie Ihre Administratoranmeldeinformationen vergessen haben, können Sie sie mit diesem Befehl zurücksetzen.
az webapp connection create postgres-flexible --client-type django
Die Ressourcengruppe sowie der App- und Datenbankname werden den zwischengespeicherten Werten entnommen. Sie müssen während der Ausführung dieses Befehls das Administratorkennwort Ihrer Postgres-Datenbank angeben.
- Der Befehl erstellt wie vom App-Code erwartet die Einstellungen AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME, AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASS.
- Wenn Sie Ihre Administratoranmeldeinformationen vergessen haben, können Sie sie mit diesem Befehl zurücksetzen.
Hinweis
Wird die Fehlermeldung „Das Abonnement ist nicht für die Verwendung des Ressourcenanbieters "{0}" 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 wird auf diese Einstellungen in Form von Umgebungsvariablen mit Anweisungen wie os.environ.get('AZURE_POSTGRESQL_HOST')
zugegriffen. Weitere Informationen finden Sie unter Zugreifen auf Umgebungsvariablen.
Treten Probleme auf? Lesen Sie zunächst das Handbuch zur Problembehandlung, andernfalls informieren Sie uns darüber.
Ausführen von Django-Datenbankmigrationen
Durch Django-Datenbankmigrationen wird sichergestellt, dass das Schema in der PostgreSQL-Datenbank in Azure mit Ihrem Code übereinstimmt.
Führen
az webapp ssh
Sie aus, um eine SSH-Sitzung für die Web-App im Browser zu öffnen:az webapp ssh
Führen Sie in der SSH-Sitzung folgende Befehle aus:
# Run database migrations python manage.py migrate # Create the super user (follow prompts) python manage.py createsuperuser
Sollten Fehler auftreten, die mit der Herstellung der Datenbankverbindung zusammenhängen, überprüfen Sie die Werte der im vorherigen Abschnitt erstellten Anwendungseinstellungen.
Durch den Befehl
createsuperuser
werden Sie zur Eingabe von Superuser-Anmeldeinformationen aufgefordert. Verwenden Sie für dieses Tutorial den Standardbenutzernamenroot
, drücken Sie für die E-Mail-Adresse die EINGABETASTE, um sie leer zu lassen, und geben SiePollsdb1
als Kennwort ein.Wenn eine Fehlermeldung angezeigt wird, dass die Datenbank gesperrt ist, stellen Sie sicher, dass Sie den Befehl
az webapp settings
im vorherigen Abschnitt ausgeführt haben. Ohne diese Einstellungen kann der Migrationsbefehl (migrate) nicht mit der Datenbank kommunizieren, was zu einem Fehler führt.
Treten Probleme auf? Lesen Sie zunächst das Handbuch zur Problembehandlung, andernfalls informieren Sie uns darüber.
Erstellen einer Frage für die Umfrage in der App
Öffnen Sie die Website der App. In der App sollten „Polls app“ (Umfrage-App) und „No polls are available“ (Keine Umfragen verfügbar) angezeigt werden, da die Datenbank noch keine spezifischen Umfragen enthält.
az webapp browse
Wird „Anwendungsfehler“ angezeigt, haben Sie wahrscheinlich entweder die erforderlichen Einstellungen im vorherigen Schritt (Konfigurieren der Umgebungsvariablen für die Datenbankverbindung) nicht erstellt, oder diese Werte enthalten Fehler. Führen Sie den Befehl
az webapp config appsettings list
aus, um die Einstellungen zu überprüfen.Nachdem Sie die Einstellungen zum Beheben von Fehlern aktualisiert haben, räumen Sie eine Minute für den Neustart der App ein, und aktualisieren Sie dann den Browser.
Browsen Sie zur Administratorseite der Web-App, indem Sie an die URL
/admin
anfügen, z. B.http://<app-name>.azurewebsites.net/admin
. Melden Sie sich unter Verwendung der Superuser-Anmeldeinformationen für Django aus dem vorherigen Abschnitt (root
undPollsdb1
) an. Wählen Sie unter Polls (Umfragen) neben Questions (Fragen) die Option Add (Hinzufügen) aus, und erstellen Sie eine Frage für eine Umfrage mit mehreren Auswahlmöglichkeiten.Navigieren Sie wieder zur Hauptwebsite (
http://<app-name>.azurewebsites.net
), und vergewissern Sie sich, dass die Fragen nun angezeigt werden. Beantworten Sie Fragen nach Belieben, um Daten in der Datenbank zu generieren.
Herzlichen Glückwunsch! Sie führen eine Python-Django-Web-App in Azure App Service für Linux mit einer aktiven Postgres-Datenbank aus.
Hinweis
Zur Erkennung von Django-Projekten wird von App Service jedes Unterverzeichnis nach einer Datei namens wsgi.py durchsucht. Diese wird standardmäßig durch manage.py startproject
erstellt. Wird die Datei von App Service gefunden, wird die Django-Web-App geladen. Weitere Informationen finden Sie unter Konfigurieren einer Linux-Python-App für Azure App Service.
Bereinigen von Ressourcen
Wenn Sie die App behalten oder mit den zusätzlichen Tutorials fortfahren möchten, gehen Sie direkt zu Nächste Schritte. Löschen Sie andernfalls die für dieses Tutorial erstellte Ressourcengruppe, um laufende Gebühren zu vermeiden:
az group delete --name ServiceConnector-tutorial-rg --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. Das Argument --no-wait
ermöglicht, dass der Befehl sofort zurückgegeben wird.
Treten Probleme auf? Informieren Sie uns darüber.
Nächste Schritte
Befolgen Sie die unten aufgeführten Tutorials, um mehr über Service Connector zu erfahren.