Freigeben über


Bereitstellen einer Python-FastAPI-Web-App mit PostgreSQL in Azure

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

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

Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:

Zum Ende springen

Wenn Azure Developer CLI installiert ist, können Sie zum Ende des Lernprogramms springen, indem Sie die folgenden Befehle in einem leeren Arbeitsverzeichnis ausführen:

azd auth login
azd init --template msdocs-fastapi-postgresql-sample-app
azd up

Beispielanwendung

Eine Python-Beispielanwendung, die das FastAPI-Framework verwendet, wird bereitgestellt, um Sie beim Absolvieren dieses Tutorials zu unterstützen. Um sie bereitzustellen, ohne sie lokal auszuführen, überspringen Sie diesen Teil.

Um die Anwendung lokal auszuführen, stellen Sie sicher, dass Python 3.8 oder höher und PostgreSQL lokal installiert ist. Klonen Sie dann den starter-no-infra-Branch des Beispielrepositorys, und wechseln Sie zum Repositorystamm.

git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
cd msdocs-fastapi-postgresql-sample-app

Erstellen Sie eine env-Datei wie unten dargestellt, indem Sie die .env.sample-Datei als Leitfaden verwenden. Legen Sie den Wert von DBNAME auf den Namen einer vorhandenen Datenbank in Ihrer lokalen PostgreSQL-Instanz fest. Legen Sie die Werte von DBHOST, DBUSER und DBPASS entsprechend Ihrer lokalen PostgreSQL-Instanz fest.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

Erstellen Sie eine virtuelle Umgebung für die App:

py -m venv .venv
.venv\scripts\activate

Installieren Sie die Abhängigkeiten:

python3 -m pip install -r src/requirements.txt

Installieren Sie die App als bearbeitbares Paket:

python3 -m pip install -e src

Führen Sie die Beispielanwendung mit folgenden Befehl aus:

# Run database migration
python3 src/fastapi_app/seed_data.py
# Run the app at http://127.0.0.1:8000
python3 -m uvicorn fastapi_app:app --reload --port=8000

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

  • Der Name für die Web-App. Es ist der Name, der als Teil des DNS-Namens für Ihre Webapp verwendet wird.
  • Die Region für die physische Ausführung der App in der Welt.
  • Der Laufzeitstapel 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 Marketplace-Überschrift aus. Sie können auch direkt zum Erstellungs-Assistenten navigieren.

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

  1. Ressourcengruppe → Wählen Sie Neu erstellen und verwenden Sie den Namen msdocs-python-postgres-tutorial.
  2. Region → Beliebige Azure-Region in Ihrer Nähe.
  3. Namemsdocs-python-postgres-XYZ , wobei XYZ drei zufällige Zeichen ist. Dieser Name muss innerhalb von Azure eindeutig sein.
  4. LaufzeitstapelPython 3.12.
  5. DatenbankPostgreSQL – Flexibler Server ist standardmäßig als Datenbankmodul ausgewählt. Der Servername und der Datenbankname sind ebenfalls standardmäßig auf geeignete Werte festgelegt.
  6. HostingplanBasic. Wenn Sie bereit sind, können Sie zu einem späteren Zeitpunkt auf ein Produktionspreisniveau skalieren .
  7. Wählen Sie "Überprüfen" und "Erstellen" aus.
  8. Nachdem die Überprüfung abgeschlossen ist, wählen Sie "Erstellen" aus.

Schritt 3: Die Bereitstellung dauert ein paar Minuten. Nachdem die Bereitstellung abgeschlossen ist, wählen Sie die Schaltfläche " Zur 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 Computeressourcen für App Service. Es wird ein Linux-Plan auf der Stufe "Einfach " erstellt.
  • App Service → Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
  • Virtuelles Netzwerk → in die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
  • Azure Database for PostgreSQL flexible Server → Nur innerhalb des virtuellen Netzwerks zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
  • Private DNS-Zone → Aktiviert die DNS-Auflösung des PostgreSQL-Servers im virtuellen Netzwerk.

Schritt 4: Für FastAPI-Apps müssen Sie einen Startbefehl eingeben, damit der App-Dienst Ihre App starten kann. Auf der App Service-Seite:

  1. Wählen Sie im linken Menü unter "Einstellungen" die Option "Konfiguration" aus.
  2. Geben Sie im Feld "Startbefehl" auf der Registerkarte "src/entrypoint.sh" der Seite "Konfiguration" unter den Stapeleinstellungen ein.
  3. Wählen Sie "Speichern" aus. Wenn Sie dazu aufgefordert werden, wählen Sie "Weiter" aus. Weitere Informationen zur App-Konfiguration und zum Starten in App Service finden Sie unter Konfigurieren einer Linux Python-App für Azure App Service.

2. Überprüfen der Verbindungseinstellungen

Der Erstellungs-Assistent hat die Konnektivitätsvariablen für Sie bereits als App-Einstellungen generiert. App-Einstellungen sind eine Möglichkeit, um Verbindungsgeheimnisse aus Ihrem Coderepository herauszuhalten. Wenn Sie bereit sind, Ihre Geheimnisse an einen sichereren Ort zu verschieben, finden Sie hier einen Artikel zum Speichern in Azure Key Vault.

Schritt 1: Wählen Sie auf der Seite "App Service" im linken Menü " Umgebungsvariablen" aus.

Schritt 2: Überprüfen Sie auf der Registerkarte "App-Einstellungen " auf der Seite " Umgebungsvariablen ", ob AZURE_POSTGRESQL_CONNECTIONSTRING vorhanden ist. Die Verbindungszeichenfolge wird als Umgebungsvariable in die Laufzeitumgebung eingefügt.

3. 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: In einem neuen Browserfenster:

  1. Melden Sie sich bei Ihrem GitHub-Konto an.
  2. Navigiere zu https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app.
  3. Wählen Sie „Fork“ aus.
  4. Wählen Sie "Verzweigung erstellen" aus.

Schritt 2: Öffnen Sie auf der GitHub-Seite Visual Studio Code im Browser, indem Sie die . TASTE drücken.

Schritt 3: Öffnen Sie in Visual Studio Code im Browser src/fastapi/models.py im Explorer. Sehen Sie sich die in der Produktionsumgebung verwendeten Umgebungsvariablen an, einschließlich der App-Einstellungen, die auf der Konfigurationsseite angezeigt wurden.

Schritt 4: Wählen Sie zurück auf der Seite "App Service" im linken Menü unter "Bereitstellung" die Option "Bereitstellungscenter" aus.

Schritt 5: Auf der Seite "Bereitstellungscenter":

  1. Wählen Sie in "Quelle" GitHub aus. Standardmäßig ist GitHub-Aktionen 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"msdocs-fastapi-postgresql-sample-app" aus.
  5. Wählen Sie in Branch den Hauptteil aus.
  6. Lassen Sie die Standardoption aktiviert, um einen Workflow hinzuzufügen.
  7. Wählen Sie unter Authentifizierungstyp die vom Benutzer zugewiesene Identität aus.
  8. Wählen Sie im oberen Menü " Speichern" aus. App Service committet eine Workflowdatei in das ausgewählte GitHub-Repository im .github/workflows-Verzeichnis.

Schritt 6: Auf der Seite "Bereitstellungscenter:"

  1. Wählen Sie Protokolle aus. Eine Bereitstellungsausführung wird bereits gestartet.
  2. Wählen Sie im Protokollelement für die Bereitstellungsausführung die Option Build-/Bereitstellungsprotokolle 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 "Abgeschlossen" anzeigt. Dies dauert ca. 5 Minuten.

Treten Probleme auf? Überprüfen Sie das Handbuch zur Problembehandlung.

4. Generieren des Datenbankschemas

Im vorherigen Abschnitt haben Sie "src/entrypoint.sh " als Startbefehl für Ihre App hinzugefügt. entrypoint.sh enthält die folgende Zeile: python3 src/fastapi_app/seed_data.py. Mit diesem Befehl wird Ihre Datenbank migriert. In der Beispiel-App wird damit nur sichergestellt, dass die richtigen Tabellen in Ihrer Datenbank erstellt werden. Er füllt diese Tabellen nicht mit Daten auf.

In diesem Abschnitt führen Sie diesen Befehl zu Demonstrationszwecken manuell aus. Mit der durch das virtuelle Netzwerk geschützten PostgreSQL-Datenbank besteht die einfachste Möglichkeit zum Ausführen des Befehls in einer SSH-Sitzung mit dem App Service-Container.

Schritt 1: Zurück auf der Seite "App Service" im linken Menü

  1. Wählen Sie SSH aus.
  2. Wählen Sie Starten aus.

Schritt 2: Führen Sie im SSH-Terminal aus python3 src/fastapi_app/seed_data.py. Wenn dies erfolgreich ist, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit. Nur Änderungen an Dateien in /home können über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von /home bleiben nicht erhalten.

5. Navigieren zur App

Schritt 1: Auf der Seite "App Service":

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

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

6. Streamen von Diagnoseprotokollen

Die Beispiel-App verwendet das Protokollierungsmodul der Python-Standardbibliothek, um Probleme mit Ihrer Anwendung zu diagnostizieren. Die Beispiel-App enthält Aufrufe des Protokollierungsmoduls, wie im folgenden Code dargestellt.

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

Schritt 1: Auf der Seite "App Service":

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

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

Es kann mehrere Minuten dauern, bis Ereignisse in den Diagnoseprotokollen angezeigt werden. Erfahren Sie mehr über die Protokollierung in Python-Apps in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.

7. 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. Wählen Sie "Löschen" aus.

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

  1. Klonen Sie den starter-no-infra-Branch des Beispielrepositorys in einem lokalen Terminal, sofern noch nicht geschehen.

    git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
    cd msdocs-fastapi-postgresql-sample-app
    

    Dieser geklonte Branch ist Ihr Ausgangspunkt. Er enthält eine einfache datengesteuerte FastAPI-Anwendung.

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

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. 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 lassen
    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>.azurewebsites.net). Alphanumerische Zeichen und Bindestriche sind zulässig.
  4. Führen Sie den azd up-Befehl aus, um die notwendigen Azure-Ressourcen und den App-Code bereitzustellen. Wenn Sie noch nicht bei Azure angemeldet sind, wird der Browser gestartet, und Sie werden aufgefordert, sich anzumelden. Der azd up-Befehl fordert Sie außerdem auf, das gewünschte Abonnement sowie den gewünschten Speicherort für die Bereitstellung auszuwählen.

    azd up
    

    Die Ausführung des Befehls azd up kann mehrere Minuten dauern. Außerdem wird Ihr Anwendungscode kompiliert und bereitgestellt. Während der Ausführung stellt der Befehl Nachrichten zum Bestimmungs- und Bereitstellungsprozess bereit, einschließlich eines Links zur Bereitstellung in Azure. Wenn er abgeschlossen ist, zeigt der Befehl auch einen Link zur Bereitstellungsanwendung an.

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

    • Ressourcengruppe → Der Container für alle erstellten Ressourcen.
    • App Service-Plan → Definiert die Computeressourcen für App Service. Es wird ein Linux-Plan auf der B1-Ebene angegeben.
    • App Service → Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
    • Virtuelles Netzwerk → in die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
    • Azure Database for PostgreSQL flexible Server → Nur innerhalb des virtuellen Netzwerks zugänglich. Eine Datenbank und ein Benutzer werden für Sie auf dem Server erstellt.
    • Private DNS-Zone → Aktiviert die DNS-Auflösung des PostgreSQL-Servers im virtuellen Netzwerk.
    • Log Analytics-Arbeitsbereich → Dient als Zielcontainer für Ihre App, um ihre Protokolle zu versenden, wo Sie auch die Protokolle abfragen können.
  5. Notieren Sie sich nach Abschluss des azd up Befehls die Werte für die Abonnement-ID (Guid), den App-Dienst und die Ressourcengruppe in der Ausgabe. Sie verwenden sie in den folgenden Abschnitten. Ihre Ausgabe ähnelt der folgenden (unvollständigen) Ausgabe:

    Subscription: Your subscription name (1111111-1111-1111-1111-111111111111)
    Location: East US
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2F1111111-1111-1111-1111-111111111111%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2Fyourenv-1721867673
    
      (✓) Done: Resource group: yourenv-rg
      (✓) Done: Virtual Network: yourenv-e2najjk4vewf2-vnet
      (✓) Done: App Service plan: yourenv-e2najjk4vewf2-service-plan
      (✓) Done: Log Analytics workspace: yourenv-e2najjk4vewf2-workspace
      (✓) Done: Application Insights: yourenv-e2najjk4vewf2-appinsights
      (✓) Done: Portal dashboard: yourenv-e2najjk4vewf2-dashboard
      (✓) Done: App Service: yourenv-e2najjk4vewf2-app-service
      (✓) Done: Azure Database for PostgreSQL flexible server: yourenv-e2najjk4vewf2-postgres-server
      (✓) Done: Cache for Redis: yourenv-e2najjk4vewf2-redisCache
      (✓) Done: Private Endpoint: cache-privateEndpoint
    
    SUCCESS: Your application was provisioned in Azure in 32 minutes.
    You can view the resources created under the resource group yourenv-rg in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/1111111-1111-1111-1111-111111111111/resourceGroups/yourenv-rg/overview
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
      - Endpoint: https://yourenv-e2najjk4vewf2-app-service.azurewebsites.net/
    
    

2. Untersuchen der Datenbank-Verbindungszeichenfolge

Die Azd-Vorlage generiert die Konnektivitätsvariablen für Sie als App-Einstellungen. App-Einstellungen sind eine Möglichkeit, um Verbindungsgeheimnisse aus Ihrem Coderepository herauszuhalten.

  1. Suchen Sie in der Datei infra/resources.bicep die App-Einstellungen und die Einstellung für AZURE_POSTGRESQL_CONNECTIONSTRING.

    resource appSettings 'config' = {
      name: 'appsettings'
      properties: {
        SCM_DO_BUILD_DURING_DEPLOYMENT: 'true'
        AZURE_POSTGRESQL_CONNECTIONSTRING: 'dbname=${pythonAppDatabase.name} host=${postgresServer.name}.postgres.database.azure.com port=5432 sslmode=require user=${postgresServer.properties.administratorLogin} password=${databasePassword}'
        SECRET_KEY: secretKey
        AZURE_REDIS_CONNECTIONSTRING: 'rediss://:${redisCache.listKeys().primaryKey}@${redisCache.name}.redis.cache.windows.net:6380/0'
      }
    }
    
  2. AZURE_POSTGRESQL_CONNECTIONSTRING enthält die Verbindungszeichenfolge für die Postgres-Datenbank in Azure. Sie müssen sie verwenden, um eine Verbindung damit herzustellen. Sie finden den Code, der diese Umgebungsvariable verwendet, in src/fastapi/models.py:

    sql_url = ""
    if os.getenv("WEBSITE_HOSTNAME"):
        logger.info("Connecting to Azure PostgreSQL Flexible server based on AZURE_POSTGRESQL_CONNECTIONSTRING...")
        env_connection_string = os.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
        if env_connection_string is None:
            logger.info("Missing environment variable AZURE_POSTGRESQL_CONNECTIONSTRING")
        else:
            # Parse the connection string
            details = dict(item.split('=') for item in env_connection_string.split())
    
            # Properly format the URL for SQLAlchemy
            sql_url = (
                f"postgresql://{quote_plus(details['user'])}:{quote_plus(details['password'])}"
                f"@{details['host']}:{details['port']}/{details['dbname']}?sslmode={details['sslmode']}"
            )
    
    else:
        logger.info("Connecting to local PostgreSQL server based on .env file...")
        load_dotenv()
        POSTGRES_USERNAME = os.environ.get("DBUSER")
        POSTGRES_PASSWORD = os.environ.get("DBPASS")
        POSTGRES_HOST = os.environ.get("DBHOST")
        POSTGRES_DATABASE = os.environ.get("DBNAME")
        POSTGRES_PORT = os.environ.get("DBPORT", 5432)
    
        sql_url = f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DATABASE}"
    
    engine = create_engine(sql_url)
    

3. Untersuchen des Startbefehls

Azure App Service erfordert einen Startbefehl, um Ihre FastAPI-App auszuführen. Die azd-Vorlage legt diesen Befehl in Ihrer App Service-Instanz für Sie fest.

  1. Suchen Sie in der Datei infra/resources.bicep die Deklaration für Ihre Website und dann die Einstellung für appCommandLine. Dies ist die Einstellung für den Startbefehl.

    resource web 'Microsoft.Web/sites@2022-03-01' = {
      name: '${prefix}-app-service'
      location: location
      tags: union(tags, { 'azd-service-name': 'web' })
      kind: 'app,linux'
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          alwaysOn: true
          linuxFxVersion: 'PYTHON|3.11'
          ftpsState: 'Disabled'
          appCommandLine: 'src/entrypoint.sh'
          minTlsVersion: '1.2'
        }
        httpsOnly: true
      }
      identity: {
        type: 'SystemAssigned'
      }
    
  2. Der Startbefehl führt die Datei "src/entrypoint.sh" aus. Überprüfen Sie den Code in dieser Datei, um die Befehle zu verstehen, die der App-Dienst ausführt, um Ihre App zu starten:

    #!/bin/bash
    set -e
    python3 -m pip install --upgrade pip
    python3 -m pip install -e src
    python3 src/fastapi_app/seed_data.py
    python3 -m gunicorn fastapi_app:app -c src/gunicorn.conf.py
    

Weitere Informationen zur App-Konfiguration und zum Starten in App Service finden Sie unter Konfigurieren einer Linux Python-App für Azure App Service.

4. Generieren des Datenbankschemas

Möglicherweise haben Sie im vorherigen Abschnitt bemerkt, dass entrypoint.sh die folgende Zeile enthält: python3 src/fastapi_app/seed_data.py Mit diesem Befehl wird Ihre Datenbank migriert. In der Beispiel-App wird damit nur sichergestellt, dass die richtigen Tabellen in Ihrer Datenbank erstellt werden. Er füllt diese Tabellen nicht mit Daten auf.

In diesem Abschnitt führen Sie diesen Befehl zu Demonstrationszwecken manuell aus. Mit der durch das virtuelle Netzwerk geschützten PostgreSQL-Datenbank besteht die einfachste Möglichkeit zum Ausführen des Befehls in einer SSH-Sitzung mit dem App Service-Container.

  1. Verwenden Sie den Wert des App-Diensts , den Sie zuvor in der azd-Ausgabe erwähnt haben, um die URL für die SSH-Sitzung zu erstellen und im Browser zu diesem zu navigieren:

  2. Führen Sie im SSH-Terminal python3 src/fastapi_app/seed_data.py aus. Wenn dies erfolgreich ist, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit.

    Screenshot der Befehle, die in der SSH-Shell und deren Ausgabe (FastAPI) ausgeführt werden sollen.

    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.

5. 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: <URL>
     
  2. Fügen Sie ein paar Restaurants zu der Liste hinzu.

    Screenshot der FastAPI-Web-App mit PostgreSQL, die in Azure ausgeführt wird, mit Restaurants und Restaurantbewertungen (FastAPI).

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

6. Streamen von Diagnoseprotokollen

Azure App Service kann Protokolle erfassen, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Aus Gründen der Einfachheit hat die azd-Vorlage bereits die Protokollierung im lokalen Dateisystem aktiviert.

Die Beispiel-App verwendet das Protokollierungsmodul der Python-Standardbibliothek zum Ausgeben von Protokollen. Die Beispiel-App enthält Aufrufe des Protokollierungsmoduls, wie unten dargestellt.

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

Um auf den Protokolldatenstrom zuzugreifen, öffnen Sie Ihre App im Azure-Portal. Wählen Sie Überwachung>Protokolldatenstrom aus.

Es kann mehrere Minuten dauern, bis Ereignisse in den Diagnoseprotokollen angezeigt werden. Erfahren Sie mehr über die Protokollierung in Python-Apps in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.

7. Bereinigen von Ressourcen

Führen Sie azd down aus, 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. Details finden Sie in den Diagnoseprotokollen . Wenn beispielsweise ein Fehler wie KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING' 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_CONNECTIONSTRING) geändert 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 auf der Ebene "Einfach " erstellt und kann nach oben oder unten skaliert werden. Siehe App Service-Preise.
  • Der flexibler Server von PostgreSQL wird in der niedrigsten burstable Stufe Standard_B1ms mit der minimalen Speichergröße erstellt, die nach oben oder unten skaliert werden kann. Siehe Azure Database for PostgreSQL pricing.
  • 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 über das SSH-Terminal der App ausführen.
  • Um eine Verbindung mit einem Desktoptool herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Beispielsweise könnte es sich um eine Azure-VM sein, die mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, der ü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

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: