Udostępnij za pośrednictwem


Wdrażanie aplikacji internetowej FastAPI w języku Python za pomocą bazy danych PostgreSQL na platformie Azure

W tym samouczku wdrożysz opartą na danych aplikację internetową języka Python (FastAPI ) do Azure App Service za pomocą usługi relacyjnej bazy danych Azure Database for PostgreSQL. Azure App Service obsługuje język Python w środowisku serwera z systemem Linux. Jeśli chcesz, zobacz zamiast tego samouczek platformy Flask lub samouczek Django.

Diagram architektury przedstawiający usługę App Service z bazą danych PostgreSQL na platformie Azure.

Do ukończenia tego samouczka potrzebne są następujące elementy:

  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
  • Znajomość języka Python przy użyciu programowania za pomocą interfejsu FastAPI
  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
  • Zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure. Możesz wykonać kroki opisane w usłudze Azure Cloud Shell, ponieważ ma już zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure.
  • Znajomość języka Python przy użyciu programowania za pomocą interfejsu FastAPI

Przejdź do końca

Po zainstalowaniu interfejsu wiersza polecenia dla deweloperów platformy Azure możesz przejść do końca samouczka, uruchamiając następujące polecenia w pustym katalogu roboczym:

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

Aplikacja przykładowa

Udostępniono przykładową aplikację w języku Python korzystającą z platformy FastAPI, która pomoże Ci wykonać czynności opisane w tym samouczku. Aby wdrożyć go bez uruchamiania go lokalnie, pomiń tę część.

Aby uruchomić aplikację lokalnie, upewnij się, że masz zainstalowany lokalnie język Python 3.8 lub nowszy i program PostgreSQL . Następnie sklonuj gałąź przykładowego repozytorium starter-no-infra i przejdź do katalogu głównego repozytorium.

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

Utwórz plik env, jak pokazano poniżej, korzystając z pliku .env.sample jako przewodnika. Ustaw wartość DBNAME na nazwę istniejącej bazy danych w lokalnym wystąpieniu bazy danych PostgreSQL. Ustaw wartości DBHOST, DBUSERi DBPASS zgodnie z potrzebami dla lokalnego wystąpienia bazy danych PostgreSQL.

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

Utwórz środowisko wirtualne dla aplikacji:

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

Zainstaluj zależności:

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

Zainstaluj aplikację jako pakiet edytowalny:

python3 -m pip install -e src

Uruchom przykładową aplikację przy użyciu następujących poleceń:

# 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. Tworzenie usług App Service i PostgreSQL

W tym kroku utworzysz zasoby platformy Azure. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL. W przypadku procesu tworzenia należy określić:

  • Nazwa aplikacji internetowej. Jest to nazwa używana jako część nazwy DNS dla aplikacji internetowej.
  • Region do fizycznego uruchamiania aplikacji na świecie.
  • Stos czasu wykonywania dla aplikacji. W tym miejscu wybierasz wersję języka Python, która ma być używana dla aplikacji.
  • Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
  • Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.

Zaloguj się do portalu Azure i wykonaj następujące kroki, aby utworzyć zasoby usługi Azure App Service.

Krok 1. W witrynie Azure Portal:

  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. Wybierz element oznaczony jako Web App + Database pod nagłówkiem Marketplace. Możesz również przejść bezpośrednio do kreatora tworzenia.

Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.

  1. Grupa zasobów → wybierz pozycję Utwórz nową i użyj nazwy msdocs-python-postgres-tutorial.
  2. Region → dowolny region świadczenia usługi Azure w pobliżu.
  3. Nazwamsdocs-python-postgres-XYZ, gdzie XYZ jest dowolnymi trzema losowymi znakami. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
  4. Stos uruchomieniowyPython 3.12.
  5. DatabasePostgreSQL — serwer elastyczny jest domyślnie wybierany jako aparat bazy danych. Nazwa serwera i nazwa bazy danych są również domyślnie ustawione na odpowiednie wartości.
  6. Plan hostinguPodstawowa. Gdy wszystko będzie gotowe, możesz później skalować w górę do warstwy cenowej produkcyjnej.
  7. Wybierz Przejrzyj i utwórz.
  8. Po zakończeniu walidacji wybierz pozycję Utwórz.

Krok 3. Ukończenie wdrożenia trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Jesteś przekierowany bezpośrednio do aplikacji usługi App Service, ale tworzone są następujące zasoby:

  • Grupa zasobów → kontener dla wszystkich utworzonych zasobów.
  • Plan usługi App Service → Definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa.
  • Usługa App Service → reprezentuje aplikację i działa w planie usługi App Service.
  • Sieć wirtualna → zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
  • Serwer elastyczny usługi Azure Database for PostgreSQL → dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Prywatna strefa DNS umożliwia rozwiązywanie nazw DNS serwera PostgreSQL w sieci wirtualnej.

Krok 4. W przypadku aplikacji FastAPI należy wprowadzić polecenie uruchamiania, aby usługa App Service mogła uruchomić aplikację. Na stronie App Service:

  1. W menu po lewej stronie w obszarze Ustawienia wybierz pozycję Konfiguracja.
  2. Na karcie Ustawienia ogólne na stronie Konfiguracja wprowadź src/entrypoint.sh w polu Polecenie uruchamiania w obszarze Ustawienia stosu.
  3. Wybierz pozycję Zapisz. Po wyświetleniu monitu wybierz pozycję Kontynuuj. Aby dowiedzieć się więcej na temat konfiguracji i uruchamiania aplikacji w usłudze App Service, zobacz Konfigurowanie aplikacji Python na Azure App Service w systemie Linux.

2. Sprawdź ustawienia połączenia

Kreator tworzenia już wygenerował zmienne łączności jako ustawienia aplikacji. Ustawienia aplikacji to jeden ze sposobów na trzymanie tajemnic połączenia z dala od repozytorium kodu. Gdy będziesz gotowy do przeniesienia tajemnic do bezpieczniejszej lokalizacji, zapoznaj się z artykułem dotyczącym przechowywania w usłudze Azure Key Vault.

Krok 1. Na stronie usługi App Service w menu po lewej stronie wybierz pozycję Zmienne środowiskowe.

Krok 2. Na karcie Ustawienia aplikacji na stronie Zmienne środowiskowe sprawdź, czy AZURE_POSTGRESQL_CONNECTIONSTRING jest obecny. Parametry połączenia zostaną wprowadzone do środowiska uruchomieniowego jako zmienna środowiskowa.

3. Wdrażanie przykładowego kodu

W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w usłudze App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push do twojego repozytorium GitHub uruchomi akcję kompilacji i wdrażania.

Krok 1. W nowym oknie przeglądarki:

  1. Zaloguj się na istniejącym koncie GitHub.
  2. Przejdź do https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app.
  3. Wybierz pozycję Rozwidlenie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Krok 2. Na stronie GitHub otwórz program Visual Studio Code w przeglądarce, naciskając . .

Krok 3. W programie Visual Studio Code w przeglądarce otwórz plik src/fastapi/models.py w eksploratorze. Zobacz zmienne środowiskowe używane w środowisku produkcyjnym, w tym ustawienia aplikacji widoczne na stronie konfiguracji.

Krok 4. Powrót na stronę usługi App Service w menu po lewej stronie w obszarze Wdrożenie wybierz pozycję Centrum wdrażania.

Krok 5. Na stronie Centrum wdrażania:

  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
  3. W obszarze Organizacja wybierz swoje konto.
  4. W obszarze Repozytorium wybierz pozycję msdocs-fastapi-postgresql-sample-app.
  5. W obszarze Gałąź wybierz pozycję main.
  6. Pozostaw wybraną opcję domyślną, aby dodać przepływ pracy.
  7. W obszarze Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
  8. W górnym menu wybierz pozycję Zapisz. Usługa „App Service” zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w katalogu .github/workflows.

Krok 6. Na stronie Centrum wdrażania:

  1. Wybierz pozycję Dzienniki. Proces wdrożeniowy został już rozpoczęty.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.

Krok 7: Zostajesz przeniesiony do swojego repozytorium GitHub i widzisz, że akcja GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Poczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Ukończono. Trwa to około 5 minut.

Masz problemy? Zapoznaj się z przewodnikiem rozwiązywania problemów.

4. Generowanie schematu bazy danych

W poprzedniej sekcji dodano src/entrypoint.sh jako polecenie uruchamiania aplikacji. entrypoint.sh zawiera następujący wiersz: python3 src/fastapi_app/seed_data.py. To polecenie służy do migracji bazy danych. W przykładowej aplikacji zapewnia tylko, że prawidłowe tabele są tworzone w bazie danych. Te tabele nie są wypełniane żadnymi danymi.

W tej sekcji uruchomisz to polecenie ręcznie w celach demonstracyjnych. W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchomienia polecenia jest sesja SSH z kontenerem usługi App Service.

Krok 1. Powrót na stronę usługi App Service w menu po lewej stronie

  1. Wybierz pozycję SSH.
  2. Wybierz Idź.

Krok 2. W terminalu SSH uruchom polecenie python3 src/fastapi_app/seed_data.py. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych. Tylko zmiany w plikach w /home mogą być trwałe poza ponownymi uruchomieniami aplikacji. Zmiany wykonane poza /home nie są zapisywane.

5. Przejdź do aplikacji

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie wybierz pozycję Przegląd.
  2. Wybierz adres URL aplikacji.

Krok 2. Dodaj kilka restauracji do listy. Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

6. Strumieniowanie dzienników diagnostycznych

Przykładowa aplikacja używa modułu rejestrowania biblioteki standardowej języka Python, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja zawiera wywołania rejestratora, co pokazano w poniższym fragmencie kodu.

@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)
    )

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie w obszarze Monitorowanie wybierz pozycję Dzienniki usługi App Service.
  2. W obszarze Logowanie aplikacji wybierz pozycję System plików.
  3. W górnym menu wybierz pozycję Zapisz.

Krok 2: Z menu po lewej stronie wybierz Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.

Wyświetlenie zdarzeń w dziennikach diagnostycznych może potrwać kilka minut. Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.

7. Czyszczenie zasobów

Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.

Krok 1. Na pasku wyszukiwania w górnej części witryny Azure Portal:

  1. Wpisz nazwę grupy zasobów.
  2. Wybierz odpowiednią grupę zasobów.

Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.

Krok 3:

  1. Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
  2. Wybierz Usuń.

1. Tworzenie zasobów platformy Azure i wdrażanie przykładowej aplikacji

W tym kroku utworzysz zasoby platformy Azure i wdrożysz przykładową aplikację w celu App Service dla systemu Linux. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL.

  1. Jeśli jeszcze tego nie zrobiono, sklonuj gałąź przykładowego repozytorium starter-no-infra w lokalnym terminalu.

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

    Ta sklonowana gałąź jest punktem wyjścia. Zawiera prostą aplikację FastAPI opartą na danych.

  2. W katalogu głównym repozytorium uruchom polecenie azd init.

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. Po wyświetleniu monitu podaj następujące odpowiedzi:

    Pytanie Odpowiedź
    Bieżący katalog nie jest pusty. Czy chcesz zainicjować projekt tutaj w katalogu "<your-directory>"? Y
    Co chcesz zrobić z tymi plikami? Zachowaj istniejące pliki bez zmian
    Wprowadź nową nazwę środowiska Wpisz unikatową nazwę. Szablon azd używa tej nazwy jako części nazwy DNS aplikacji internetowej na platformie Azure (<app-name>.azurewebsites.net). Znaki alfanumeryczne i łączniki są dozwolone.
  4. Uruchom polecenie , azd up aby aprowizować niezbędne zasoby platformy Azure i wdrożyć kod aplikacji. Jeśli jeszcze nie zalogowałeś się na platformie Azure, przeglądarka zostanie uruchomiona i poprosi o zalogowanie się. Polecenie azd up wyświetli również monit o wybranie żądanej subskrypcji i lokalizacji do wdrożenia.

    azd up
    

    Wykonanie azd up polecenia może potrwać kilka minut. Kompiluje również i wdraża kod aplikacji. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure. Po zakończeniu polecenie wyświetli również link do aplikacji wdrażania.

    Ten szablon azd zawiera pliki (azure.yaml i katalog infra ), które generują domyślną architekturę secure-by-default z następującymi zasobami platformy Azure:

    • Grupa zasobów → kontener dla wszystkich utworzonych zasobów.
    • Plan usługi App Service → Definiuje zasoby obliczeniowe dla usługi App Service. Określono plan systemu Linux w warstwie B1 .
    • Usługa App Service → reprezentuje aplikację i działa w planie usługi App Service.
    • Sieć wirtualna → zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
    • Serwer elastyczny usługi Azure Database for PostgreSQL → dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
    • Prywatna strefa DNS umożliwia rozwiązywanie nazw DNS serwera PostgreSQL w sieci wirtualnej.
    • Obszar roboczy usługi Log Analytics → Działa jako kontener docelowy dla aplikacji w celu wysłania dzienników, gdzie można również wykonywać zapytania dotyczące dzienników.
  5. Po zakończeniu azd up polecenia zanotuj wartości ID Subskrypcji (Guid), App Service i Resource Group w wynikach. Są one używane w poniższych sekcjach. Twój wynik będzie wyglądał podobnie do poniższego (częściowego) wyniku:

    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. Sprawdź ciąg połączenia bazy danych

Szablon azd generuje zmienne łączności dla Ciebie jako ustawienia aplikacji. Ustawienia aplikacji to jeden ze sposobów na trzymanie tajemnic połączenia z dala od repozytorium kodu.

  1. infra/resources.bicep W pliku znajdź ustawienia aplikacji i znajdź ustawienie .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_CONNECTIONSTRINGzawiera parametry połączenia do bazy danych Postgres na platformie Azure. Aby nawiązać z nim połączenie, musisz użyć go w kodzie. Kod używający tej zmiennej środowiskowej można znaleźć w pliku 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. Sprawdź polecenie uruchamiania

Usługa Azure App Service wymaga polecenia startowego, aby uruchomić aplikację FastAPI. Szablon azd ustawia to polecenie dla Ciebie w wystąpieniu usługi App Service.

  1. W pliku infra/resources.bicep znajdź deklarację dla swojej witryny sieci Web, a następnie znajdź ustawienie dla appCommandLine. To jest ustawienie polecenia uruchamiania.

    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. Polecenie uruchamiania uruchamia plik src/entrypoint.sh. Zapoznaj się z kodem w tym pliku, aby zrozumieć polecenia uruchamiane przez usługę App Service w celu uruchomienia aplikacji:

    #!/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
    

Aby dowiedzieć się więcej na temat konfiguracji i uruchamiania aplikacji w usłudze App Service, zobacz Konfigurowanie aplikacji Python na Azure App Service w systemie Linux.

4. Generowanie schematu bazy danych

Być może zauważysz w poprzedniej sekcji, że entrypoint.sh zawiera następujący wiersz: python3 src/fastapi_app/seed_data.py. To polecenie służy do migracji bazy danych. W przykładowej aplikacji zapewnia tylko, że prawidłowe tabele są tworzone w bazie danych. Te tabele nie są wypełniane żadnymi danymi.

W tej sekcji uruchomisz to polecenie ręcznie w celach demonstracyjnych. W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchomienia polecenia jest sesja SSH z kontenerem usługi App Service.

  1. Użyj wartości usługi App Service, którą zanotowałeś wcześniej w danych wyjściowych azd, aby skonstruować adres URL sesji SSH i przejść do niej w przeglądarce.

  2. W terminalu SSH uruchom polecenie python3 src/fastapi_app/seed_data.py. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.

    Zrzut ekranu przedstawiający polecenia do uruchomienia w powłoce SSH i ich wyniki (FastAPI).

    Uwaga

    Tylko zmiany w plikach w /home mogą być trwałe poza ponownymi uruchomieniami aplikacji. Zmiany wykonane poza /home nie są zapisywane.

5. Przejdź do aplikacji

  1. W danych wyjściowych azd znajdź adres URL aplikacji i przejdź do niej w przeglądarce. Adres URL wygląda następująco w danych wyjściowych usługi AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Dodaj kilka restauracji do listy.

    Zrzut ekranu aplikacji internetowej FastAPI z bazą danych PostgreSQL działającą na platformie Azure przedstawiający restauracje i recenzje restauracji (FastAPI).

    Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

6. Strumieniowanie dzienników diagnostycznych

usługa aplikacja systemu Azure może przechwytywać dzienniki, aby ułatwić diagnozowanie problemów z aplikacją. Dla wygody szablon azd włączył już rejestrowanie w lokalnym systemie plików.

Przykładowa aplikacja używa modułu rejestrowania biblioteki standardowej języka Python do wyprowadzania dzienników. Przykładowa aplikacja zawiera wywołania rejestratora, jak pokazano poniżej.

@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)
    )

Aby uzyskać dostęp do strumienia dziennika, otwórz aplikację w witrynie Azure Portal. Wybierz opcję Monitorowanie>Strumień logu.

Wyświetlenie zdarzeń w dziennikach diagnostycznych może potrwać kilka minut. Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.

7. Czyszczenie zasobów

Aby usunąć wszystkie zasoby platformy Azure w bieżącym środowisku wdrażania, uruchom polecenie azd down.

azd down

Rozwiązywanie problemów

Poniżej wymieniono problemy, które mogą wystąpić podczas próby wykonania czynności opisanych w tym samouczku i krokach, które należy rozwiązać.

Nie mogę nawiązać połączenia z sesją SSH

Jeśli nie możesz nawiązać połączenia z sesją SSH, uruchomienie samej aplikacji nie powiodło się. Sprawdź dzienniki diagnostyczne, aby uzyskać szczegółowe informacje. Jeśli na przykład zostanie wyświetlony błąd KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'podobny do , może to oznaczać, że brakuje zmiennej środowiskowej (być może usunięto ustawienie aplikacji).

Otrzymuję błąd podczas uruchamiania migracji bazy danych

Jeśli wystąpią jakiekolwiek błędy związane z nawiązywaniem połączenia z bazą danych, sprawdź, czy ustawienia aplikacji (AZURE_POSTGRESQL_CONNECTIONSTRING) zostały zmienione. Bez tego parametry połączenia polecenie migracji nie może komunikować się z bazą danych.

Często zadawane pytania

Ile kosztuje ta konfiguracja?

Cennik utworzonych zasobów jest następujący:

  • Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
  • Serwer elastyczny PostgreSQL jest tworzony w najniższej warstwie z możliwością zwiększania szybkości Standard_B1ms z minimalnym rozmiarem magazynu, który można skalować w górę lub w dół. Zobacz Cennik usługi Azure Database for PostgreSQL.
  • Wirtualna sieć nie powoduje naliczania opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak peering. Zobacz Cennik usługi Azure Virtual Network.
  • Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.

Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić psql z poziomu terminalu SSH aplikacji.
  • Aby nawiązać połączenie z poziomu narzędzia klasycznego, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna platformy Azure połączona z jedną z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
  • Usługę Azure Cloud Shell można również zintegrować z siecią wirtualną.

W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?

Na przykład przy użyciu automatycznie wygenerowanego pliku przepływu pracy z usługi App Service każdy git push rozpoczyna nowy przebieg kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub należy wprowadzić żądane aktualizacje i wypchnąć je do usługi GitHub. Na przykład:

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

Następne kroki

Przejdź do następnego samouczka, aby dowiedzieć się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.

Dowiedz się, jak usługa App Service uruchamia aplikację w języku Python: