Udostępnij za pomocą


Samouczek: tworzenie i wdrażanie aplikacji internetowej w języku Python za pomocą usług Azure Container Apps i PostgreSQL

Ten artykuł jest częścią serii samouczków dotyczących konteneryzowania i wdrażania aplikacji internetowej w języku Python w celu azure Container Apps. Usługa Container Apps umożliwia wdrażanie konteneryzowanych aplikacji bez zarządzania złożoną infrastrukturą.

W tym samouczku nauczysz się:

  • Konteneryzowanie przykładowej aplikacji internetowej w języku Python (Django lub Flask), tworząc obraz kontenera w chmurze.
  • Wdróż obraz kontenera w usłudze Azure Container Apps.
  • Zdefiniuj zmienne środowiskowe, które umożliwiają aplikacji kontenera połączenie z wystąpieniem Azure Database for PostgreSQL - serwer elastyczny. W tym wystąpieniu przykładowa aplikacja przechowuje dane.

Na poniższym diagramie przedstawiono zadania opisane w tym samouczku: kompilowanie i wdrażanie obrazu kontenera.

Diagram usług związanych z wdrażaniem aplikacji języka Python w usłudze Azure Container Apps z wyróżnionymi częściami dotyczącymi ręcznego kompilowania obrazu.

Warunki wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto .

Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej z zainstalowanym Azure CLI.

Jeśli korzystasz lokalnie, wykonaj następujące kroki, aby zalogować się i zainstalować niezbędne moduły na potrzeby tego samouczka:

  1. Zaloguj się do platformy Azure i w razie potrzeby uwierzytelnij się:

    az login
    
  2. Upewnij się, że używasz najnowszej wersji interfejsu wiersza polecenia platformy Azure:

    az upgrade
    
  3. Zainstaluj lub uaktualnij rozszerzenia containerapp i rdbms-connect dla Azure CLI, używając polecenia az extension add:

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

    Uwaga

    Aby wyświetlić listę rozszerzeń zainstalowanych w systemie, możesz użyć polecenia az extension list. Na przykład:

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

Pobieranie przykładowej aplikacji

Forkowanie i klonowanie przykładowego kodu do środowiska deweloperskiego.

  1. Przejdź do repozytorium GitHub przykładowej aplikacji (Django lub Flask) i wybierz pozycję Rozwidlenie.

    Wykonaj kroki, aby sforkować repozytorium na swoim koncie GitHub. Możesz również pobrać repozytorium kodu bezpośrednio na komputer lokalny bez forka ani konta GitHub. Jeśli jednak używasz metody pobierania, nie będzie można skonfigurować ciągłej integracji i ciągłego dostarczania (CI/CD) w następnym samouczku z tej serii.

  2. W wierszu poleceń w konsoli użyj polecenia git clone, aby sklonować fork repozytorium do folderu python-container:

    # Django
    git clone https://github.com/<github-username>/msdocs-python-django-azure-container-apps.git python-container
    
    # Flask
    # git clone https://github.com/<github-username>/msdocs-python-flask-azure-container-apps.git python-container
    
  3. Zmień katalog:

    cd python-container
    

Tworzenie obrazu kontenera na podstawie kodu aplikacji internetowej

Po wykonaniu tych kroków będziesz mieć wystąpienie usługi Azure Container Registry zawierające obraz kontenera platformy Docker skompilowany na podstawie przykładowego kodu.

  1. Zanim przejdziesz dalej, jeśli uruchamiasz polecenia w powłoce Git Bash na komputerze z systemem Windows, wprowadź następujące polecenie:

    #!/bin/bash
    export MSYS_NO_PATHCONV=1
    
  2. Utwórz grupę zasobów za pomocą polecenia az group create.

    #!/bin/bash
    RESOURCE_GROUP_NAME=<resource-group-name>
    LOCATION=<location>
    az group create \
        --name $RESOURCE_GROUP_NAME \
        --location $LOCATION
    
  3. Utwórz rejestr kontenerów przy użyciu polecenia az acr create:

    #!/bin/bash
    REGISTRY_NAME=<registry-name> #The name that you use for *\<registry-name>* must be unique within Azure, and it must contain 5 to 50 alphanumeric characters.
    az acr create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $REGISTRY_NAME \
        --sku Basic \
        --admin-enabled true
    
  4. Zaloguj się do rejestru przy użyciu polecenia az acr login:

    az acr login --name $REGISTRY_NAME
    

    Polecenie dodaje "azurecr.io" do nazwy, aby utworzyć w pełni kwalifikowaną nazwę rejestru. Jeśli logowanie zakończy się pomyślnie, zostanie wyświetlony komunikat "Logowanie powiodło się". Jeśli uzyskujesz dostęp do rejestru z subskrypcji innej niż ta, w której utworzono rejestr, użyj przełącznika --suffix.

    Jeśli logowanie się nie powiedzie, upewnij się, że serwis Docker jest uruchomiony w systemie.

  5. Skompiluj obraz przy użyciu polecenia az acr build:

    #!/bin/bash
    az acr build \
        --registry $REGISTRY_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --image pythoncontainer:latest .
    

    Te zagadnienia mają zastosowanie:

    • Kropka (.) na końcu polecenia wskazuje lokalizację kodu źródłowego do skompilowania. Jeśli nie uruchamiasz tego polecenia w katalogu głównym przykładowej aplikacji, określ ścieżkę do kodu.

    • Jeśli używasz polecenia w usłudze Azure Cloud Shell, użyj git clone, aby najpierw ściągnąć repozytorium do środowiska usługi Cloud Shell. Następnie zmień katalog na katalog główny projektu, aby kropka (.) została prawidłowo zinterpretowana.

    • Jeśli pominiesz -t opcję (taką samą jak --image), polecenie spowoduje kolejkowanie kompilacji kontekstu lokalnego bez wypychania jej do rejestru. Kompilowanie bez wypychania może być przydatne, aby sprawdzić, czy kompilacje obrazu.

  6. Upewnij się, że obraz kontenera został utworzony przy użyciu polecenia az acr repository list:

    az acr repository list --name $REGISTRY_NAME
    

Uwaga

Kroki opisane w tej sekcji umożliwiają utworzenie rejestru kontenerów w warstwie usługi Podstawowa. Ta warstwa jest zoptymalizowana pod kątem kosztów z zestawem funkcji i przepływnością przeznaczoną dla scenariuszy deweloperskich i jest odpowiednia dla wymagań tego samouczka. W scenariuszach produkcyjnych najprawdopodobniej użyjesz warstwy usługi Standardowa lub Premium. Te warstwy zapewniają ulepszone poziomy magazynowania i przepływności.

Aby dowiedzieć się więcej, zobacz poziomy usługi Azure Container Registry. Aby uzyskać informacje o cenach, zobacz cennik usługi Azure Container Registry.

Tworzenie wystąpienia serwera elastycznego PostgreSQL

Przykładowa aplikacja (Django lub Flask) przechowuje dane przeglądu restauracji w bazie danych PostgreSQL. W tych krokach utworzysz serwer, który będzie zawierać bazę danych.

  1. Użyj polecenia az postgres flexible-server create, aby utworzyć serwer PostgreSQL na platformie Azure. Nie jest rzadkością, aby to polecenie było uruchamiane przez kilka minut przed jego zakończeniem.

    #!/bin/bash
    ADMIN_USERNAME=demoadmin
    ADMIN_PASSWORD=<admin-password> # Use a strong password that meets the requirements for PostgreSQL.
    POSTGRES_SERVER_NAME=<postgres-server-name> 
    az postgres flexible-server create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $POSTGRES_SERVER_NAME \
      --location $LOCATION \
      --admin-user $ADMIN_USERNAME \
      --admin-password $ADMIN_PASSWORD \
      --version 16 \
      --tier Burstable \
      --sku-name Standard_B1ms \
      --public-access 0.0.0.0 \
      --microsoft-entra-auth Enabled \
      --storage-size 32 \
      --backup-retention 7 \
      --high-availability Disabled \
      --yes
    
    

    Użyj następujących wartości:

    • <nazwa serwera postgres-server>: nazwa serwera bazy danych PostgreSQL. Ta nazwa musi być unikatowa na całej platformie Azure. Punkt końcowy serwera jest https://<postgres-server-name>.postgres.database.azure.com. Dozwolone znaki to AZ, 0 do 9i łącznika (-).

    • <lokalizacji>: Użyj tej samej lokalizacji, której używałeś dla aplikacji internetowej. <lokalizacji> jest jedną z wartości lokalizacji Azure Name z danych wyjściowych polecenia az account list-locations -o table.

    • < > admin-username : nazwa użytkownika konta administratora. Nie można go azure_superuser, admin, administrator, root, guestani public. W tym samouczku użyj demoadmin.

    • <hasło administratora>: hasło użytkownika administratora. Musi zawierać od 8 do 128 znaków z trzech z następujących kategorii: wielkie litery angielskie, małe litery angielskie, cyfry i znaki inne niż alfanumeryczne.

      Ważne

      Podczas tworzenia nazw użytkowników lub haseł nie używaj znaku dolara ($). Później podczas tworzenia zmiennych środowiskowych przy użyciu tych wartości ten znak ma specjalne znaczenie w kontenerze systemu Linux używanym do uruchamiania aplikacji języka Python.

    • --version: użyj 16. Określa wersję bazy danych PostgreSQL do użycia dla serwera.

    • --tier: użyj Burstable. Określa warstwę cenową serwera. Warstwa Burstable to tańsza opcja dla obciążeń, które nie potrzebują pełnego użycia CPU w sposób ciągły i odpowiada wymaganiom tego samouczka.

    • --sku-name: nazwa warstwy cenowej i konfiguracji obliczeniowej; na przykład Standard_B1ms. Aby uzyskać więcej informacji, zobacz Cennik usługi Azure Database for PostgreSQL. Aby wyświetlić listę dostępnych warstw, użyj az postgres flexible-server list-skus --location <location>.

    • --public-access: użyj 0.0.0.0. Umożliwia ona publiczny dostęp do serwera z dowolnej usługi platformy Azure, takiej jak Container Apps.

    • --microsoft-entra-auth: użyj Enabled. Umożliwia ona uwierzytelnianie Microsoft Entra na serwerze.

    • --storage-size: użyj 32. Określa rozmiar magazynu w gigabajtach (GB) dla serwera. Minimalna wartość to 32 GB.

    • --backup-retention: użyj 7. Określa liczbę dni przechowywania kopii zapasowych serwera. Minimalna wartość to 7 dni.

    • --high-availability: użyj Disabled. Wyłącza wysoką dostępność serwera. Wysoka dostępność nie jest wymagana w tym samouczku.

    • --yes: akceptuje warunki użytkowania serwera PostgreSQL.

    Uwaga

    Jeśli planujesz pracować z serwerem PostgreSQL z lokalnej stacji roboczej za pomocą narzędzi, musisz dodać regułę zapory dla adresu IP swojej stacji roboczej, korzystając z polecenia az postgres flexible-server firewall-rule create.

  2. Użyj polecenia az ad signed-in-user show, aby uzyskać identyfikator obiektu dla swojego konta użytkownika. Użyj tego identyfikatora w następnym poleceniu.

    #!/bin/bash
    CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
    CALLER_DISPLAY_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
    
  3. Użyj polecenia az postgres flexible-server ad-admin create, aby dodać swoje konto użytkownika jako administratora Microsoft Entra na serwerze PostgreSQL.

    #!/bin/bash
    az postgres flexible-server microsoft-entra-admin create \
      --server-name "$POSTGRES_SERVER_NAME" \
      --resource-group "$RESOURCE_GROUP_NAME" \
      --display-name "$CALLER_DISPLAY_NAME" \
      --object-id "$CALLER_OBJECT_ID" \
      --type User
    
    
  4. Użyj polecenia az postgres flexible-server firewall-rule create, aby dodać regułę umożliwiającą aplikacji internetowej dostęp do elastycznego serwera PostgreSQL. W poniższym poleceniu skonfigurujesz zaporę serwera tak, aby akceptowała połączenia ze stacji roboczej deweloperskiej przy użyciu publicznego adresu IP:

    MY_IP=$(curl -s ifconfig.me)
    az postgres flexible-server firewall-rule create \
      --name "$POSTGRES_SERVER_NAME" \
      --resource-group "$RESOURCE_GROUP_NAME" \
      --rule-name allow-my-ip \
      --start-ip-address "$MY_IP" \
      --end-ip-address "$MY_IP"
        ```
    
    

Uwaga

Kroki opisane w tej sekcji umożliwiają utworzenie serwera PostgreSQL z pojedynczym vCore i ograniczoną pamięcią w warstwie cenowej Burstable. Warstwa Burstable to tańsza opcja dla obciążeń, które nie potrzebują pełnego użycia CPU w sposób ciągły i odpowiada wymaganiom tego samouczka. W przypadku obciążeń produkcyjnych można przeprowadzić uaktualnienie do poziomu cenowego Ogólnego przeznaczenia lub Zoptymalizowanego pod kątem pamięci. Te warstwy zapewniają większą wydajność, ale zwiększają koszty.

Aby dowiedzieć się więcej, zobacz Opcje obliczeń w usłudze Azure Database for PostgreSQL — serwer elastyczny. Aby uzyskać informacje o cenach, zobacz cennik usługi Azure Database for PostgreSQL.

Tworzenie bazy danych na serwerze

Na tym etapie masz serwer PostgreSQL. W tej sekcji utworzysz bazę danych na serwerze.

Użyj polecenia az postgres flexible-server db create, aby utworzyć bazę danych nazwaną restaurants_reviews:

#!/bin/bash
DATABASE_NAME=restaurants_reviews
az postgres flexible-server db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $POSTGRES_SERVER_NAME \
    --database-name $DATABASE_NAME

Możesz również użyć polecenia az postgres flexible-server connect , aby nawiązać połączenie z bazą danych, a następnie pracować z poleceniami psql . Podczas pracy z psql często łatwiej jest używać Azure Cloud Shell, ponieważ shell zawiera wszystkie zależności.

Możesz również nawiązać połączenie z elastycznym serwerem usługi Azure Database for PostgreSQL i utworzyć bazę danych przy użyciu psql lub środowiska IDE obsługującego bazę danych PostgreSQL, na przykład Azure Data Studio. Aby uzyskać instrukcje dotyczące używania narzędzia psql, zobacz Configure the managed identity on the PostgreSQL database (Konfigurowanie tożsamości zarządzanej w bazie danych PostgreSQL) w dalszej części tego artykułu.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Utwórz tożsamość zarządzaną przypisaną przez użytkownika do użycia jako tożsamość aplikacji kontenera, gdy jest ona uruchomiona na platformie Azure.

Uwaga

Aby utworzyć zarządzaną tożsamość przypisaną użytkownikowi, twoje konto musi mieć przypisaną rolę współautora tożsamości zarządzanej .

Użyj polecenia az identity create, aby utworzyć zarządzaną tożsamość przypisaną użytkownikowi.

UA_MANAGED_IDENTITY_NAME=<managed-identity-name> # Use a unique name for the managed identity, such as-"my-ua-managed-id".
az identity create \
    --name $UA_MANAGED_IDENTITY_NAME 
    --resource-group $RESOURCE_GROUP_NAME

Konfigurowanie tożsamości zarządzanej w bazie danych PostgreSQL

Skonfiguruj tożsamość zarządzaną jako rolę na serwerze PostgreSQL, a następnie przyznaj jej niezbędne uprawnienia dla bazy danych restaurants_reviews. Niezależnie od tego, czy używasz interfejsu wiersza polecenia Azure, czy narzędzia psql, musisz połączyć się z serwerem Azure PostgreSQL za pomocą użytkownika skonfigurowanego jako administrator Microsoft Entra w instancji serwera. Tylko konta Microsoft Entra skonfigurowane jako administrator postgreSQL mogą konfigurować tożsamości zarządzane i inne role administratora firmy Microsoft na serwerze.

  1. Uzyskaj token dostępu dla konta platformy Azure przy użyciu polecenia az account get-access-token. Token dostępu jest używany w następnych krokach.

    #!/bin/bash
    MY_ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
    echo $MY_ACCESS_TOKEN
    
  2. Dodaj przypisaną przez użytkownika tożsamość zarządzaną jako rolę w bazie danych na serwerze PostgreSQL, korzystając z polecenia az postgres flexible-server execute.

    #!/bin/bash
    az postgres flexible-server execute \
      --name "$POSTGRES_SERVER_NAME" \
      --admin-user "$CALLER_DISPLAY_NAME" \
      --admin-password "$ACCESS_TOKEN" \
      --database-name postgres \
      --querytext "SELECT * FROM pgaadauth_create_principal('$UA_MANAGED_IDENTITY_NAME', false, false);"
    

    Uwaga

    Jeśli używasz polecenia az postgres flexible-server execute na lokalnej stacji roboczej, upewnij się, że dodano regułę zapory dla adresu IP stacji roboczej. Regułę można dodać za pomocą polecenia az postgres flexible-server firewall-rule create. To samo wymaganie istnieje również dla polecenia w następnym kroku.

  3. Udziel tożsamości zarządzanej przypisanej przez użytkownika niezbędne uprawnienia do bazy danych restaurants_reviews przy użyciu następującego polecenia az postgres flexible-server execute:

    #!/bin/bash
    SQL_GRANTS=$(cat <<EOF
    GRANT CONNECT ON DATABASE $DATABASE_NAME TO "$UA_MANAGED_IDENTITY_NAME";
    GRANT USAGE, CREATE ON SCHEMA public TO "$UA_MANAGED_IDENTITY_NAME";
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "$UA_MANAGED_IDENTITY_NAME";
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "$UA_MANAGED_IDENTITY_NAME";
    EOF
    )
    
    az postgres flexible-server execute \
      --name "$POSTGRES_SERVER_NAME" \
      --admin-user "$CALLER_DISPLAY_NAME" \
      --admin-password "$MY_ACCESS_TOKEN" \
      --database-name "$DATABASE_NAME" \
      --querytext "$SQL_GRANTS"
    
    

    To polecenie interfejsu wiersza polecenia platformy Azure nawiązuje połączenie z bazą danych restaurants_reviews na serwerze i uruchamia następujące polecenia SQL:

    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";
    

Wdrażanie aplikacji internetowej w usłudze Container Apps

Aplikacje kontenerów są wdrażane w środowiskach usługi Azure Container Apps , które działają jako bezpieczna granica. W poniższych krokach utworzysz środowisko i kontener wewnątrz środowiska. Następnie skonfigurujesz kontener tak, aby witryna internetowa był widoczna zewnętrznie.

Te kroki wymagają rozszerzenia Azure Container Apps .

  1. Utwórz środowisko usługi Container Apps przy użyciu polecenia az containerapp env create:

    #!/bin/bash
    APP_ENV_NAME=<app-env-name> # Use a unique name for the environment, such as "python-container-env".
    az containerapp env create \
    --name $APP_ENV_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION
    
  2. Pobierz poświadczenia logowania dla wystąpienia usługi Azure Container Registry, używając polecenia az acr credential show.

    #!/bin/bash
    REGISTRY_CREDS=$(az acr credential show -n "$REGISTRY_NAME" --query "[username,passwords[0].value]" -o tsv)
    REGISTRY_USERNAME=$(echo "$REGISTRY_CREDS" | head -n1)
    REGISTRY_PASSWORD=$(echo "$REGISTRY_CREDS" | tail -n1)
    

    Używasz nazwy użytkownika i jednego z haseł zwracanych z danych wyjściowych polecenia podczas tworzenia aplikacji kontenera w kroku 5.

  3. Użyj polecenia az identity show, aby uzyskać identyfikator klienta oraz identyfikator zasobu przypisanej przez użytkownika tożsamości zarządzanej.

    UA_CLIENT_ID=$(az identity show \
        --name "$UA_MANAGED_IDENTITY_NAME" \
        --resource-group "$RESOURCE_GROUP_NAME" \
        --query clientId -o tsv)
    UA_RESOURCE_ID=$(az identity show \
        --name "$UA_MANAGED_IDENTITY_NAME" \
        --resource-group "$RESOURCE_GROUP_NAME" \
        --query id -o tsv)
    

    Wartości identyfikatora klienta (GUID) i identyfikatora zasobu są używane z danych wyjściowych polecenia podczas tworzenia aplikacji kontenera w kroku 5. Identyfikator zasobu ma następującą postać: /subscriptions/<subscription-id>/resourcegroups/pythoncontainer-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-ua-managed-id.

  4. Uruchom następujące polecenie, aby wygenerować wartość klucza tajnego:

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

    Wartość klucza tajnego służy do ustawiania zmiennej środowiskowej podczas tworzenia aplikacji kontenera w kroku 5.

    Uwaga

    Polecenie, które pokazuje ten krok, dotyczy powłoki Bash. W zależności od środowiska może być konieczne wywołanie języka Python przy użyciu python3. W systemie Windows należy ująć polecenie w parametrze -c w podwójny cudzysłów, a nie w pojedynczy cudzysłów. Może być również konieczne wywołanie języka Python przy użyciu py lub py -3, w zależności od środowiska.

  5. Utwórz aplikację kontenerową w środowisku przy użyciu polecenia az containerapp create:

    az containerapp create \
      --name "$CONTAINER_APP_NAME" \
      --resource-group "$RESOURCE_GROUP_NAME" \
      --environment "$APP_ENV_NAME" \
      --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME" \
      --target-port "$TARGET_PORT" \
      --ingress external \
      --registry-server "$REGISTRY_NAME.azurecr.io" \
      --registry-username "$REGISTRY_USERNAME" \
      --registry-password "$REGISTRY_PASSWORD" \
      --user-assigned "$UA_RESOURCE_ID" \
      --env-vars \
          DBHOST="$POSTGRES_SERVER_NAME" \
          DBNAME="$DATABASE_NAME" \
          DBUSER="$UA_MANAGED_IDENTITY_NAME" \
          RUNNING_IN_PRODUCTION=1 \
          AZURE_CLIENT_ID="$UA_CLIENT_ID" \
          AZURE_SECRET_KEY="$AZURE_SECRET_KEY"
    
  6. Tylko w przypadku platformy Django należy przeprowadzić migrację i utworzyć schemat bazy danych. (W przykładowej aplikacji Platformy Flask jest ona wykonywana automatycznie i można pominąć ten krok).

    Nawiąż połączenie przy użyciu polecenia az containerapp exec:

        az containerapp exec \
            --name $CONTAINER_APP_NAME \
            --resource-group $RESOURCE_GROUP_NAME
    

    Następnie w wierszu polecenia powłoki wprowadź python manage.py migrate.

    Nie musisz migrować wersji kontenera.

  7. Przetestuj witrynę internetową.

    Wprowadzone wcześniej polecenie az containerapp create zwraca adres URL aplikacji, którego można użyć do przeglądania aplikacji. Adres URL kończy się na azurecontainerapps.io. Przejdź do adresu URL w przeglądarce. Alternatywnie możesz użyć polecenia az containerapp browse .

Oto przykład przykładowej witryny internetowej po dodaniu restauracji i dwóch recenzji.

Zrzut ekranu przedstawiający przykładową witrynę internetową utworzoną w tym samouczku.

Rozwiązywanie problemów z wdrażaniem

Zapomniałeś adresu URL aplikacji do uzyskania dostępu do witryny internetowej.

W witrynie Azure Portal:

  • Przejdź do strony Przegląd aplikacji kontenera i poszukaj adresu URL aplikacji .

W programie VS Code:

  1. Przejdź do widoku Azure (Ctrl+Shift+A) i rozwiń subskrypcję, nad którą pracujesz.
  2. Rozwiń węzeł Container Apps, rozwiń środowisko zarządzane, kliknij prawym przyciskiem myszy python-container-app, a następnie wybierz pozycję Przeglądaj. Program VS Code otwiera przeglądarkę z adresem URL aplikacji.

W Azure CLI:

  • Użyj polecenia az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn.

W programie VS Code zadanie Kompilowanie obrazu na platformie Azure zwraca błąd

Jeśli zostanie wyświetlony komunikat "Błąd: nie można pobrać kontekstu. Sprawdź, czy "adres URL jest niepoprawny" w oknie danych wyjściowych programu VS Code, a następnie odśwież rejestr w rozszerzeniu Docker. Aby odświeżyć, wybierz rozszerzenie platformy Docker, przejdź do sekcji rejestrów , znajdź rejestr i wybierz go.

Jeśli ponownie uruchomisz zadanie Budowania Obrazu w usłudze Azure, sprawdź, czy rejestrator z poprzedniego uruchomienia istnieje. Jeśli tak, użyj go.

W witrynie Azure Portal podczas tworzenia aplikacji kontenera pojawia się błąd dostępu

Błąd dostępu zawierający komunikat "Nie można uzyskać dostępu do ACR '<nazwa>.azurecr.io'" występuje, gdy poświadczenia administratora w wystąpieniu Azure Container Registry są wyłączone.

Aby sprawdzić stan administratora w portalu, przejdź do wystąpienia usługi Azure Container Registry, wybierz zasób Access keys i upewnij się, że użytkownik administratora jest włączony.

Twój obraz kontenera nie pojawia się w instancji Azure Container Registry

  • Sprawdź wyniki polecenia Azure CLI lub VS Code i poszukaj komunikatów potwierdzających powodzenie.
  • Sprawdź, czy nazwa rejestru została poprawnie określona w poleceniu kompilacji za pomocą interfejsu wiersza polecenia platformy Azure lub w wierszach zadań programu VS Code.
  • Upewnij się, że poświadczenia nie wygasły. Na przykład w programie VS Code znajdź rejestr docelowy w rozszerzeniu platformy Docker i odśwież. W interfejsie wiersza polecenia platformy Azure uruchom polecenie az login.

Witryna internetowa zwraca komunikat "Nieprawidłowe żądanie (400)"

Jeśli zostanie wyświetlony błąd "Nieprawidłowe żądanie (400)", sprawdź zmienne środowiskowe bazy danych PostgreSQL przekazane do kontenera. Błąd 400 często wskazuje, że kod języka Python nie może nawiązać połączenia z wystąpieniem bazy danych PostgreSQL.

Przykładowy kod używany w tym samouczku sprawdza istnienie zmiennej środowiskowej kontenera RUNNING_IN_PRODUCTION, którą można ustawić na dowolną wartość (na przykład 1).

Witryna internetowa zwraca komunikat "Nie znaleziono (404)"

  • Sprawdź wartość adresu URL aplikacji na stronie Przegląd kontenera. Jeśli adres URL aplikacji zawiera słowo "internal", konfiguracja wejścia nie jest poprawnie ustawiona.
  • Sprawdź ruch przychodzący kontenera. Na przykład w portalu Azure przejdź do zasobu Ingress kontenera. Upewnij się, że Ingres HTTP jest włączony, a akceptowanie ruchu z dowolnego miejsca jest zaznaczone.

Strona internetowa nie uruchamia się, pojawia się komunikat "przekroczono limit czasu strumienia" lub nic się nie wyświetla.

  • Sprawdź dzienniki:
    • W portalu Azure przejdź do zasobu zarządzania wersjami aplikacji kontenerowej i sprawdź Stan udostępniania dla kontenera:
      • Jeśli stan to aprowizacja, poczekaj na zakończenie aprowizacji.
      • Jeśli stan to Niepowodzenie, wybierz poprawkę i wyświetl dzienniki konsoli. Wybierz kolejność kolumn, aby wyświetlić Wygenerowany czas, Stream_si Log_s. Posortuj dzienniki od najnowszych i poszukaj komunikatów Python stderr i stdout w kolumnie Stream_s. Dane wyjściowe print języka Python są komunikatami stdout.
    • W interfejsie wiersza polecenia platformy Azure użyj polecenia az containerapp logs show.
  • Jeśli używasz struktury Django, sprawdź, czy tabele restaurants_reviews istnieją w bazie danych. Jeśli nie, użyj konsoli, aby uzyskać dostęp do kontenera i uruchomić polecenie python manage.py migrate.

Następny krok