Delen via


Een Python FastAPI-web-app implementeren met PostgreSQL in Azure

In deze zelfstudie implementeert u een gegevensgestuurde Python-web-app (FastAPI) in Azure-app Service met de relationele Database for PostgreSQL-databaseservice van Azure Database for PostgreSQL. Azure-app Service ondersteunt Python in een Linux-serveromgeving. Als u wilt, raadpleegt u in plaats daarvan de Flask-zelfstudie of de Django-zelfstudie .

Een architectuurdiagram met een App Service met een PostgreSQL-database in Azure.

U hebt het volgende nodig om deze zelfstudie te voltooien:

  • Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
  • Kennis van Python met FastAPI-ontwikkeling
  • Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
  • Azure Developer CLI geïnstalleerd. U kunt de stappen volgen met De Azure Cloud Shell , omdat Azure Developer CLI al is geïnstalleerd.
  • Kennis van Python met FastAPI-ontwikkeling

Naar het einde gaan

Als Azure Developer CLI is geïnstalleerd, kunt u doorgaan naar het einde van de zelfstudie door de volgende opdrachten uit te voeren in een lege werkmap:

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

Voorbeeldtoepassing

Een Python-voorbeeldtoepassing met fastAPI-framework wordt geleverd om u te helpen bij het volgen van deze zelfstudie. Als u het wilt implementeren zonder het lokaal uit te voeren, slaat u dit deel over.

Als u de toepassing lokaal wilt uitvoeren, moet Python 3.8 of hoger zijn geïnstalleerd en PostgreSQL lokaal is geïnstalleerd. Kloon vervolgens de vertakking van starter-no-infra de voorbeeldopslagplaats en ga naar de hoofdmap van de opslagplaats.

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

Maak een .env-bestand zoals hieronder wordt weergegeven met behulp van het .env.sample-bestand als richtlijn. Stel de waarde in van DBNAME de naam van een bestaande database in uw lokale PostgreSQL-exemplaar. Stel de waarden van DBHOST, DBUSERen DBPASS indien van toepassing op uw lokale PostgreSQL-exemplaar in.

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

Maak een virtuele omgeving voor de app:

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

De afhankelijkheden installeren:

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

Installeer de app als een bewerkbaar pakket:

python3 -m pip install -e src

Voer de voorbeeldtoepassing uit met de volgende opdrachten:

# 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. App Service en PostgreSQL maken

In deze stap maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for PostgreSQL. Voor het aanmaakproces geeft u het volgende op:

  • De naam voor de web-app. Dit is de naam die wordt gebruikt als onderdeel van de DNS-naam voor uw web-app in de vorm van https://<app-name>.azurewebsites.net.
  • De regio om de app fysiek in de wereld uit te voeren.
  • De runtimestack voor de app. Hier selecteert u de versie van Python die u voor uw app wilt gebruiken.
  • Het hostingabonnement voor de app. Dit is de prijscategorie die de set functies en schaalcapaciteit voor uw app bevat.
  • De resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).

Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.

Stap 1: In Azure Portal:

  1. Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
  2. Selecteer het item met het label Web App + Database onder de kop Marketplace . U kunt ook rechtstreeks naar de wizard voor het maken navigeren.

Stap 2: Vul op de pagina Web-app en database maken het formulier als volgt in.

  1. Resourcegroep → Nieuwe maken selecteren en een naam van msdocs-python-postgres-tutorial gebruiken.
  2. Regio → Elke Azure-regio bij u in de buurt.
  3. Naammsdocs-python-postgres-XYZ waarbij XYZ uit drie willekeurige tekens bestaat. Deze naam moet uniek zijn binnen Azure.
  4. RuntimestackPython 3.12.
  5. DatabasePostgreSQL - Flexible Server is standaard geselecteerd als de database-engine. De servernaam en databasenaam worden ook standaard ingesteld op de juiste waarden.
  6. HostingabonnementBasic. Wanneer u klaar bent, kunt u later omhoog schalen naar een prijscategorie voor productie.
  7. Selecteer Controleren + maken.
  8. Nadat de validatie is voltooid, selecteert u Maken.

Stap 3: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . U wordt rechtstreeks naar de App Service-app gebracht, maar de volgende resources worden gemaakt:

  • Resourcegroep → De container voor alle gemaakte resources.
  • App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
  • App Service → Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
  • Virtueel netwerk → geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
  • Flexibele Azure Database for PostgreSQL-server → alleen toegankelijk vanuit het virtuele netwerk. Er worden een database en een gebruiker voor u gemaakt op de server.
  • Privé-DNS zone → Dns-omzetting van de PostgreSQL-server in het virtuele netwerk inschakelen.

Stap 4: Voor FastAPI-apps moet u een opstartopdracht invoeren, zodat App Service uw app kan starten. Op de App Service-pagina:

  1. Selecteer Configuratie in het linkermenu onder Instellingen.
  2. Voer op het tabblad Algemene instellingen van de pagina Configuratie het veld Opstartopdracht in onder Stack-instellingen.src/entrypoint.sh
  3. Selecteer Opslaan. Wanneer u hierom wordt gevraagd, selecteert u Doorgaan. Zie Een Linux Python-app configureren voor Azure-app Service voor meer informatie over app-configuratie en opstarten in App Service.

2. Verbindingsinstellingen controleren

De wizard Voor het maken zijn de connectiviteitsvariabelen voor u gegenereerd, al als app-instellingen. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden. Wanneer u klaar bent om uw geheimen te verplaatsen naar een veiligere locatie, vindt u hier een artikel over het opslaan in Azure Key Vault.

Stap 1: Selecteer omgevingsvariabelen in het linkermenu op de pagina App Service.

Stap 2: Controleer of dit AZURE_POSTGRESQL_CONNECTIONSTRING aanwezig is op het tabblad App-instellingen van de pagina Omgevingsvariabelen. De verbindingsreeks wordt als omgevingsvariabele in de runtime-omgeving geïnjecteerd.

3. Voorbeeldcode implementeren

In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard wordt met elke git push gitHub-opslagplaats de build- en implementatieactie gestart.

Stap 1: In een nieuw browservenster:

  1. Meld u aan bij uw GitHub-account.
  2. Navigeer naar https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app.
  3. Selecteer Vorken.
  4. Selecteer Een fork maken.

Stap 2: Open Visual Studio Code op de GitHub-pagina in de browser door op de . toets te drukken.

Stap 3: Open in Visual Studio Code in de browser src/fastapi/models.py in de verkenner. Bekijk de omgevingsvariabelen die worden gebruikt in de productieomgeving, inclusief de app-instellingen die u op de configuratiepagina hebt gezien.

Stap 4: Ga terug naar de pagina App Service en selecteer in het linkermenu onder Implementatie het Implementatiecentrum.

Stap 5: Op de pagina Implementatiecentrum:

  1. Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
  2. Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
  3. Selecteer uw account in Organisatie.
  4. Selecteer in Opslagplaats msdocs-fastapi-postgresql-sample-app.
  5. Selecteer in Vertakking de hoofdmap.
  6. Laat de standaardoptie geselecteerd om een werkstroom toe te voegen.
  7. Selecteer onder Verificatietype de door de gebruiker toegewezen identiteit.
  8. Selecteer Opslaan in het bovenste menu. App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de .github/workflows map.

Stap 6: Op de pagina Implementatiecentrum:

  1. Selecteer Logboeken. Er is al een implementatieuitvoering gestart.
  2. Selecteer build-/deploy-logboeken in het logboekitem voor de implementatieuitvoering.

Stap 7: U gaat naar uw GitHub-opslagplaats en ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Voltooid weergeeft. Het duurt ongeveer 5 minuten.

Ondervindt u problemen? Raadpleeg de gids voor probleemoplossing.

4. Databaseschema genereren

In de vorige sectie hebt u src/entrypoint.sh toegevoegd als de opstartopdracht voor uw app. entrypoint.sh bevat de volgende regel: python3 src/fastapi_app/seed_data.py. Met deze opdracht wordt uw database gemigreerd. In de voorbeeld-app zorgt deze ervoor dat alleen de juiste tabellen in uw database worden gemaakt. Deze tabellen worden niet gevuld met gegevens.

In deze sectie voert u deze opdracht handmatig uit voor demonstratiedoeleinden. Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om de opdracht uit te voeren zich in een SSH-sessie met de App Service-container.

Stap 1: Terug op de App Service-pagina, in het linkermenu,

  1. Selecteer SSH.
  2. Selecteer Zoeken.

Stap 2: Voer python3 src/fastapi_app/seed_data.pyin de SSH-terminal uit. Als dit lukt, maakt App Service verbinding met de database. Alleen wijzigingen in bestanden in /home kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten /home zijn niet behouden.

5. Blader naar de app

Stap 1: Op de App Service-pagina:

  1. Selecteer Overzicht in het linkermenu.
  2. Selecteer de URL van uw app. U kunt ook rechtstreeks naar https://<app-name>.azurewebsites.net.

Stap 2: Voeg een paar restaurants toe aan de lijst. Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for PostgreSQL.

6. Diagnostische logboeken streamen

De voorbeeld-app maakt gebruik van de module logboekregistratie van de Standaardbibliotheek van Python om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeld-app bevat aanroepen naar de logger, zoals wordt weergegeven in de volgende code.

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

Stap 1: Op de App Service-pagina:

  1. Selecteer App Service-logboeken in het linkermenu onder Bewaking.
  2. Selecteer Bestandssysteem onder Toepassingslogboek.
  3. Selecteer Opslaan in het bovenste menu.

Stap 2: Selecteer in het menu links de optie Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.

Het kan enkele minuten duren voordat gebeurtenissen worden weergegeven in de diagnostische logboeken. Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.

7. Resources opschonen

Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.

Stap 1: In de zoekbalk boven aan Azure Portal:

  1. Voer de naam van de resourcegroup in.
  2. Selecteer de resourcegroep.

Stap 2: Selecteer op de pagina Resourcegroep verwijderen.

Stap 3:

  1. Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
  2. Selecteer Verwijderen.

Een schermopname van het bevestigingsvenster voor het verwijderen van een resourcegroep in Azure Portal. :

1. Azure-resources maken en een voorbeeld-app implementeren

In deze stap maakt u de Azure-resources en implementeert u een voorbeeld-app in App Service op Linux. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for PostgreSQL.

  1. Als u dat nog niet hebt gedaan, kloont u de vertakking van starter-no-infra de voorbeeldopslagplaats in een lokale terminal.

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

    Deze gekloonde vertakking is het uitgangspunt. Het bevat een eenvoudige FastAPI-toepassing voor gegevensstations.

  2. Voer vanuit de hoofdmap van de opslagplaats de opdracht uit azd init.

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. Geef de volgende antwoorden wanneer u hierom wordt gevraagd:

    Vraag Antwoord
    De huidige map is niet leeg. Wilt u hier een project initialiseren in '<your-directory>'? Y
    Wat wilt u doen met deze bestanden? Mijn bestaande bestanden ongewijzigd houden
    Voer een nieuwe omgevingsnaam in Typ een unieke naam. De azd-sjabloon gebruikt deze naam als onderdeel van de DNS-naam van uw web-app in Azure (<app-name>.azurewebsites.net). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.
  4. Voer de azd up opdracht uit om de benodigde Azure-resources in te richten en de app-code te implementeren. Als u nog niet bent aangemeld bij Azure, wordt de browser gestart en wordt u gevraagd u aan te melden. Met de azd up opdracht wordt u ook gevraagd om het gewenste abonnement en de gewenste locatie te selecteren waarop u wilt implementeren.

    azd up
    

    Het kan enkele minuten duren voordat de azd up opdracht is voltooid. Uw toepassingscode wordt ook gecompileerd en geïmplementeerd. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure. Wanneer deze is voltooid, wordt met de opdracht ook een koppeling naar de implementatietoepassing weergegeven.

    Deze azd-sjabloon bevat bestanden (azure.yaml en de inframap ) die een standaardarchitectuur met de volgende Azure-resources genereren:

    • Resourcegroep → De container voor alle gemaakte resources.
    • App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de B1-laag opgegeven.
    • App Service → Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
    • Virtueel netwerk → geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
    • Flexibele Azure Database for PostgreSQL-server → alleen toegankelijk vanuit het virtuele netwerk. Er worden een database en een gebruiker voor u gemaakt op de server.
    • Privé-DNS zone → Dns-omzetting van de PostgreSQL-server in het virtuele netwerk inschakelen.
    • Log Analytics-werkruimte → fungeert als de doelcontainer voor uw app voor het verzenden van de logboeken, waar u ook query's kunt uitvoeren op de logboeken.
  5. Wanneer de azd up opdracht is voltooid, noteert u de waarden voor de abonnements-id (Guid), de App Service en de resourcegroep in de uitvoer. U gebruikt deze in de volgende secties. Uw uitvoer ziet er ongeveer uit als de volgende (gedeeltelijke) uitvoer:

    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. De database onderzoeken verbindingsreeks

De azd-sjabloon genereert de connectiviteitsvariabelen voor u als app-instellingen. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden.

  1. Zoek in het infra/resources.bicep bestand de app-instellingen en zoek de instelling voor 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_CONNECTIONSTRINGbevat de verbindingsreeks naar de Postgres-database in Azure. U moet deze in uw code gebruiken om er verbinding mee te maken. U vindt de code die gebruikmaakt van deze omgevingsvariabele in src/fastapi/models.py:

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

3. Bekijk de opstartopdracht

Azure-app Service vereist een opstartopdracht om uw FastAPI-app uit te voeren. Met de azd-sjabloon wordt deze opdracht voor u ingesteld in uw App Service-exemplaar.

  1. Zoek in het infra/resources.bicep bestand de declaratie voor uw website en zoek vervolgens de instelling voor appCommandLine. Dit is de instelling voor de opstartopdracht.

    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. Met de opstartopdracht wordt het bestand src/entrypoint.sh uitgevoerd. Bekijk de code in dat bestand om inzicht te hebben in de opdrachten die App Service uitvoert om uw app te starten:

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

Zie Een Linux Python-app configureren voor Azure-app Service voor meer informatie over app-configuratie en opstarten in App Service.

4. Databaseschema genereren

Mogelijk hebt u in de vorige sectie opgemerkt dat entrypoint.sh de volgende regel bevat: python3 src/fastapi_app/seed_data.py Met deze opdracht wordt uw database gemigreerd. In de voorbeeld-app zorgt deze ervoor dat alleen de juiste tabellen in uw database worden gemaakt. Deze tabellen worden niet gevuld met gegevens.

In deze sectie voert u deze opdracht handmatig uit voor demonstratiedoeleinden. Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om de opdracht uit te voeren zich in een SSH-sessie met de App Service-container.

  1. Gebruik de waarde van de App Service die u eerder hebt genoteerd in de azd-uitvoer en de onderstaande sjabloon om de URL voor de SSH-sessie samen te stellen en ernaar te navigeren in de browser:

    https://<app-name>.scm.azurewebsites.net/webssh/host
    
  2. Voer in de SSH-terminal de opdracht uit python3 src/fastapi_app/seed_data.py. Als dit lukt, maakt App Service verbinding met de database.

    Een schermopname van de opdrachten die moeten worden uitgevoerd in de SSH-shell en de bijbehorende uitvoer (FastAPI).

    Notitie

    Alleen wijzigingen in bestanden in /home kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten /home zijn niet behouden.

5. Blader naar de app

  1. Zoek in de azd-uitvoer de URL van uw app en navigeer ernaar in de browser. De URL ziet er als volgt uit in de AZD-uitvoer:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Voeg enkele restaurants toe aan de lijst.

    Een schermopname van de FastAPI-web-app met PostgreSQL die wordt uitgevoerd in Azure met restaurants en restaurantbeoordelingen (FastAPI).

    Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for PostgreSQL.

6. Diagnostische logboeken streamen

Azure-app Service kan logboeken vastleggen om u te helpen bij het vaststellen van problemen met uw toepassing. Voor het gemak heeft de azd-sjabloon logboekregistratie al ingeschakeld voor het lokale bestandssysteem.

De voorbeeld-app maakt gebruik van de module logboekregistratie van de Standaardbibliotheek van Python om logboeken uit te voeren. De voorbeeld-app bevat aanroepen naar de logger, zoals hieronder wordt weergegeven.

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

Gebruik de waarden van de abonnements-id (GUID), resourcegroep en App Service die u eerder hebt genoteerd in de azd-uitvoer en de onderstaande sjabloon om de URL samen te stellen om App Service-logboeken te streamen en ernaar te navigeren in de browser.

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

Het kan enkele minuten duren voordat gebeurtenissen worden weergegeven in de diagnostische logboeken. Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.

7. Resources opschonen

Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u uit azd down.

azd down

Probleemoplossing

Hieronder vindt u problemen die kunnen optreden tijdens het uitvoeren van deze zelfstudie en stappen om deze op te lossen.

Ik kan geen verbinding maken met de SSH-sessie

Als u geen verbinding kunt maken met de SSH-sessie, kan de app zelf niet worden gestart. Controleer de diagnostische logboeken op details. Als u bijvoorbeeld een fout ziet zoals KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING', kan dit betekenen dat de omgevingsvariabele ontbreekt (mogelijk hebt u de app-instelling verwijderd).

Er treedt een fout op bij het uitvoeren van databasemigraties

Als er fouten optreden met betrekking tot het maken van verbinding met de database, controleert u of de app-instellingen (AZURE_POSTGRESQL_CONNECTIONSTRING) zijn gewijzigd. Zonder dat verbindingsreeks kan de migratieopdracht niet communiceren met de database.

Veelgestelde vragen

Hoeveel kost dit instellen?

De prijzen voor de gemaakte resources zijn als volgt:

  • Het App Service-plan wordt gemaakt in de Basic-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
  • De flexibele PostgreSQL-server wordt gemaakt in de laagste burstable-laag Standard_B1ms, met de minimale opslaggrootte, die omhoog of omlaag kan worden geschaald. Zie de prijzen voor Azure Database for PostgreSQL.
  • Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
  • Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.

Hoe kan ik verbinding maken met de PostgreSQL-server die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?

  • Voor basistoegang vanuit een opdrachtregelprogramma kunt u uitvoeren psql vanuit de SSH-terminal van de app.
  • Als u verbinding wilt maken vanuit een bureaubladhulpprogramma, moet uw machine zich in het virtuele netwerk bevinden. Het kan bijvoorbeeld een Virtuele Azure-machine zijn die is verbonden met een van de subnetten of een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.
  • U kunt Azure Cloud Shell ook integreren met het virtuele netwerk.

Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?

Met behulp van het automatisch gegenereerde werkstroombestand van App Service als voorbeeld wordt een git push nieuwe build- en implementatieuitvoering gestart. Vanuit een lokale kloon van de GitHub-opslagplaats maakt u de gewenste updates en pusht u naar GitHub. Voorbeeld:

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

Volgende stappen

Ga naar de volgende zelfstudie voor meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.

Ontdek hoe App Service een Python-app uitvoert: