Share via


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

Einrichten der anfänglichen Umgebung

  1. 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
    
  2. 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 Sie az upgrade aus (erfordert mindestens die Version 2.30.0).

  3. 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

  1. 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 
    
  2. 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.

  3. 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 ist https://<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 benannten pollsdb-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 und psql ausgeführt werden, mit az 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 dem az account list-locations-Befehl abrufen. Legen Sie bei Produktions-Apps für Ihre Datenbank und Ihre App den gleichen Standort fest.

  1. 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 
    
  2. 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
    
  3. 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 Standardtarif Standard_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 Ressourcengruppe ServiceConnector-tutorial-rg in der Region eastus.
    • 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.
  4. 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

  1. Vergewissern Sie sich im Terminal, dass Sie sich im Repositoryordner djangoapp befinden, der den App-Code enthält.

  2. 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> sind A-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 (beispielsweise az postgres up) wird der Cache dagegen aktuell nicht genutzt. Daher müssen hier die Ressourcengruppe und der Standort mit der anfänglichen Verwendung von az webapp up angegeben werden.
  1. Vergewissern Sie sich im Terminal, dass Sie sich im Repositoryordner djangoapp befinden, der den App-Code enthält.

  2. 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
    
  3. 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 Gruppe Python-Django-PGFlex-rg in der Region eastus) 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

Nach erfolgreicher Bereitstellung wird eine JSON-Ausgabe wie im folgenden Beispiel generiert:

Screenshot of the terminal, showing an example output for the az webapp up command.

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.

  1. Führen az webapp ssh Sie aus, um eine SSH-Sitzung für die Web-App im Browser zu öffnen:

    az webapp ssh
    
  2. 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.

  3. Durch den Befehl createsuperuser werden Sie zur Eingabe von Superuser-Anmeldeinformationen aufgefordert. Verwenden Sie für dieses Tutorial den Standardbenutzernamen root, drücken Sie für die E-Mail-Adresse die EINGABETASTE, um sie leer zu lassen, und geben Sie Pollsdb1 als Kennwort ein.

  4. 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

  1. Ö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.

  2. 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 und Pollsdb1) 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.

  3. 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.