Freigeben über


Bereitstellen einer Python-Web-App (Flask) mit PostgreSQL in Azure

In diesem Tutorial stellen Sie eine datengesteuerte Python-Web-App (Flask) mit dem relationalen Datenbankdienst Azure Database for PostgreSQL in Azure App Service bereit. Azure App Service unterstützt Python in einer Linux-Serverumgebung. Sie können auch das Django-Tutorial oder das FastAPI-Tutorial lesen.

Ein Architekturdiagramm, das einen App Service mit einer PostgreSQL-Datenbank in Azure zeigt.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer standardmäßig sicheren Architektur mit App Service, PostgreSQL und Redis Cache
  • Schützen von Verbindungsgeheimnissen mit einer verwalteten Identität und Key Vault-Verweisen
  • Bereitstellen einer Python-Beispiel-App in App Service aus einem GitHub-Repository
  • Greifen Sie auf App Service-App-Verbindungszeichenfolgen und -App-Einstellungen im Anwendungscode zu.
  • Vornehmen von Änderungen und erneutes Bereitstellen des Anwendungscodes
  • Generieren eines Datenbankschemas durch Ausführen von Datenbankmigrationsvorgängen
  • Streamen von Diagnoseprotokollen aus Azure
  • Verwalten der App im Azure-Portal
  • Bereitstellen derselben Architektur und Bereitstellen mithilfe der Azure Developer CLI
  • Optimieren des Entwicklungsworkflows mit GitHub Codespaces und GitHub Copilot

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Falls Sie kein Azure-Konto besitzen, können Sie kostenlos eines erstellen.
  • Eine installierte Azure Developer CLI. Sie können die Schritte mit der Azure Cloud Shell ausführen, da Azure Developer CLI dort bereits installiert ist.
  • Kenntnisse in der Entwicklung mit Python und Flask
  • (Optional) Ein GitHub Copilot-Konto, um GitHub Copilot zu testen. Es ist eine kostenlose 30-Tage-Testversion verfügbar.

Zum Ende springen

Wenn Sie nur die Beispiel-App in diesem Tutorial in Azure anzeigen möchten, führen Sie einfach die folgenden Befehle in der Azure Cloud Shell aus, und befolgen Sie die Eingabeaufforderungen:

mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up

1. Ausführen des Beispiels

Zunächst richten Sie eine datengesteuerte Beispiel-App als Ausgangspunkt ein. Das Beispielrepository umfasst der Einfachheit halber eine Entwicklercontainerkonfiguration. Der Entwicklercontainer verfügt über alles, was Sie zum Entwickeln einer Anwendung benötigen, einschließlich der Datenbank, des Caches und aller Umgebungsvariablen, die von der Beispielanwendung benötigt werden. Der Entwicklercontainer kann in einem GitHub-Codespace ausgeführt werden, was bedeutet, dass Sie das Beispiel auf jedem Computer mit einem Webbrowser ausführen können.

Hinweis

Wenn Sie dieses Tutorial mit Ihrer eigenen App durcharbeiten, sehen Sie sich die Beschreibung der Datei requirements.txt in der Datei README.md an, um Informationen zu den benötigten Paketen zu erhalten.

Schritt 1: In einem neuen Browserfenster:

  1. Melden Sie sich bei Ihrem GitHub-Konto an.
  2. Navigiere zu https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
  3. Deaktivieren Sie die Option Nur Mainbranch kopieren. Sie benötigen alle Branches.
  4. Wählen Sie Fork erstellen aus.

Schritt 2: Im GitHub-Fork:

  1. Wählen Sie für den Startbranch main>starter-no-infra aus. Dieser Branch enthält nur das Beispielprojekt und keine Azure-bezogenen Dateien oder Konfigurationen.
  2. Wählen Sie Code>Codespace in starter-no-infra erstellen aus. Das Einrichten des Codespace dauert einige Minuten, dabei wird am Ende pip install -r requirements.txt für Ihr Repository ausgeführt.

Schritt 3: Im Codespace-Terminal:

  1. Führen Sie eine Datenbankmigration mit flask db upgrade aus.
  2. Führen Sie die App mit flask run aus.
  3. Wenn die Benachrichtigung Your application running on port 5000 is available. angezeigt wird, wählen Sie Im Browser öffnen aus. Die Beispielanwendung sollte auf einer neuen Browserregisterkarte angezeigt werden. Um die Anwendung zu beenden, geben Sie Ctrl+C ein.

Tipp

Sie können GitHub Copilot über dieses Repository befragen. Zum Beispiel:

  • @workspace Was macht dieses Projekt?
  • @workspace Wofür dient der Ordner „.devcontainer“?

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

2. Erstellen von App Service und PostgreSQL

In diesem Schritt erstellen Sie die Azure-Ressourcen. Die in diesem Tutorial ausgeführten Schritte erstellen eine Reihe standardmäßig sicherer Ressourcen, die App Service und Azure Database for PostgreSQL umfassen. Für den Erstellungsprozess geben Sie Folgendes an:

  • Den Namen für die Web-App. Er wird als Teil des DNS-Namens für Ihre App in Form von https://<app-name>-<hash>.<region>.azurewebsites.net verwendet.
  • Die Region für die physische Ausführung der App in der Welt Sie wird auch als Teil des DNS-Namens für Ihre App verwendet.
  • Der Runtimestapel für die App. Hier wählen Sie die Version von Python aus, die für Ihre App verwendet werden soll.
  • Der Hostingplan für die App. Dies ist der Tarif, der die Features und Skalierungskapazität für Ihre App enthält.
  • Die Ressourcengruppe für die App. Mit einer Ressourcengruppe können Sie (in einem logischen Container) alle für die Anwendung benötigten Azure-Ressourcen gruppieren.

Melden Sie sich beim Azure-Portal an, und führen Sie die folgenden Schritte aus, um Ihre Azure App Service-Ressourcen zu erstellen.

Schritt 1: Im Azure-Portal:

  1. Geben Sie auf der Suchleiste oben im Azure-Portal „Web App Datenbank“ ein.
  2. Wählen Sie das Element mit der Bezeichnung Web-App + Datenbank unter der Überschrift Marketplace aus. Sie können auch direkt zum Erstellungs-Assistenten navigieren.

Schritt 2: Füllen Sie das Formular auf der Seite Web-App und Datenbank erstellen wie folgt aus.

  1. Ressourcengruppe: Wählen Sie Neu erstellen aus, und verwenden Sie den Namen msdocs-python-postgres-tutorial.
  2. Region: Eine beliebige Azure-Region in Ihrer Nähe.
  3. Name:msdocs-python-postgres-XYZ.
  4. Runtimestapel:Python 3.12
  5. Datenbank:PostgreSQL – Flexibler Server ist standardmäßig als Datenbank-Engine ausgewählt. Der Servername und der Datenbankname sind ebenfalls standardmäßig auf geeignete Werte festgelegt.
  6. Azure Cache for Redis hinzufügen?Nein
  7. Hostingplan: Basic. Wenn Sie bereit sind, können Sie auf einen Produktionstarif hochskalieren.
  8. Klicken Sie auf Überprüfen + erstellen.
  9. Wenn die Überprüfung abgeschlossen ist, wählen Sie Erstellen aus.

Schritt 3: Die Durchführung der Bereitstellung dauert einige Minuten. Wählen Sie nach Abschluss der Bereitstellung die Schaltfläche Zu Ressource wechseln aus. Sie werden direkt zur App Service App weitergeleitet, aber die folgenden Ressourcen werden erstellt:

  • Ressourcengruppe: Der Container für alle erstellten Ressourcen.
  • App Service-Plan: Definiert die Berechnungsressourcen für App Service. Ein Linux-Plan im Basic-Tarif wird erstellt.
  • App Service: Stellt Ihre App dar und wird im App Service Plan ausgeführt.
  • Virtuelles Netzwerk: Integriert in die App Service-App und isoliert den Back-End-Netzwerkdatenverkehr.
  • Netzwerkschnittstellen: Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
  • Azure Database for PostgreSQL – Flexibler Server: Nur aus dem virtuellen Netzwerk zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
  • Private DNS-Zonen: aktiviert die DNS-Auflösung von Schlüsseltresor und Datenbankserver im virtuellen Netzwerk

3. Schützen von Verbindungsgeheimnissen

Der Erstellungs-Assistent hat die Verbindungsvariablen für Sie bereits als App-Einstellungen generiert. Die bewährte Sicherheitsmethode besteht jedoch darin, Geheimnisse vollständig aus App Service herauszuhalten. Sie verschieben Ihre Geheimnisse in einen Schlüsseltresor und ändern Ihre App-Einstellung mithilfe von Dienstconnectors in einen Key Vault-Verweis.

Schritt 1: Abrufen der vorhandenen Verbindungszeichenfolge

  1. Wählen Sie im linken Menü der App Service-Seite Einstellungen > Umgebungsvariablen aus.
  2. Wählen Sie AZURE_POSTGRESQL_CONNECTIONSTRING aus.
  3. Suchen Sie in Anwendungseinstellung hinzufügen/bearbeiten im Feld Wert den Teil password= am Ende der Zeichenfolge.
  4. Kopieren Sie die Kennwortzeichenfolge nach Password= zur späteren Verwendung. Diese App-Einstellung ermöglicht die Verbindung zur Postgres-Datenbank, die hinter einem privaten Endpunkt gesichert ist. Das Geheimnis wird jedoch direkt in der App Service-App gespeichert, was nicht optimal ist. Sie ändern dieses Verhalten.

Schritt 2: Erstellen eines Schlüsseltresors für die sichere Verwaltung von Geheimnissen

  1. Geben Sie in der oberen Suchleiste key vault ein, und wählen Sie dann Marketplace>Key Vault aus.
  2. Wählen Sie in der Ressourcengruppemsdocs-python-postgres-tutorial aus.
  3. Geben Sie unter Schlüsseltresornamen einen Namen ein, der nur aus Buchstaben und Zahlen besteht.
  4. Legen Sie den Wert für Region auf den gleichen Standort wie für die Ressourcengruppe fest.

Schritt 3: Schützen des Schlüsseltresors mit einem privaten Endpunkt

  1. Wählen Sie die Registerkarte Netzwerk aus.
  2. Deaktivieren SieÖffentlichen Zugriff aktivieren.
  3. Wählen sie Privaten Endpunkt erstellen aus.
  4. Wählen Sie in der Ressourcengruppemsdocs-python-postgres-tutorial aus.
  5. Wählen Sie im Dialogfeld unter Standort denselben Standort wie für Ihre App Service-App aus.
  6. Geben Sie unter Name die Zeichenfolge msdocs-python-postgres-XYZVaultEndpoint ein.
  7. Wählen Sie unter Virtuelles Netzwerkmsdocs-python-postgres-XYZVnet aus.
  8. In Subnet, msdocs-python-postgres-XYZSubnet.
  9. Klicken Sie auf OK.
  10. Klicken Sie aufÜberprüfen + erstellen und dann auf Erstellen. Warten Sie, bis die Bereitstellung des Schlüsseltresors abgeschlossen ist. Die Meldung „Ihre Bereitstellung wurde abgeschlossen.“ sollte angezeigt werden.

Schritt 4: Konfigurieren des PostgreSQL-Connectors

  1. Geben Sie in der oberen Suchleiste msdocs-python-postgres ein und wählen Sie dann die App-Service-Ressource mit dem Namen msdocs-python-postgres-XYZ aus.
  2. Wählen Sie auf der App Service-Seite im linken Menü Einstellungen > Dienstconnector aus. Es gibt bereits einen Connector, den der App-Erstellungs-Assistent für Sie erstellt hat.
  3. Aktivieren Sie das Kontrollkästchen neben dem PostgreSQL-Connector, und wählen Sie dann Bearbeiten aus.
  4. Wählen Sie als Clienttyp die Option Django aus. Sie verwenden zwar eine Flask-App, aber der Django-Clienttyp im PostgreSQL-Dienstconnector bietet Datenbankvariablen in separaten Einstellungen anstelle einer Verbindungszeichenfolge. Die separaten Variablen sind einfacher im Anwendungscode zu verwenden, der SQLAlchemy verwendet, um eine Verbindung mit der Datenbank herzustellen.
  5. Wählen Sie die Registerkarte Authentifizierung aus.
  6. Fügen Sie unter Kennwort das Kennwort ein, das Sie zuvor kopiert haben.
  7. Wählen Sie Geheimnis in Key Vault speichern aus.
  8. Wählen Sie unter Key Vault-Verbindung die Option Neu erstellen aus. Über dem Bearbeitungsdialogfeld wird das Dialogfeld Verbindung erstellen geöffnet.

Schritt 5: Einrichten der Key Vault-Verbindung

  1. Wählen Sie im Dialogfeld Verbindung erstellen für die Key Vault-Verbindung unter Key Vault den zuvor erstellten Schlüsseltresor aus.
  2. Klicken Sie auf Überprüfen + erstellen.
  3. Wählen Sie nach Abschluss der Überprüfung Erstellen aus.

Schritt 6: Abschließen der Einstellungen für den PostgreSQL-Connector

  1. Sie befinden sich wieder im Bearbeitungsdialogfeld für defaultConnector. Warten Sie auf der Registerkarte Authentifizierung, bis der Schlüsseltresorconnector erstellt wurde. Nach Abschluss des Vorgangs wird er automatisch in der Dropdownliste Key Vault-Verbindung ausgewählt.
  2. Klicken Sie auf Weiter: Netzwerk.
  3. Wählen Sie Speichern. Warten Sie, bis die Benachrichtigung Update erfolgreich angezeigt wird.

Schritt 7: Überprüfen der Key Vault-Integration

  1. Wählen Sie im linken Menü erneut Einstellungen > Umgebungsvariablen aus.
  2. Wählen Sie neben AZURE_POSTGRESQL_PASSWORD die Option Wert anzeigen aus. Der Wert sollte @Microsoft.KeyVault(...) lauten. Das bedeutet, dass es sich um einen Schlüsseltresorverweis handelt, da das Geheimnis jetzt im Schlüsseltresor verwaltet wird.

Folgende Schritte sind zum Schützen Ihrer Verbindungsgeheimnisse erforderlich:

  • Abrufen der Verbindungsgeheimnisse aus den Umgebungsvariablen der App Service-App
  • Erstellen eines Schlüsseltresors
  • Erstellen einer Key Vault-Verbindung mit der systemseitig zugewiesenen verwalteten Identität
  • Aktualisieren der Dienstconnectors zum Speichern der Geheimnisse in Key Vault

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.


4. Bereitstellen von Beispielcode

In diesem Schritt konfigurieren Sie die GitHub-Bereitstellung mithilfe von GitHub Actions. Es ist nur eine der vielen Möglichkeiten, um App Service bereitzustellen, aber auch eine hervorragende Möglichkeit, eine kontinuierliche Integration in Ihren Bereitstellungsprozess zu haben. Standardmäßig startet jede git push in Ihrem GitHub-Repository die Build- und Bereitstellungsaktion.

Schritt 1: Wählen Sie im linken Menü Bereitstellung> Bereitstellungscenter aus.

Schritt 2: Auf der Seite „Bereitstellungscenter“:

  1. Wählen Sie in Quelle die Option GitHub aus. Standardmäßig wird GitHub Actions als Buildanbieter ausgewählt.
  2. Melden Sie sich bei Ihrem GitHub-Konto an und folgen Sie der Aufforderung, Azure zu autorisieren.
  3. Wählen Sie in Organisation Ihr Konto aus.
  4. Wählen Sie im Repository das Repository msdocs-flask-postgresql-sample-app aus.
  5. Wählen Sie unter Branch den Eintrag starter-no-infra aus. Dies ist der gleiche Branch, in dem Sie mit Ihrer Beispiel-App gearbeitet haben, ohne Azure-bezogene Dateien oder Konfigurationen.
  6. Wählen Sie unter Authentifizierungstyp die Option Benutzerseitig zugewiesene Identität aus.
  7. Wählen Sie im oberen Menü Speichern aus. App Service committet eine Workflowdatei in das ausgewählte GitHub-Repository im .github/workflows-Verzeichnis. Standardmäßig erstellt das Bereitstellungscenter eine benutzerseitig zugewiesene Identität für den Workflow zur Authentifizierung mithilfe von Microsoft Entra (OIDC-Authentifizierung). Weitere Informationen zu alternativen Authentifizierungsoptionen finden Sie unter Bereitstellen in App Service mithilfe von GitHub Actions.

Schritt 3: führen Sie zurück im GitHub-Codespace Ihrer Beispiel-Verzweigung git pull origin starter-no-infra aus. Dadurch wird die neu committete Workflowdatei in Ihren Codespace übertragen.

Schritt 4 (Option 1: mit GitHub Copilot):

  1. Starten Sie eine neue Chatsitzung, indem Sie die Ansicht Chat und dann die Option + auswählen.
  2. Fragen Sie „@workspace Wie stellt die App eine Verbindung mit der Datenbank her?“. Copilot gibt Ihnen möglicherweise einige Erläuterungen zu SQLAlchemy und wie der Verbindungs-URI in azureproject/development.py und azureproject/production.py konfiguriert wird.
  3. Fragen Sie „@workspace Im Produktionsmodus wird meine App in einer App Service-Web-App ausgeführt, die den Azure-Dienstconnector verwendet, um eine Verbindung mit PostgreSQL – Flexibler Server mithilfe des Clienttyps Django herzustellen. Wie heißen die Umgebungsvariablen, die ich verwenden muss?“. Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich den Schritten unter Option 2: Ohne GitHub Copilot weiter unten und teilt Ihnen sogar mit, dass Sie Änderung in der Datei azureproject/production.py vornehmen müssen.
  4. Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag ein. GitHub Copilot gibt Ihnen nicht jedes Mal die gleiche Antwort, und sie ist nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace machen?.

Schritt 4 (Option 2: ohne GitHub Copilot):

  1. Öffnen Sie Program.cs im Explorer.
  2. Suchen Sie den auskommentierten Code (Zeilen 3–8), und heben Sie die Auskommentierung auf. Dadurch wird eine Verbindungszeichenfolge für SQLAlchemy mithilfe von AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, und AZURE_POSTGRESQL_NAME erstellt.

Schritt 5:

  1. Wählen Sie die Quellsteuerungserweiterung aus.
  2. Geben Sie im Textfeld eine Commitnachricht ein, z. B. Configure Azure database connecton. Oder wählen Sie aus, und lassen Sie GitHub Copilot eine Commit-Nachricht für Sie generieren.
  3. Wählen Sie Commit aus, und bestätigen Sie dann mit Ja.
  4. Wählen Sie Änderungen synchronisieren 1 aus, und bestätigen Sie dann mit OK.

Schritt 6: Zurück auf der Seite „Bereitstellungscenter“ im Azure-Portal:

  1. Wählen Sie die Registerkarte Protokolle und dann Aktualisieren aus, um die neue Bereitstellung anzuzeigen.
  2. Wählen Sie in dem Protokollelement für die Bereitstellungsausführung den Eintrag Build/Deploy Logs mit dem neuesten Zeitstempel aus.

Schritt 7: Sie werden zu Ihrem GitHub-Repository weitergeleitet und sehen, dass die GitHub-Aktion ausgeführt wird. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen. Warten Sie, bis die GitHub-Ausführung den Status Erfolg anzeigt. Dies dauert ca. 5 Minuten.

Treten Probleme auf? Sehen Sie sich den Leitfaden zur Problembehandlung an.

5. Generieren des Datenbankschemas

Bei einer durch ein virtuelles Netzwerk geschützten PostgreSQL-Datenbank können Sie Flask-Datenbankmigrationsvorgänge am einfachsten in einer SSH-Sitzung mit dem Linux-Container in App Service ausführen.

Schritt 1: Auf der App Service-Seite im Menü auf der linken Seite,

  1. Wählen Sie Entwicklungstools>SSH aus.
  2. Klicken Sie auf Starten.

Schritt 2: Führen Sie in der SSH-Sitzung flask db upgrade aus. Wenn dies erfolgreich ist, stellt App Service erfolgreich eine Verbindung mit der Datenbank her.

Tipp

In der SSH-Sitzung können nur Änderungen an Dateien in /home über den Neustart der App hinaus bestehen bleiben. Änderungen außerhalb von /home bleiben nicht erhalten.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

6. Navigieren zur App

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im Menü auf der linken Seite die Option Übersicht aus.
  2. Wählen Sie die URL Ihrer App aus.

Schritt 2: Fügen Sie der Liste ein paar Restaurants zu. Glückwunsch! Sie führen eine Web-App in Azure App Service aus, mit sicherer Konnektivität zu Azure Database for PostgreSQL.

7. Streamen von Diagnoseprotokollen

Azure App Service erfasst alle Konsolenprotokolle, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Die Beispiel-App enthält print()-Anweisungen, um diese Funktion wie nachfolgend gezeigt zu veranschaulichen:

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

Schritt 1: Auf der App Service-Seite:

  1. Wählen Sie im linken Menü Überwachung>App Service Protokolle aus.
  2. Wählen Sie unter Anwendungsprotokollierung die Option Dateisystem aus.
  3. Wählen Sie im oberen Menü Speichern aus.

Schritt 2: Wählen Sie im Menü auf der linken Seite die Option Protokollstream aus. Sie sehen die Protokolle für Ihre App, einschließlich Plattformprotokolle und Protokolle innerhalb des Containers.

Weitere Informationen zur Protokollierung in Python-Apps finden Sie in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.

8. Bereinigen von Ressourcen

Wenn Sie fertig sind, können Sie alle Ressourcen aus Ihrem Azure-Abonnement löschen, indem Sie die Ressourcengruppe löschen.

Schritt 1: In der Suchleiste oben im Azure-Portal:

  1. Geben Sie den Ressourcengruppennamen ein.
  2. Wählen Sie die Ressourcengruppe aus.

Schritt 2: Wählen Sie auf der Seite „Ressourcengruppe“ die Option Ressourcengruppe löschen aus.

Schritt 3:

  1. Geben Sie den Namen der Ressourcengruppe ein, um Ihre Löschung zu bestätigen.
  2. Klicken Sie auf Löschen.

Screenshot: Bestätigungsdialogfeld für das Löschen einer Ressourcengruppe im Azure-Portal :

2. Erstellen von Azure-Ressourcen und Bereitstellen einer Beispiel-App

In diesem Schritt erstellen Sie die Azure-Ressourcen und stellen eine Beispiel-App für App Service für Linux bereit. Die in diesem Tutorial ausgeführten Schritte erstellen eine Reihe standardmäßig sicherer Ressourcen, die App Service und Azure Database for PostgreSQL umfassen.

Der Entwicklercontainer verfügt bereits über die Azure Developer CLI (AZD).

  1. Führen Sie im Repositorystamm azd init aus.

    azd init --template python-app-service-postgresql-infra
    
  2. Wenn Sie dazu aufgefordert werden, geben Sie die folgenden Antworten:

    Frage Antwort
    Das aktuelle Verzeichnis ist nicht leer. Möchten Sie ein Projekt hier in <Ihr Verzeichnis> initialisieren? Y
    Was möchten Sie mit diesen Dateien tun? Meine vorhandenen Dateien unverändert beibehalten
    Geben Sie einen neuen Umgebungsnamen ein. Geben Sie einen eindeutigen Namen ein. Die AZD-Vorlage verwendet diesen Namen als Teil des DNS-Namens Ihrer Web-App in Azure (<app-name>-<hash>.azurewebsites.net). Alphanumerische Zeichen und Bindestriche sind zulässig.
  3. Melden Sie sich mithilfe des Befehls azd auth login bei Azure an, und folgen Sie der Eingabeaufforderung:

    azd auth login
    
  4. Erstellen Sie die erforderlichen Azure-Ressourcen mit dem Befehl azd provision. Folgen Sie der Eingabeaufforderung, um das gewünschte Abonnement und den gewünschten Standort für die Azure-Ressourcen auszuwählen.

    azd provision
    

    Die Ausführung des Befehls azd provision ist etwa 15 Minuten.(Der Großteil der Zeit fällt für den Redis-Cache an.) Später ändern Sie Ihren Code so, dass er mit App Service funktioniert, und wenden die Änderungen mit azd deploy an. Während der Ausführung stellt der Befehl Nachrichten zum Bestimmungs- und Bereitstellungsprozess bereit, einschließlich eines Links zur Bereitstellung in Azure.

    Diese AZD-Vorlage enthält Dateien (azure.yaml und das Verzeichnis infra), die eine standardmäßig sichere Architektur mit den folgenden Azure-Ressourcen generieren:

    • Ressourcengruppe: Der Container für alle erstellten Ressourcen.
    • App Service-Plan: Definiert die Berechnungsressourcen für App Service. Ein Linux-Plan im Basic-Tarif wird erstellt.
    • App Service: Stellt Ihre App dar und wird im App Service Plan ausgeführt.
    • Virtuelles Netzwerk: Integriert in die App Service-App und isoliert den Back-End-Netzwerkdatenverkehr.
    • Private Endpunkte: Zugriffsendpunkte für den Key Vault und den Redis-Cache im virtuellen Netzwerk.
    • Netzwerkschnittstellen: Stellt private IP-Adressen dar, eine für jeden privaten Endpunkt.
    • Azure Database for PostgreSQL – Flexibler Server: Nur aus dem virtuellen Netzwerk zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
    • Private DNS-Zone: Aktiviert die DNS-Auflösung des PostgeSQL-Servers im virtuellen Netzwerk.
    • Log Analytics-Arbeitsbereich: Fungiert als Zielcontainer für Ihre App, um die Protokolle zu versenden. Dort können Sie auch die Protokolle abfragen.
    • Azure Cache for Redis: Nur von hinter seinem privaten Endpunkt aus zugänglich.
    • Schlüsseltresor: Nur von hinter seinem privaten Endpunkt aus zugänglich. Wird verwendet, um Geheimnisse für die App Service-App zu verwalten.

    Wenn der Befehl die Ressourcenerstellung abgeschlossen und den Anwendungscode zum ersten Mal bereitgestellt hat, funktioniert die bereitgestellte Beispiel-App noch nicht, da Sie kleine Änderungen vornehmen müssen, um eine Verbindung mit der Datenbank in Azure herzustellen.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

3. Verwenden der Datenbank-Verbindungszeichenfolge

Die von Ihnen verwendete AZD-Vorlage hat die Konnektivitätsvariablen für Sie bereits als App-Einstellungen generiert und gibt sie der Einfachheit halber im Terminal für Sie aus. App-Einstellungen sind eine Möglichkeit, um Verbindungsgeheimnisse aus Ihrem Coderepository herauszuhalten.

  1. Suchen Sie in der AZD-Ausgabe die Einstellungen AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST und AZURE_POSTGRESQL_NAME. Um Geheimnisse zu schützen, werden nur die Einstellungsnamen angezeigt. Sie sehen in der AZD-Ausgabe wie folgt aus:

     App Service app has the following connection settings:
             - AZURE_POSTGRESQL_NAME
             - AZURE_POSTGRESQL_HOST
             - AZURE_POSTGRESQL_USER
             - AZURE_POSTGRESQL_PASSWORD
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     
  2. Der Einfachheit halber enthält die AZD-Vorlage den direkten Link zur Seite „App-Einstellungen“ der App. Suchen Sie den Link, und öffnen Sie ihn auf einer neuen Browserregisterkarte.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

4. Ändern des Beispielcodes und erneutes Bereitstellen

  1. Starten Sie im GitHub-Codespace eine neue Chatsitzung, indem Sie die Chatansicht und dann + auswählen.

  2. Fragen Sie „@workspace Wie stellt die App eine Verbindung mit der Datenbank her?“. Copilot gibt Ihnen möglicherweise einige Erläuterungen zu SQLAlchemy und wie der Verbindungs-URI in azureproject/development.py und azureproject/production.py konfiguriert wird.

  3. Fragen Sie „@workspace Im Produktionsmodus wird meine App in einer App Service-Web-App ausgeführt, die den Azure-Dienstconnector verwendet, um eine Verbindung mit PostgreSQL – Flexibler Server mithilfe des Clienttyps Django herzustellen. Wie heißen die Umgebungsvariablen, die ich verwenden muss?“. Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich den Schritten unter Option 2: Ohne GitHub Copilot weiter unten und teilt Ihnen sogar mit, dass Sie Änderung in der Datei azureproject/production.py vornehmen müssen.

  4. Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag ein.

    GitHub Copilot gibt Ihnen nicht jedes Mal die gleiche Antwort, und sie ist nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace machen?.

  5. Führen Sie im Terminal azd deploy aus.

    azd deploy
    

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

5. Generieren des Datenbankschemas

Bei einer durch ein virtuelles Netzwerk geschützten PostgreSQL-Datenbank können Sie Flask-Datenbankmigrationsvorgänge am einfachsten in einer SSH-Sitzung mit dem Linux-Container in App Service ausführen.

  1. Suchen Sie in der AZD-Ausgabe die URL für die SSH-Sitzung, und navigieren Sie im Browser dorthin. Die Ausgabe sieht wie folgt aus:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  2. Führen Sie in der SSH-Sitzung flask db upgrade aus. Wenn dies erfolgreich ist, stellt App Service erfolgreich eine Verbindung mit der Datenbank her.

    Screenshot: die Befehle, die in der SSH-Shell ausgeführt werden, und ihre Ausgaben.

    Hinweis

    Nur Änderungen an Dateien in /home können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von /home bleiben nicht erhalten.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

6. Navigieren zur App

  1. Suchen Sie in der AZD-Ausgabe die URL für Ihre App, und navigieren Sie im Browser dorthin. Die URL sieht in der AZD-Ausgabe wie folgt aus:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Fügen Sie ein paar Restaurants zu der Liste hinzu.

    Ein Screenshot der Flask-Web-App mit PostgreSQL, die in Azure ausgeführt wird und Restaurants und Restaurantbewertungen anzeigt.

    Glückwunsch! Sie führen eine Web-App in Azure App Service aus, mit sicherer Konnektivität zu Azure Database for PostgreSQL.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

7. Streamen von Diagnoseprotokollen

Azure App Service kann Konsolenprotokolle erfassen, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Der Einfachheit halber wurden für die AZD-Vorlage bereits die Protokollierung im lokalen Dateisystem sowie das Senden der Protokolle an einen Log Analytics-Arbeitsbereich aktiviert.

Die Beispielanwendung enthält print()-Anweisungen, um diese Funktion wie im folgenden Codeschnipsel gezeigt zu veranschaulichen.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

Suchen Sie in der AZD-Ausgabe den Link zum Streamen von App Service-Protokollen, und navigieren Sie im Browser dorthin. Der Link sieht in der AZD-Ausgabe wie folgt aus:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Weitere Informationen zur Protokollierung in Python-Apps finden Sie in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.

Treten Probleme auf? Sehen Sie sich den Abschnitt zur Problembehandlung an.

8. Bereinigen von Ressourcen

Führen Sie azd down aus, und folgen Sie den Eingabeaufforderungen, um alle Azure-Ressourcen in der aktuellen Bereitstellungsumgebung zu löschen.

azd down

Problembehandlung

Im Folgenden sind Probleme, die beim Ausführen dieses Tutorials auftreten können, und die Schritte zu ihrer Behebung aufgeführt.

Ich kann keine Verbindung mit der SSH-Sitzung herstellen

Können Sie keine Verbindung mit der SSH-Sitzung herstellen, konnte die App selbst nicht gestartet werden. Überprüfen Sie die Details in den Diagnoseprotokollen. Wenn beispielsweise ein Fehler wie KeyError: 'AZURE_POSTGRESQL_HOST' angezeigt wird, kann dies bedeuten, dass die Umgebungsvariable fehlt (möglicherweise haben Sie die App-Einstellung entfernt).

Ich erhalten einen Fehler beim Ausführen von Datenbankmigrationen

Wenn Fehler im Zusammenhang mit dem Herstellen einer Verbindung mit der Datenbank auftreten, überprüfen Sie, ob die App-Einstellungen (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST und AZURE_POSTGRESQL_NAME) geändert oder gelöscht wurden. Ohne diese Verbindungszeichenfolge kann der Migrationsbefehl (migrate) nicht mit der Datenbank kommunizieren.

Häufig gestellte Fragen

Wie viel kostet diese Einrichtung?

Die Preise für die erstellte Ressourcen sind wie folgt:

  • Der App Service-Plan wird im Tarif Basic erstellt und kann hoch- oder herunterskaliert werden. Informationen dazu finden Sie unter App Service – Preise.
  • PostgreSQL – Flexibler Server wird in der niedrigsten burstfähigen Dienstebene, Standard_B1ms, mit der Mindestspeichergröße erstellt, die hoch- und herunterskaliert werden kann. Weitere Informationen finden Sie unter Azure Database for PostgreSQL – Preise.
  • Das virtuelle Netzwerk hat keine Gebühr, es sei denn, Sie konfigurieren zusätzliche Funktionen, z. B. Peering. Siehe Azure Virtual Network Preise.
  • Die private DNS-Zone verursacht eine kleine Gebühr. Siehe Azure DNS-Preise.

Wie stelle ich mit anderen Tools eine Verbindung mit dem PostgreSQL-Server her, der hinter dem virtuellen Netzwerk geschützt ist?

  • Für den einfachen Zugriff aus einem Befehlszeilentool können Sie psql in der SSH-Sitzung der App ausführen.
  • Um eine Verbindung mit einem Desktoptool herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Es könnte beispielsweise eine Azure-VM sein, die mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, das über eine Standort-zu-Standort-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verfügt.
  • Sie können Azure Cloud Shell auch in das virtuelle Netzwerk integrieren.

Wie funktioniert die lokale App-Entwicklung mit GitHub Actions?

Nehmen Sie die automatisch generierte Workflowdatei von App Service als Beispiel; jede git push startet eine neue Build- und Bereitstellungsausführung. Aus einem lokalen Klon des GitHub-Repositorys können Sie die gewünschten Updates vornehmen und zu GitHub pushen. Zum Beispiel:

git add .
git commit -m "<some-message>"
git push origin main

Gewusst wie: Debuggen von Fehlern während der GitHub Actions-Bereitstellung

Wenn ein Schritt in der automatisch generierten GitHub-Workflowdatei fehlschlägt, versuchen Sie, den fehlerhaften Befehl zu ändern, um eine ausführlichere Ausgabe zu generieren. So erhalten Sie beispielsweise eine ausführlichere Ausgabe der python-Befehle, wenn Sie die -d-Option hinzufügen. Committen und pushen Sie Ihre Änderungen, um eine weitere Bereitstellung in App Service auszulösen.

Ich habe keine Berechtigungen zum Erstellen einer benutzerseitig zugewiesenen Identität.

Siehe Einrichten der Bereitstellung von GitHub Actions über das Bereitstellungscenter.

Was kann ich mit GitHub Copilot in meinem Codespace machen?

Möglicherweise haben Sie bemerkt, dass die GitHub Copilot-Chatansicht bereits verfügbar war, als Sie den Codespace erstellt haben. Zur Vereinfachung können Sie die GitHub Copilot-Chaterweiterung in die Containerdefinition einfügen (siehe .devcontainer/devcontainer.json). Sie benötigen jedoch ein GitHub Copilot-Konto (kostenlose 30-Tage-Testversion verfügbar).

Einige Tipps für die Unterhaltung mit GitHub Copilot:

  • In einer einzelnen Chatsitzung bauen die Fragen und Antworten aufeinander auf, und Sie können Ihre Fragen anpassen, um die Antworten zu optimieren.
  • Standardmäßig hat GitHub Copilot keinen Zugriff auf Dateien in Ihrem Repository. Um Fragen zu einer Datei zu stellen, öffnen Sie die Datei zuerst im Editor.
  • Damit GitHub Copilot beim Vorbereiten der Antworten Zugriff auf alle Dateien im Repository hat, beginnen Sie Ihre Frage mit @workspace. Weitere Informationen finden Sie unter Use the @workspace agent.
  • Innerhalb der Chatsitzung kann GitHub Copilot Änderungen vorschlagen und (mit @workspace) auch angeben, wo die Änderungen vorgenommen werden sollen. Copilot darf jedoch die Änderungen nicht für Sie vornehmen. Sie müssen entscheiden, ob Sie die vorgeschlagenen Änderungen hinzufügen und testen.

Nächste Schritte

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre App mit einer benutzerdefinierten Domäne und einem Zertifikat schützen.

Erfahren Sie, wie eine Python-App von App Service ausgeführt wird: