Freigeben über


Lernprogramm: Erstellen und Bereitstellen einer Python-Web-App mit Azure-Container-Apps und PostgreSQL

Dieser Artikel ist Teil einer Tutorialserie zum Containerisieren und zum Bereitstellen einer Python-Web-App in Azure Container Apps. Mit Container Apps können Sie containerisierte Aps bereitstellen, ohne eine komplexe Infrastruktur verwalten zu müssen.

In diesem Tutorial:

  • Containerisieren Sie eine Python-Beispielweb-App (Django oder Flask), indem Sie ein Containerimage in der Cloud erstellen.
  • Stellen Sie das Container-Image für Azure Container Apps bereit.
  • Definieren Sie Umgebungsvariablen, mit denen die Container-App eine Verbindung mit einer Azure-Datenbank für PostgreSQL herstellen kann – flexible Server- Instanz, in der die Beispiel-App Daten speichert.

Das folgende Diagramm zeigt die Aufgaben in diesem Tutorial: Erstellen und Bereitstellen eines Container-Images.

Diagramm der Dienste, die an der Bereitstellung einer Python-App in Azure-Container-Apps beteiligt sind, wobei die Teile über das manuelle Erstellen eines Images hervorgehoben sind.

Voraussetzungen

Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.

Sie können Azure CLI-Befehle in Azure Cloud Shell oder auf einer Arbeitsstation ausführen, auf der die Azure CLI installiert ist.

Wenn Sie lokal arbeiten, führen Sie die folgenden Schritte aus, um sich anzumelden und die erforderlichen Module für dieses Tutorial zu installieren:

  1. Melden Sie sich bei Azure an, und authentifizieren Sie sich bei Bedarf:

    az login
    
  2. Stellen Sie sicher, dass Sie die neueste Version der Azure CLI ausführen:

    az upgrade
    
  3. Installieren oder aktualisieren Sie die containerapp und rdbms-connect Azure CLI-Erweiterungen mit dem Befehl az extension add:

    az extension add --name containerapp --upgrade
    az extension add --name rdbms-connect --upgrade
    

    Hinweis

    Um die auf Ihrem System installierten Erweiterungen aufzulisten, können Sie den Befehl az extension list verwenden. Zum Beispiel:

    az extension list --query [].name --output tsv
    

Abrufen der Beispiel-App

Forken und klonen Sie den Beispielcode in Ihrer Entwicklungsumgebung:

  1. Gehen Sie zum GitHub-Repository der Beispiel-App (Django oder Flask) und wählen Sie Fork.

    Führen Sie die Schritte aus, um das Repository in Ihr GitHub-Konto zu forken. Sie können den Code-Repo auch direkt auf Ihre lokale Maschine herunterladen, ohne dass Sie einen Fork oder ein GitHub-Konto benötigen. Wenn Sie jedoch die Downloadmethode verwenden, können Sie im nächsten Tutorial dieser Reihe keine kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) einrichten.

  2. Verwenden Sie den Befehl git clone, um das geforkte Repository in den Ordner python-container zu klonen:

    # Django
    git clone https://github.com/$USERNAME/msdocs-python-django-azure-container-apps.git python-container
    
    # Flask
    # git clone https://github.com/$USERNAME/msdocs-python-flask-azure-container-apps.git python-container
    
  3. Ändern Sie das Verzeichnis:

    cd python-container
    

Erstellen Sie ein Container-Image aus dem Code einer Web-App

Nachdem Sie diese Schritte ausgeführt haben, verfügen Sie über eine Azure-Containerregistrierungsinstanz, die ein Docker-Containerimage enthält, das aus dem Beispielcode erstellt wurde.

  1. Erstellen Sie eine Ressourcengruppe mit dem Befehl Az group create:

    az group create \
        --name pythoncontainer-rg \
        --location <location>
    

    Ersetzen Sie <Speicherort> durch einen der Azure-Speicherort Name-Werte aus der Ausgabe des Befehls az account list-locations -o table.

  2. Erstellen Sie eine Containerregistrierung mit dem Befehl az acr create:

    az acr create \
        --resource-group pythoncontainer-rg \
        --name <registry-name> \
        --sku Basic \
        --admin-enabled
    

    Der Name, den Sie für <Registrierungsnamen verwenden> muss in Azure eindeutig sein und muss 5 bis 50 alphanumerische Zeichen enthalten.

  3. Melden Sie sich mit dem Befehl az acr login in der Registry an:

    az acr login --name <registry-name>
    

    Der Befehl fügt „azurecr.io“ an den Namen an, um den voll qualifizierten Registrierungsnamen zu erstellen. Wenn die Anmeldung erfolgreich ist, wird die Meldung "Anmeldung erfolgreich" angezeigt. Wenn Sie von einem Abonnement aus auf die Registrierung zugreifen, das sich von dem Abonnement unterscheidet, in dem Sie die Registrierung erstellt haben, verwenden Sie die Option --suffix.

    Wenn die Anmeldung fehlschlägt, stellen Sie sicher, dass der Docker-Daemon auf Ihrem System ausgeführt wird.

  4. Erstellen Sie das Image mit dem Befehl az acr build:

    az acr build \
        --registry <registry-name> \
        --resource-group pythoncontainer-rg \
        --image pythoncontainer:latest .
    

    Zu berücksichtigende Aspekte:

    • Der Punkt (.) am Ende des Befehls gibt den Speicherort des zu erstellenden Quellcodes an. Wenn Sie diesen Befehl nicht im Stammverzeichnis der Beispiel-App ausführen, geben Sie den Pfad zum Code an.

    • Wenn Sie den Befehl in Azure Cloud Shell ausführen, verwenden Sie git clone, um das Repository zuerst in die Cloud Shell-Umgebung abzurufen. Wechseln Sie dann in das Root-Verzeichnis des Projekts, damit der Punkt (.) richtig interpretiert wird.

    • Wenn Sie die Option „-t“ (wie „--image“) weglassen, stellt der Befehl einen lokalen Kontext-Build in die Warteschlange, ohne ihn in die Registrierung zu stellen. Erstellen ohne Pushen kann nützlich sein, um zu überprüfen, ob das Image erstellt wird.

  5. Bestätigen Sie, dass das Image des Containers erstellt wurde, indem Sie den Befehl az acr repository list verwenden:

    az acr repository list --name <registry-name>
    

Hinweis

Die Schritte in diesem Abschnitt erstellen eine Containerregistrierung auf der Stufe "Standarddienst". Diese Stufe ist kostenoptimiert, mit einem Funktionsumfang und einem Durchsatz, der auf Entwicklerszenarien abzielt, und ist geeignet für die Anforderungen dieses Lernprogramms. In Produktionsszenarien würden Sie wahrscheinlich entweder die Dienstebene "Standard" oder "Premium" verwenden. Diese Ebenen bieten erweiterte Speicher- und Durchsatzkapazitäten.

Mehr erfahren Sie unter Azure Container Registry Service-Tiers. Informationen zu den Preisen finden Sie unter Preise für Azure Container Registry.

Erstellen Sie eine PostgreSQL Flexible Server-Instanz

Die Beispiel-App (Django oder Flask) speichert Daten zu Restaurantbewertungen in einer PostgreSQL-Datenbank. In diesen Schritten erstellen Sie den Server, der die Datenbank enthalten wird.

  1. Verwenden Sie den Befehl az postgres flexible-server create, um den PostgreSQL-Server in Azure zu erstellen. Es ist nicht ungewöhnlich, dass dieser Befehl einige Minuten lang ausgeführt wird, bevor er abgeschlossen ist.

    az postgres flexible-server create \
       --resource-group pythoncontainer-rg \
       --name <postgres-server-name>  \
       --location <location> \
       --admin-user demoadmin \
       --admin-password <admin-password> \
       --active-directory-auth Enabled \
       --tier burstable \
       --sku-name standard_b1ms \
       --public-access 0.0.0.0 
    

    Verwenden Sie die folgenden Werte:

    • pythoncontainer-rg: Der Name der Ressourcengruppe, die dieses Tutorial verwendet. Wenn Sie einen anderen Namen verwendet haben, ändern Sie diesen Wert.

    • <postgres-server-name>: Der Name des PostgreSQL-Datenbankservers. Dieser Name muss in ganz Azure eindeutig sein. Der Endpunkt des Servers ist https://<postgres-server-name>.postgres.database.azure.com. Zulässige Zeichen sind A bis Z, 0 bis 9und Bindestrich (-).

    • <Speicherort>: Verwenden Sie denselben Speicherort, den Sie für die Web-App verwendet haben. <Speicherort> ist einer der Werte des Azure Speicherorts Name aus der Ausgabe des Befehls az account list-locations -o table.

    • <Administratorbenutzername>: Der Benutzername für das Administratorkonto. Es kann nicht azure_superuser, admin, administrator, root, guestoder publicsein. Verwenden Sie demoadmin für dieses Tutorial.

    • <Administratorkennwort>: Das Kennwort des Administratorbenutzers. Es muss 8 bis 128 Zeichen aus drei der folgenden Kategorien enthalten: Englische Großbuchstaben, englische Kleinbuchstaben, Zahlen und nicht alphanumerische Zeichen.

      Wichtig

      Wenn Sie Benutzernamen oder Kennwörter erstellen, verwenden Sie nicht das Dollarzeichen ($). Wenn Sie später Umgebungsvariablen mit diesen Werten erstellen, hat dieses Zeichen eine besondere Bedeutung innerhalb des Linux-Containers, den Sie zum Ausführen von Python-Apps verwenden.

    • --active-directory-auth: Dieser Wert gibt an, ob die Microsoft Entra-Authentifizierung auf dem PostgreSQL-Server aktiviert ist. Stellen Sie es auf Enabledein.

    • --sku-name: Der Name des Preisniveaus und der Berechnungskonfiguration; beispiel: Standard_B1ms. Weitere Informationen finden Sie unter Azure Database for PostgreSQL – Preise. Verwenden Sie az postgres flexible-server list-skus --location <location>, um verfügbare Ebenen auflisten zu können.

    • --public-access: Verwenden Sie 0.0.0.0. Es ermöglicht den öffentlichen Zugriff auf den Server über jeden Azure-Dienst, z. B. Container Apps.

    Hinweis

    Wenn Sie planen, mit dem PostgreSQL-Server von Ihrer lokalen Workstation aus mit Hilfe von Tools zu arbeiten, müssen Sie eine Firewall-Regel für die IP-Adresse Ihrer Workstation mit dem Befehl az postgres flexible-server firewall-rule create erstellen.

  2. Verwenden Sie den Befehl az ad signed-in-user show, um die Objekt-ID Ihres Benutzerkontos zu erhalten. Sie verwenden diese ID im nächsten Befehl.

    az ad signed-in-user show --query id --output tsv
    
  3. Verwenden Sie den Befehl az postgres flexible-server ad-admin create, um Ihr Benutzerkonto als Microsoft Entra-Administrator auf dem PostgreSQL-Server zu erstellen:

    az postgres flexible-server ad-admin create \
       --resource-group pythoncontainer-rg \
       --server-name <postgres-server-name>  \
       --display-name <your-email-address> \
       --object-id <your-account-object-id>
    

    Verwenden Sie für Ihre Kontoobjekt-ID den Wert, den Sie im vorherigen Schritt erhalten haben.

Hinweis

In diesem Abschnitt erfahren Sie, wie Sie einen PostgreSQL-Server mit einem einzelnen vCore und eingeschränktem Arbeitsspeicher in der Preisklasse "Burstable" erstellen. Das Burstable- Tier ist eine kostengünstigere Option für Workloads, die nicht ständig die volle CPU-Leistung benötigen, und eignet sich für die Anforderungen dieses Tutorials. Für produktive Workloads können Sie entweder auf die Preis-Tier "Universell" oder "Speicheroptimiert" upgraden. Diese Stufen bieten eine höhere Leistung, erhöhen aber die Kosten.

Mehr erfahren Sie unter Compute-Optionen in Azure Database for PostgreSQL – Flexible Server. Informationen zu preisen finden Sie unter Azure Database for PostgreSQL pricing.

Erstellen Sie eine Datenbank auf dem Server

Zu diesem Zeitpunkt haben Sie einen PostgreSQL-Server. In diesem Abschnitt erstellen Sie eine Datenbank auf dem Server.

Verwenden Sie den Befehl az postgres flexible-server db create, um eine Datenbank namens restaurants_reviews zu erstellen:

az postgres flexible-server db create \
   --resource-group pythoncontainer-rg \
   --server-name <postgres-server-name> \
   --database-name restaurants_reviews

Verwenden Sie die folgenden Werte:

  • pythoncontainer-rg: Der Name der Ressourcengruppe, die dieses Tutorial verwendet. Wenn Sie einen anderen Namen verwendet haben, ändern Sie diesen Wert.
  • <postgres-server-name>: Der Name des PostgreSQL-Servers.

Sie könnten auch den Befehl az postgres flexible-server connect verwenden, um sich mit der Datenbank zu verbinden und dann mit den Befehlen psql arbeiten. Wenn Sie mit psql arbeiten, ist es häufig einfacher, Azure Cloud Shell zu verwenden, da die Shell alle Abhängigkeiten für Sie enthält.

Sie können auch eine Verbindung mit dem flexiblen Server der Azure-Datenbank für PostgreSQL herstellen und eine Datenbank erstellen, indem Sie psql- oder eine IDE verwenden, die PostgreSQL unterstützt, z. B. Azure Data Studio. Schritte zur Verwendung von psql finden Sie unter Konfigurieren der verwalteten Identität in der PostgreSQL-Datenbank weiter unten in diesem Artikel.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Erstellen Sie eine vom Benutzer zugewiesene verwaltete Identität, die als Identität für die Container-App verwendet werden soll, wenn sie in Azure ausgeführt wird.

Hinweis

Ihrem Konto muss die Rolle Mitwirkender für verwaltete Identität zugewiesen sein, damit eine benutzerseitig zugewiesene verwaltete Identität erstellt werden kann.

Verwenden Sie den Befehl az identity create zum Erstellen einer benutzerseitig zugewiesenen verwalteten Identität:

az identity create --name my-ua-managed-id --resource-group pythoncontainer-rg

Konfigurieren der verwalteten Identität in der PostgreSQL-Datenbank

Konfigurieren Sie die verwaltete Identität als Rolle auf dem PostgreSQL-Server, und erteilen Sie ihm dann die erforderlichen Berechtigungen für die restaurants_reviews-Datenbank. Unabhängig davon, ob Sie die Azure CLI oder psql verwenden, müssen Sie eine Verbindung mit dem Azure PostgreSQL-Server mit einem Benutzer herstellen, der als Microsoft Entra-Administrator auf Ihrer Serverinstanz konfiguriert ist. Nur Als PostgreSQL-Administrator konfigurierte Microsoft Entra-Konten können verwaltete Identitäten und andere Microsoft-Administratorrollen auf Ihrem Server konfigurieren.

  1. Holen Sie sich ein Zugriffstoken für Ihr Azure-Konto, indem Sie den Befehl "az account get-access-token" verwenden. Sie verwenden das Zugriffstoken in den nächsten Schritten.

    az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken
    

    Das zurückgegebene Token ist lang. Legen Sie den Wert in einer Umgebungsvariablen fest, die im nächsten Schritt in den Befehlen verwendet werden soll:

    MY_ACCESS_TOKEN=<your-access-token>
    
  2. Fügen Sie die vom Benutzer zugewiesene verwaltete Identität als Datenbankrolle auf Ihrem PostgreSQL-Server hinzu, indem Sie den Befehl az postgres flexible-server execute verwenden:

    az postgres flexible-server execute \
        --name <postgres-server-name> \
        --database-name postgres \
        --querytext "select * from pgaadauth_create_principal('"my-ua-managed-id"', false, false);select * from pgaadauth_list_principals(false);" \
        --admin-user <your-Azure-account-email> \
        --admin-password $MY_ACCESS_TOKEN
    

    Verwenden Sie die folgenden Werte:

    • Wenn Sie einen anderen Namen für Ihre verwaltete Identität verwendet haben, ersetzen Sie my-ua-managed-id im Befehl pgaadauth_create_principal durch den Namen Ihrer verwalteten Identität.

    • Verwenden Sie für den wert --admin-user die E-Mail-Adresse für Ihr Azure-Konto.

    • Verwenden Sie für den Wert --admin-password das Token aus der Ausgabe des vorherigen Befehls, ohne Anführungszeichen.

    • Stellen Sie sicher, dass der Datenbankname postgresist.

    Hinweis

    Wenn Sie den Befehl az postgres flexible-server execute auf Ihrer lokalen Arbeitsstation ausführen, stellen Sie sicher, dass Sie eine Firewallregel für die IP-Adresse Ihrer Arbeitsstation hinzugefügt haben. Sie können mit dem Befehl az postgres flexible-server firewall-rule create eine Regel hinzufügen. Die gleiche Anforderung ist auch für den Befehl im nächsten Schritt vorhanden.

  3. Erteilen Sie der vom Benutzer zugewiesenen verwalteten Identität die erforderlichen Berechtigungen für die Datenbank restaurants_reviews, indem Sie den folgenden Befehl az postgres flexible-server execute verwenden:

    az postgres flexible-server execute \
        --name <postgres-server-name> \
        --database-name restaurants_reviews \
        --querytext "GRANT CONNECT ON DATABASE restaurants_reviews TO \"my-ua-managed-id\";GRANT USAGE ON SCHEMA public TO \"my-ua-managed-id\";GRANT CREATE ON SCHEMA public TO \"my-ua-managed-id\";GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"my-ua-managed-id\";ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO \"my-ua-managed-id\";" \
        --admin-user <your-Azure-account-email> \
        --admin-password $MY_ACCESS_TOKEN
    

    Verwenden Sie die folgenden Werte:

    • Wenn Sie einen anderen Namen für Ihre verwaltete Identität verwendet haben, ersetzen Sie alle Instanzen von my-ua-managed-id im Befehl durch den Namen Ihrer verwalteten Identität. In der Zeichenfolge der Abfrage befinden sich fünf Instanzen.

    • Verwenden Sie für den wert --admin-user die E-Mail-Adresse Ihres Azure-Kontos.

    • Verwenden Sie für den Wert --admin-password das Zugriffstoken aus der vorherigen Ausgabe, ohne Anführungszeichen.

    • Stellen Sie sicher, dass der Datenbankname restaurants_reviewsist.

    Dieser Azure CLI-Befehl stellt eine Verbindung mit der restaurants_reviews-Datenbank auf dem Server her und führt die folgenden SQL-Befehle aus:

    GRANT CONNECT ON DATABASE restaurants_reviews TO "my-ua-managed-id";
    GRANT USAGE ON SCHEMA public TO "my-ua-managed-id";
    GRANT CREATE ON SCHEMA public TO "my-ua-managed-id";
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "my-ua-managed-id";
    ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "my-ua-managed-id";
    

Stellen Sie die Web-App in Container Apps bereit

Container Apps werden in Azure Container Apps-Umgebungen bereitgestellt, die als sichere Abgrenzung dienen. In den folgenden Schritten erstellen Sie die Umgebung und einen Container innerhalb der Umgebung. Anschließend konfigurieren Sie den Container so, dass die Website extern sichtbar ist.

Für diese Schritte ist die Azure Container Apps-Erweiterung containerapperforderlich.

  1. Erstellen Sie eine Umgebung für Container Apps mit dem Befehl az containerapp env create:

    az containerapp env create \
    --name python-container-env \
    --resource-group pythoncontainer-rg \
    --location <location>
    

    <Speicherort> ist einer der Werte des Azure Speicherorts Name aus der Ausgabe des Befehls az account list-locations -o table.

  2. Holen Sie sich die Anmeldeinformationen für die Azure Container Registry-Instanz mit dem Befehl az acr credential show:

    az acr credential show -n <registry-name>
    

    Sie verwenden den Benutzernamen und eines der Kennwörter, die in der Befehlsausgabe zurückgegeben werden, wenn Sie die Container-App in Schritt 5 erstellen.

  3. Verwenden Sie den Befehl az identity show, um die Client ID und die Ressourcen ID der vom Benutzer zugewiesenen verwalteten Identität zu erhalten:

    az identity show --name my-ua-managed-id --resource-group pythoncontainer-rg --query "[clientId, id]" --output tsv
    

    Sie verwenden den Wert der Client-ID (GUID) und die Ressourcen-ID aus der Ausgabe des Befehls, wenn Sie die Container App in Schritt 5 erstellen. Die Ressourcen-ID hat die folgende Form: /subscriptions/<subscription-id>/resourcegroups/pythoncontainer-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-ua-managed-id.

  4. Führen Sie den folgenden Befehl aus, um einen geheimen Schlüsselwert zu generieren:

    python -c 'import secrets; print(secrets.token_hex())'
    

    Sie verwenden den Wert des geheimen Schlüssels, um eine Umgebungsvariable festzulegen, wenn Sie die Container-App in Schritt 5 erstellen.

    Hinweis

    Der in diesem Schritt gezeigte Befehl ist für eine Bash-Shell. Je nach Ihrer Umgebung müssen Sie Python möglicherweise mithilfe von python3aufrufen. Unter Windows müssen Sie den Befehl im Parameter -c in doppelte Anführungszeichen statt in einfache Anführungszeichen setzen. Möglicherweise müssen Sie Python auch mithilfe von py oder py -3aufrufen, je nach Ihrer Umgebung.

  5. Erstellen Sie eine Container App in der Umgebung mit dem Befehl az containerapp create:

    az containerapp create \
    --name python-container-app \
    --resource-group pythoncontainer-rg \
    --image <registry-name>.azurecr.io/pythoncontainer:latest \
    --environment python-container-env \
    --ingress external \
    --target-port <5000 for Flask or 8000 for Django> \
    --registry-server <registry-name>.azurecr.io \
    --registry-username <registry-username> \
    --registry-password <registry-password> \
    --user-assigned <managed-identity-resource-id> \
    --query properties.configuration.ingress.fqdn \
    --env-vars DBHOST="<postgres-server-name>" \
    DBNAME="restaurants_reviews" \
    DBUSER="my-ua-managed-id" \
    RUNNING_IN_PRODUCTION="1" \
    AZURE_CLIENT_ID="<managed-identity-client-id>" \
    AZURE_SECRET_KEY="<your-secret-key>"
    

    Ersetzen Sie unbedingt alle Werte in eckigen Klammern durch Werte, die Sie in dieser Anleitung verwenden. Beachten Sie, dass der Name Ihrer Container-App in Azure eindeutig sein muss.

    Der Wert des --env-vars Parameters ist eine Zeichenfolge, die aus durch Leerzeichen getrennten Werten im key="value" Format mit den folgenden Werten besteht:

    • DBHOST="\<postgres-server-name>"
    • DBNAME="restaurants_reviews"
    • DBUSER="my-ua-managed-id"
    • RUNNING_IN_PRODUCTION="1"
    • AZURE_CLIENT_ID="\<managed-identity-client-id>"
    • AZURE_SECRET_KEY="\<your-secret-key>"

    Der Wert für DBUSER ist der Name der vom Benutzer zugewiesenen verwalteten Identität.

    Der Wert für AZURE_CLIENT_ID ist die Client ID der vom Benutzer zugewiesenen verwalteten Identität. Sie haben diesen Wert in einem vorherigen Schritt erhalten.

    Der Wert für AZURE_SECRET_KEY ist der Wert des geheimen Schlüssels, den Sie in einem vorherigen Schritt generiert haben.

  6. Nur für Django: Migrieren Sie und erstellen Sie ein Datenbankschema. (In der Flask-Beispiel-App geschieht dies automatisch, so dass Sie diesen Schritt überspringen können).

    Stellen Sie mit dem Befehl az containerapp exec eine Verbindung her:

        az containerapp exec \
            --name python-container-app \
            --resource-group pythoncontainer-rg
    

    Geben Sie dann am Shell Prompt python manage.py migrate ein.

    Für Revisionen des Containers brauchen Sie nicht zu migrieren.

  7. Testen Sie die Website.

    Der von Ihnen eingegebene Befehl az containerapp create gibt eine Anwendungs-URL aus, mit der Sie zur App navigieren können. Die URL endet in azurecontainerapps.io. Rufen Sie die URL in einem Browser auf. Alternativ können Sie auch den Befehl az containerapp browse verwenden.

Hier ist ein Beispiel für die Beispielwebsite nach dem Hinzufügen eines Restaurants und zwei Bewertungen.

Screenshot der Beispielwebsite, die in diesem Tutorial erstellt wurde.

Problembehandlung bei der Bereitstellung

Sie haben die Anwendungs-URL vergessen, um auf die Website zuzugreifen.

Im Azure-Portal:

  • Gehen Sie auf die Seite Übersicht der Container App und suchen Sie nach Anwendungs-Url.

Im VS-Code:

  1. Gehen Sie zur Azure-Ansicht (Strg+Umschalt+A) und erweitern Sie das Abonnement, in dem Sie arbeiten.
  2. Erweitern Sie den Knoten Container Apps, erweitern Sie die verwaltete Umgebung, klicken Sie mit der rechten Maustaste auf python-container-app und wählen Sie dann Durchsuchen. VS Code öffnet den Browser mit der Anwendungs-URL.

Führen Sie über die Azure CLI folgende Schritte aus:

  • Verwenden Sie den Befehl az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn.

In VS Code gibt die Build-Image-in-Azure-Aufgabe einen Fehler zurück.

Wenn Sie die Meldung „Fehler: Kontext kann nicht heruntergeladen werden. Bitte prüfen Sie, ob die URL falsch ist" im VS Code Output-Fenster, aktualisieren Sie die Registry in der Docker-Erweiterung. Zur Aktualisierung wählen Sie die Docker-Erweiterung aus, gehen zum Abschnitt Registries, suchen die Registrierung und wählen sie aus.

Wenn Sie die Aufgabe Image in Azure erstellen erneut ausführen, überprüfen Sie, ob Ihre Registry aus einer früheren Ausführung noch vorhanden ist. Wenn ja, verwenden Sie es.

Im Azure-Portal wird während der Erstellung einer Container-App ein Zugriffsfehler angezeigt.

Ein Zugriffsfehler mit der Meldung "Kann auf ACR '<Name>.azurecr.io' nicht zugreifen" tritt auf, wenn die Administratoranmeldeinformationen für eine Instanz der Azure Container Registry deaktiviert sind.

Um den Administratorstatus im Portal zu überprüfen, wechseln Sie zu Ihrer Azure Container Registry-Instanz, wählen Sie die Zugriffsschlüssel Ressource aus, und stellen Sie sicher, dass der Administratorbenutzer aktiviert ist.

Ihr Containerimage wird nicht in der Azure Container Registry-Instanz angezeigt.

  • Überprüfen Sie die Ausgabe des Azure CLI-Befehls oder die Ausgabe von VS Code und suchen Sie nach Nachrichten, die den Erfolg bestätigen.
  • Überprüfen Sie, ob der Name der Registrierung in Ihrem Build-Befehl mit der Azure CLI oder in den Aufgabenaufforderungen von VS Code korrekt angegeben wurde.
  • Vergewissern Sie sich, dass Ihre Berechtigungsnachweise nicht abgelaufen sind. Suchen Sie zum Beispiel in VS Code die Zielregistrierung in der Docker-Erweiterung und aktualisieren Sie sie. Führen Sie den Befehl az loginin der Azure CLI aus.

Website gibt "Ungültige Anforderung (400)" zurück.

Wenn ein Fehler "Ungültige Anforderung (400)" angezeigt wird, überprüfen Sie die an den Container übergebenen PostgreSQL-Umgebungsvariablen. Der 400-Fehler zeigt oft an, dass der Python-Code keine Verbindung zur PostgreSQL-Instanz herstellen kann.

Der in diesem Lernprogramm verwendete Beispielcode überprüft das Vorhandensein der Containerumgebungsvariablen RUNNING_IN_PRODUCTION, die auf einen beliebigen Wert festgelegt werden kann (z. B. 1).

Website gibt "Nicht gefunden (404)" zurück.

  • Überprüfen Sie den Wert Anwendungs-Url auf der Seite Übersicht für den Container. Wenn die Anwendungs-URL das Wort "intern" enthält, ist der Ingress nicht richtig konfiguriert.
  • Prüfen Sie das Eindringen in den Behälter. Gehen Sie zum Beispiel im Azure-Portal zur Ressource Ingress des Containers. Vergewissern Sie sich, dass HTTP Ingress aktiviert ist und Datenverkehr von überall her annehmen ausgewählt ist.

Die Website startet nicht, Sie erhalten "Stream-Timeout" oder es wird nichts zurückgegeben.

  • Überprüfen Sie die Protokolle:
    • Gehen Sie im Azure-Portal zur Ressource für die Revisionsverwaltung der Container-App und überprüfen Sie den Status der Bereitstellung für den Container:
      • Wenn der Status Bereitstellung lautet, warten Sie, bis die Bereitstellung abgeschlossen ist.
      • Wenn der Status Fehlgeschlagen lautet, wählen Sie die Revision aus und sehen Sie sich die Konsolenprotokolle an. Wählen Sie die Reihenfolge der Spalten, um Zeit generiert, Stream_s und Log_s anzuzeigen. Sortieren Sie die Protokolle nach dem neuesten Stand und suchen Sie nach Python stderr- und stdout-Nachrichten in der Spalte Stream_s. Python print Ausgabe ist stdout Nachrichten.
    • Verwenden Sie in der Azure CLI den Befehl az containerapp logs show.
  • Wenn Sie das Django-Framework verwenden, überprüfen Sie, ob die restaurants_reviews Tabellen in der Datenbank vorhanden sind. Falls nicht, verwenden Sie eine Konsole, um auf den Container zuzugreifen und führen Sie „python manage.py migrate“ aus.

Nächster Schritt