Megosztás a következőn keresztül:


Python FastAPI-webalkalmazás üzembe helyezése a PostgreSQL-lel az Azure-ban

Ebben az oktatóanyagban egy adatvezérelt Python-webalkalmazást (FastAPI) helyez üzembe Azure-alkalmazás Szolgáltatásban az Azure Database for PostgreSQL relációsadatbázis-szolgáltatással. Azure-alkalmazás szolgáltatás támogatja Python linuxos kiszolgálói környezetben. Ha szeretné, tekintse meg inkább a Flask-oktatóanyagot vagy a Django-oktatóanyagot .

Architektúradiagram egy App Service-ről egy PostgreSQL-adatbázissal az Azure-ban.

Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:

  • Egy Azure-fiók, aktív előfizetéssel. Ha nem rendelkezik Azure-fiókkal, ingyenesen létrehozhat egyet.
  • A Python ismerete FastAPI-fejlesztéssel
  • Egy Azure-fiók, aktív előfizetéssel. Ha nem rendelkezik Azure-fiókkal, ingyenesen létrehozhat egyet.
  • Az Azure Developer CLI telepítve van. Kövesse az Azure Cloud Shell lépéseit, mert már telepítve van az Azure Developer CLI.
  • A Python ismerete FastAPI-fejlesztéssel

Ugrás a végére

Ha telepítve van az Azure Developer CLI , az oktatóanyag végére ugorhat úgy, hogy az alábbi parancsokat futtatja egy üres munkakönyvtárban:

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

Mintaalkalmazás

A FastAPI-keretrendszert használó Python-mintaalkalmazások segítenek az oktatóanyag követésében. Ha helyi futtatás nélkül szeretné üzembe helyezni, hagyja ki ezt a részt.

Az alkalmazás helyi futtatásához győződjön meg arról, hogy helyileg telepítve van a Python 3.8 vagy újabb verziója, valamint a PostgreSQL . Ezután klónozza a mintaadattár ágát starter-no-infra , és váltson az adattár gyökerére.

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

Hozzon létre egy .env fájlt az alább látható módon az .env.sample fájl használatával útmutatóként. Állítsa be az értéket DBNAME egy meglévő adatbázis nevére a helyi PostgreSQL-példányban. Adja meg a helyi DBHOSTDBUSER PostgreSQL-példány értékeitDBPASS.

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

Hozzon létre egy virtuális környezetet az alkalmazáshoz:

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

Telepítse a függőségeket:

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

Telepítse az alkalmazást szerkeszthető csomagként:

python3 -m pip install -e src

Futtassa a mintaalkalmazást a következő parancsokkal:

# 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. Az App Service és a PostgreSQL létrehozása

Ebben a lépésben hozza létre az Azure-erőforrásokat. Az oktatóanyagban használt lépések az App Service-t és az Azure Database for PostgreSQL-t tartalmazó, alapértelmezés szerint biztonságos erőforrások készletét hozzák létre. A létrehozási folyamathoz a következőket kell megadnia:

  • A webalkalmazás neve . Ez a webalkalmazás https://<app-name>.azurewebsites.netDNS-nevének részeként használt név.
  • A régió , amely fizikailag futtatja az alkalmazást a világon.
  • Az alkalmazás futtatókörnyezeti vereme . Itt választhatja ki az alkalmazáshoz használni kívánt Python-verziót.
  • Az alkalmazás üzemeltetési terve . Ez a tarifacsomag, amely tartalmazza az alkalmazás funkcióit és skálázási kapacitását.
  • Az alkalmazás erőforráscsoportja . Az erőforráscsoportokkal (logikai tárolóban) csoportosíthatja az alkalmazáshoz szükséges Összes Azure-erőforrást.

Jelentkezzen be az Azure Portalra, és kövesse az alábbi lépéseket a Azure-alkalmazás szolgáltatás erőforrásainak létrehozásához.

1. lépés: Az Azure Portalon:

  1. Írja be a "webalkalmazás-adatbázis" kifejezést az Azure Portal tetején található keresősávba.
  2. Válassza ki a Web App + Adatbázis címkével ellátott elemet a Marketplace címsora alatt. A létrehozási varázslót közvetlenül is megnyithatja.

2. lépés: A Webalkalmazás létrehozása + Adatbázis lapon töltse ki az űrlapot az alábbiak szerint.

  1. Erőforráscsoport → Válassza a Új lehetőség létrehozása opciót, és használja az msdocs-python-postgres-tutorial nevet.
  2. Régió → Az Önhöz közeli Bármely Azure-régió.
  3. Adja →msdocs-python-postgres-XYZ nevet, ahol az XYZ tetszőleges három véletlenszerű karakter. Ennek a névnek az Azure-on belül egyedinek kell lennie.
  4. Runtime stackPython 3.12.
  5. DatabasePostgreSQL – A rugalmas kiszolgáló alapértelmezés szerint adatbázismotorként van kiválasztva. A kiszolgáló neve és az adatbázis neve alapértelmezés szerint a megfelelő értékekre is be van állítva.
  6. Üzemeltetési tervAlapszintű. Ha készen áll, később bővítheti az üzemeltetési árkategóriát.
  7. Válassza az Áttekintés + létrehozás lehetőséget.
  8. Az ellenőrzés befejezése után válassza a Létrehozás lehetőséget.

3. lépés: Az üzembe helyezés néhány percet vesz igénybe. Az üzembe helyezés befejeződése után válassza az Erőforrás megnyitása gombot. Közvetlenül az App Service-alkalmazásba kerül, de a következő erőforrások jönnek létre:

  • Az erőforráscsoport az összes létrehozott erőforrás tárolóját →.
  • Az App Service-csomag → Az App Service számítási erőforrásait határozza meg. Létrejön egy Linux-terv a Alap szinten.
  • Az App Service → Az alkalmazást jelöli, és az App Service-csomagban fut.
  • A virtuális hálózat → Integrálva van az App Service alkalmazással, és elkülöníti a háttérbeli hálózati forgalmat.
  • Azure PostgreSQL rugalmas adatbázis-kiszolgáló → Csak a virtuális hálózaton belülről érhető el. A rendszer létrehoz egy adatbázist és egy felhasználót a kiszolgálón.
  • saját DNS zóna → Engedélyezi a PostgreSQL-kiszolgáló DNS-feloldását a virtuális hálózaton.

4. lépés: A FastAPI-alkalmazásokhoz be kell írnia egy indítási parancsot, hogy az App Service elindíthassa az alkalmazást. Az App Service oldalán:

  1. A bal oldali menü Beállítások területén válassza a Konfiguráció lehetőséget.
  2. A Általános beállítások fülön, a Konfiguráció oldalon, adja meg a src/entrypoint.sh értéket az Stack beállításai alatt található Indítási parancs mezőben.
  3. Válassza a Mentés lehetőséget. Amikor a rendszer kéri, válassza a Folytatás lehetőséget. Az appkonfigurációval és az App Service-ben való indítással kapcsolatos további információkért lásd: Linux Python-alkalmazás konfigurálása Azure-alkalmazás Service-hez.

2. Kapcsolati beállítások ellenőrzése

A létrehozási varázsló már alkalmazásbeállításokként létrehozta a kapcsolati változókat. Az alkalmazásbeállítások az egyik módja annak, hogy a kapcsolati titkokat távol tartsuk a kódrepozitóriumodtól. Ha készen áll a titkos kulcsok biztonságosabb helyre való áthelyezésére, az alábbi cikk az Azure Key Vaultban való tárolásról szóló cikket ismerteti.

1. lépés: Az App Service lap bal oldali menüjében válassza a Környezeti változók lehetőséget.

2. lépés: A Környezeti változók lap Alkalmazásbeállítások lapján ellenőrizze, hogy létezik-eAZURE_POSTGRESQL_CONNECTIONSTRING. A kapcsolati sztring környezeti változóként injektáljuk a futtatókörnyezetbe.

3. Mintakód üzembe helyezése

Ebben a lépésben konfigurálja a GitHub üzembe helyezését a GitHub Actions használatával. Ez csak egy az App Service-ben történő üzembe helyezés számos módja közül, de nagyszerű módja annak is, hogy folyamatos integrációt nyújtsunk az üzembe helyezési folyamatba. Alapértelmezés szerint a GitHub-adattár minden git push eleme elindítja a buildelési és üzembe helyezési műveletet.

1. lépés: Új böngészőablakban:

  1. Jelentkezzen be a GitHub-fiókjába.
  2. Navigáljon a https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app.
  3. Válassza a Fork lehetőséget.
  4. Válassza az Elágazás létrehozása lehetőséget.

2. lépés: A GitHub lapon nyissa meg a Visual Studio Code-ot a böngészőben a . kulcs lenyomásával.

3. lépés: Nyissa meg az src/fastapi/models.py böngészőben a Visual Studio Code-ban. Tekintse meg a gyártási környezetben használt környezeti változókat, beleértve a konfigurációs lapon látott alkalmazásbeállításokat is.

4. lépés: Az App Service lap bal oldali menüjében, az Üzembe helyezés csoportban válassza az Üzembe helyezési központ lehetőséget.

5. lépés: Az Üzembehelyezési központ lapon:

  1. A Forrás területen válassza a GitHubot. Alapértelmezés szerint a GitHub Actions van kiválasztva buildszolgáltatóként.
  2. Jelentkezzen be a GitHub-fiókjába, és kövesse az utasításokat az Azure engedélyezéséhez.
  3. A Szervezetben válassza ki a fiókját.
  4. Az Adattárban válassza az msdocs-fastapi-postgresql-sample-app lehetőséget.
  5. Az Ág alatt válassza ki a -t.
  6. Hagyja bejelölve az alapértelmezett beállítást a munkafolyamat hozzáadásához.
  7. A Hitelesítés típusa területen válassza a felhasználó által hozzárendelt identitást.
  8. A felső menüben válassza a Mentés lehetőséget. Az App Service véglegesít egy munkafolyamat-fájlt a kiválasztott GitHub-adattárba a .github/workflows címtárban.

6. lépés: Az Üzembehelyezési központ lapon:

  1. Válassza a Naplókat. Az üzembehelyezési futtatás már elindult.
  2. Az üzembe helyezési futtatás naplóelemében válassza a Build/Deploy Logs lehetőséget.

7. lépés: A GitHub-adattárba kerül, és láthatja, hogy a GitHub-művelet fut. A munkafolyamat-fájl két különálló szakaszt határoz meg, a buildelést és az üzembe helyezést. Várja meg, amíg a GitHub fut, és megjeleníti a Kész állapotot. Körülbelül 5 percig tart.

Problémákat tapasztal? Tekintse meg a hibaelhárítási útmutatót.

4. Adatbázisséma létrehozása

Az előző szakaszban hozzáadta a src/entrypoint.sh fájlt az alkalmazás indítási parancsaként. entrypoint.sh a következő sort tartalmazza: python3 src/fastapi_app/seed_data.py. Ez a parancs migrálja az adatbázist. A mintaalkalmazásban csak a megfelelő táblák létrehozását biztosítja az adatbázisban. Nem tölti fel ezeket a táblákat adatokkal.

Ebben a szakaszban ezt a parancsot manuálisan fogja futtatni bemutató célokra. A virtuális hálózat által védett PostgreSQL-adatbázissal a parancs futtatásának legegyszerűbb módja az App Service-tárolóval folytatott SSH-munkamenet.

1. lépés: Vissza az App Service lap bal oldali menüjébe,

  1. Válassza az SSH-t.
  2. Válassza az Indít elemet.

2. lépés: Futtassa python3 src/fastapi_app/seed_data.pyaz SSH-terminálban. Ha sikeres, az App Service sikeresen csatlakozik az adatbázishoz. Csak a fájlok /home módosításai őrizhetők meg az alkalmazás újraindítása után. A /home-n kívüli módosítások nem maradnak meg.

5. Keressen az alkalmazásra

1. lépés: Az App Service oldalán:

  1. A bal oldali menüben válassza az Áttekintés lehetőséget.
  2. Válassza ki az alkalmazás URL-címét. Közvetlenül navigálhat a https://<app-name>.azurewebsites.net címre is.

2. lépés: Vegyen fel néhány éttermet a listára. Gratulálunk, ön most egy webalkalmazást futtat az Azure App Service-ben, amely biztonságos kapcsolatot biztosít az Azure Database for PostgreSQL-hez.

6. Diagnosztikai naplók streamelése

A mintaalkalmazás a Python Standard Library naplózási moduljával segít diagnosztizálni az alkalmazással kapcsolatos problémákat. A mintaalkalmazás az alábbi kódban látható módon meghívja a naplózót.

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

1. lépés: Az App Service oldalán:

  1. A bal oldali menü Figyelés területén válassza az App Service-naplókat.
  2. Az Alkalmazásnaplózás területen válassza a Fájlrendszer lehetőséget.
  3. A felső menüben válassza a Mentés lehetőséget.

2. lépés: A bal oldali menüben válassza a Naplóstream lehetőséget. Láthatja az alkalmazás naplóit, beleértve a platformnaplókat és a tárolón belüli naplókat.

Az események több percig is eltarthatnak, amíg megjelennek a diagnosztikai naplókban. További információ a Python-alkalmazásokban való naplózásról a Python-alkalmazásHoz készült Azure Monitor beállításáról szóló sorozatban.

7. Erőforrások törlése

Ha végzett, törölheti az összes erőforrást az Azure-előfizetéséből az erőforráscsoport törlésével.

1. lépés: Az Azure Portal tetején található keresősávon:

  1. Adja meg az erőforráscsoport nevét.
  2. Válassza ki az erőforráscsoportot.

2. lépés: Az erőforráscsoport lapján válassza az Erőforráscsoport törlése lehetőséget.

3. lépés:

  1. A törlés megerősítéséhez adja meg az erőforráscsoport nevét.
  2. Válassza a Törlés lehetőséget.

1. Azure-erőforrások létrehozása és mintaalkalmazás üzembe helyezése

Ebben a lépésben létrehozza az Azure-erőforrásokat, és üzembe helyez egy mintaalkalmazást a Linuxon futó App Service-ben. Az oktatóanyagban használt lépések az App Service-t és az Azure Database for PostgreSQL-t tartalmazó, alapértelmezés szerint biztonságos erőforrások készletét hozzák létre.

  1. Ha még nem tette meg, klónozza a mintaadattár ágát starter-no-infra egy helyi terminálban.

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

    Ez a klónozott ág a kiindulópont. Egyszerű adatmeghajtó FastAPI-alkalmazást tartalmaz.

  2. Az adattár gyökerében futtassa a azd init parancsot.

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. Amikor a rendszer kéri, adja meg a következő válaszokat:

    Kérdés Válasz
    Az aktuális könyvtár nem üres. Inicializálni szeretne egy projektet itt a "saját könyvtárában<"?> Y
    Mit szeretne tenni ezekkel a fájlokkal? Meglévő fájljaim változatlanul tartása
    Adjon meg egy új környezetnevet Írjon be egy egyedi nevet. Az azd-sablon ezt a nevet használja a webalkalmazás DNS-nevének részeként az Azure-ban (<app-name>.azurewebsites.net). Alfanumerikus karakterek és kötőjelek engedélyezettek.
  4. Futtassa a azd up parancsot a szükséges Azure-erőforrások kiépítéséhez és az alkalmazáskód üzembe helyezéséhez. Ha még nem jelentkezett be az Azure-ba, a böngésző elindul, és megkéri, hogy jelentkezzen be. A azd up parancs arra is kéri, hogy válassza ki a kívánt előfizetést és helyet, ahová üzembe szeretne helyezni.

    azd up
    

    A azd up parancs végrehajtása több percet is igénybe vehet. Emellett lefordítja és üzembe helyezi az alkalmazáskódot. Amíg fut, a parancs üzeneteket küld a kiépítési és üzembe helyezési folyamatról, beleértve az Azure-beli üzembe helyezésre mutató hivatkozást is. Amikor befejeződik, a parancs egy hivatkozást is megjelenít az üzembe helyezési alkalmazásra.

    Ez az azd-sablon olyan fájlokat (azure.yaml és infra könyvtár) tartalmaz, amelyek az alábbi Azure-erőforrásokkal létrehoznak egy alapértelmezett, biztonságos architektúrát:

    • Az erőforráscsoport az összes létrehozott erőforrás tárolóját →.
    • Az App Service-csomag → Az App Service számítási erőforrásait határozza meg. A B1 szinten egy Linux csomag van megadva.
    • Az App Service → Az alkalmazást jelöli, és az App Service-csomagban fut.
    • A virtuális hálózat → Integrálva van az App Service alkalmazással, és elkülöníti a háttérbeli hálózati forgalmat.
    • Azure Database for PostgreSQL rugalmas kiszolgáló → Csak a virtuális hálózaton belülről érhető el. A rendszer létrehoz egy adatbázist és egy felhasználót a kiszolgálón.
    • saját DNS zóna → Engedélyezi a PostgreSQL-kiszolgáló DNS-feloldását a virtuális hálózaton.
    • A Log Analytics-munkaterület → Az alkalmazás céltárolójaként szolgál a naplók elküldéséhez, ahol a naplókat is lekérdezheti.
  5. Amikor a azd up parancs befejeződik, jegyezze fel az előfizetés azonosítójának (Guid) értékeit, az App Service-t és az erőforráscsoportot a kimenetben. Ezeket a következő szakaszokban használhatja. A kimenet a következő (részleges) kimenethez hasonlóan fog kinézni:

    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. Ellenőrizze az adatbázis kapcsolati karaktersorát

Az azd sablon alkalmazásbeállításokként generálja a kapcsolati változókat. Az alkalmazásbeállítások egy módja annak, hogy a kapcsolati titkok ne szerepeljenek a kódtárban.

  1. A infra/resources.bicep fájlban keresse meg az alkalmazás beállításait, majd a AZURE_POSTGRESQL_CONNECTIONSTRING beállítását.

    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_CONNECTIONSTRINGtartalmazza az Azure Postgres-adatbázis kapcsolati sztring. Fel kell használnia a programkódjában, hogy kapcsolatot létesítsen vele. A környezeti változót használó kódot az src/fastapi/models.py találhatja meg:

    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. Az indítási parancs vizsgálata

Azure-alkalmazás Szolgáltatáshoz indítási parancs szükséges a FastAPI-alkalmazás futtatásához. Az azd-sablon beállítja önnek ezt a parancsot az App Service-példányban.

  1. A fájlban infra/resources.bicep keresse meg a webhely deklarációját, majd keresse meg a beállítást appCommandLine. Ez az indítási parancs beállítása.

    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. Az indítási parancs futtatja az src/entrypoint.sh fájlt. Vizsgálja meg a fájlban lévő kódot, és ismerje meg az App Service által az alkalmazás indításához futtatott parancsokat:

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

Az appkonfigurációval és az App Service-ben való indítással kapcsolatos további információkért lásd: Linux Python-alkalmazás konfigurálása Azure-alkalmazás Service-hez.

4. Adatbázisséma létrehozása

Előfordulhat, hogy az előző szakaszban észrevette, hogy entrypoint.sh a következő sort tartalmazza: python3 src/fastapi_app/seed_data.py. Ez a parancs migrálja az adatbázist. A mintaalkalmazásban csak a megfelelő táblák létrehozását biztosítja az adatbázisban. Nem tölti fel ezeket a táblákat adatokkal.

Ebben a szakaszban ezt a parancsot manuálisan fogja futtatni bemutató célokra. A virtuális hálózat által védett PostgreSQL-adatbázissal a parancs futtatásának legegyszerűbb módja az App Service-tárolóval folytatott SSH-munkamenet.

  1. Használja az App Service értékét, amelyet korábban az azd kimenetben és az alább látható sablonban észlelt, az SSH-munkamenet URL-címének létrehozásához és a böngészőben való navigáláshoz:

    https://<app-name>.scm.azurewebsites.net/webssh/host
    
  2. Az SSH-terminálban futtassa a következőt python3 src/fastapi_app/seed_data.py: . Ha sikeres, az App Service sikeresen csatlakozik az adatbázishoz.

    Képernyőkép az SSH-rendszerhéjban futtatandó parancsokról és azok kimenetéről (FastAPI).

    Feljegyzés

    Csak a fájlok /home módosításai őrizhetők meg az alkalmazás újraindítása után. A /home-n kívüli változások nincsenek elmentve.

5. Nyissa meg az alkalmazást

  1. Az azd kimenetben keresse meg az alkalmazás URL-címét, és keresse meg a böngészőben. Az URL-cím így néz ki az AZD-kimenetben:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Vegyen fel néhány éttermet a listára.

    Képernyőkép a FastAPI webalkalmazásról az Azure-ban futó PostgreSQL-sel, amely éttermeket és éttermi véleményeket (FastAPI) jelenít meg.

    Gratulálunk, az Azure App Service-ben futtat egy webalkalmazást, biztonságos kapcsolattal az Azure Database for PostgreSQL-hez.

6. Diagnosztikai naplók streamelése

Azure-alkalmazás szolgáltatás naplókat rögzíthet az alkalmazással kapcsolatos problémák diagnosztizálásához. A kényelem érdekében az azd sablon már engedélyezte a helyi fájlrendszerbe való naplózást.

A mintaalkalmazás a Python standard kódtár naplózási modulját használja a naplók kimenetéhez. A mintaalkalmazás az alább látható módon meghívja a naplózót.

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

Az előzőleg az azd kimenetben és az alább látható sablonban feljegyzett Előfizetés-azonosító (GUID), Erőforráscsoport és App Service értékeivel hozza létre az App Service naplók streameléséhez és a böngészőben való navigáláshoz használt URL-címet.

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

Az események több percig is eltarthatnak, amíg megjelennek a diagnosztikai naplókban. További információ a Python-alkalmazásokban való naplózásról a Python-alkalmazáshoz készült Azure Monitor beállításáról szóló sorozatból.

7. Erőforrások törlése

Az aktuális üzemi környezetben lévő összes Azure-erőforrás törléséhez futtassa a következőt azd down:

azd down

Hibaelhárítás

Az alábbiakban azokat a problémákat soroljuk fel, amelyekkel az oktatóanyag és a megoldásuk lépései során találkozhat.

Nem tudok csatlakozni az SSH-munkamenethez

Ha nem tud csatlakozni az SSH-munkamenethez, akkor maga az alkalmazás nem indult el. Részletekért tekintse meg a diagnosztikai naplókat . Ha például egy hasonló KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'hibaüzenet jelenik meg, az azt jelentheti, hogy a környezeti változó hiányzik (lehet, hogy eltávolította az alkalmazásbeállítást).

Hibaüzenet jelenik meg az adatbázis-migrálások futtatásakor

Ha bármilyen, az adatbázishoz való csatlakozással kapcsolatos hibát tapasztal, ellenőrizze, hogy módosultak-e az alkalmazás beállításai (AZURE_POSTGRESQL_CONNECTIONSTRING). A kapcsolati sztring nélkül a migrálási parancs nem tud kommunikálni az adatbázissal.

Gyakori kérdések

Mennyibe kerül ez a beállítás?

A létrehozott erőforrások díjszabása a következő:

Hogyan csatlakozni a virtuális hálózat mögött más eszközökkel védett PostgreSQL-kiszolgálóhoz?

  • A parancssori eszközről való alapszintű hozzáféréshez az alkalmazás SSH-termináljáról is futtatható psql .
  • Asztali eszközről való csatlakozáshoz a gépnek a virtuális hálózaton belül kell lennie. Ez lehet például egy Azure-beli virtuális gép, amely az egyik alhálózathoz csatlakozik, vagy egy helyszíni hálózat egy olyan gépe, amely helyek közötti VPN-kapcsolattal rendelkezik az Azure-beli virtuális hálózattal.
  • Az Azure Cloud Shellt a virtuális hálózattal is integrálhatja.

Hogyan működik a helyi alkalmazásfejlesztés a GitHub Actions használatával?

Ha például az App Service automatikus munkafolyamat-fájlját használja, mindegyik git push elindít egy új buildet és üzembe helyezést. A GitHub-adattár helyi klónjából elvégezheti a kívánt frissítéseket, és leküldheti a GitHubra. Példa:

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

Következő lépések

Folytassa a következő oktatóanyaggal, amelyből megtudhatja, hogyan védheti meg az alkalmazást egyéni tartománnyal és tanúsítvánnyal.

Megtudhatja, hogyan futtatja az App Service a Python-alkalmazásokat: