Delen via


Implementeer een Python (Flask) webapplicatie met PostgreSQL in Azure.

In deze zelfstudie zet u een data-driven Python-web-app (Flask) uit naar Azure App Service met de Azure Database for PostgreSQL relationele databaseservice. Azure App Service ondersteunt Python in een Linux-serveromgeving. Als u wilt, raadpleegt u in plaats daarvan de Django-zelfstudie of de FastAPI-zelfstudie .

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

In deze handleiding leer je hoe je:

  • Ontwerp een standaard beveiligde App Service, PostgreSQL en Redis-cachearchitectuur.
  • Beveilig verbindingsgeheimen met een beheerde identiteit en Key Vault-referenties.
  • Implementeer een voorbeeld van een Python-applicatie naar App Service vanuit een GitHub-repository.
  • Toegang tot App Service-verbindingstekens en app-instellingen in de applicatiecode.
  • Maak updates en voer de applicatiecode opnieuw uit.
  • Genereer databaseschema door database-migraties uit te voeren.
  • Stream diagnostische logboeken vanuit Azure.
  • Beheer de app in de Azure-portal.
  • Voorzie in dezelfde architectuur en implementeer met behulp van de Azure Developer CLI.
  • Optimaliseer je ontwikkelworkflow met GitHub Codespaces en GitHub Copilot.

Vereiste voorwaarden

  • Een Azure-account met een actieve abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
  • Een GitHub-account. je kunt er ook een gratis krijgen.
  • Kennis van Python met Flask-ontwikkeling.
  • (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Een gratis proefperiode van 30 dagen is beschikbaar.
  • Een Azure-account met een actieve abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
  • Een GitHub-account. je kunt er ook een gratis krijgen.
  • 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 Flask-ontwikkeling.
  • (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Een gratis proefperiode van 30 dagen is beschikbaar.

Ga naar het einde

Als u alleen de voorbeeld-app wilt zien in deze zelfstudie die wordt uitgevoerd in Azure, voert u de volgende opdrachten uit in De Azure Cloud Shell en volgt u de prompt:

mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up

1. Voer het voorbeeld uit

Eerst stel je een voorbeeld van een gegevensgestuurde app op als startpunt. Voor uw gemak bevat de voorbeeldopslagplaats een dev-containerconfiguratie . De ontwikkelcontainer heeft alles wat je nodig hebt om een applicatie te ontwikkelen, inclusief de database, cache en alle omgevingsvariabelen die nodig zijn voor de voorbeeldapplicatie. De dev-container kan worden uitgevoerd in een GitHub-coderuimte, wat betekent dat u het voorbeeld kunt uitvoeren op elke computer met een webbrowser.

Opmerking

Als u deze zelfstudie samen met uw eigen app volgt, bekijkt u de beschrijving van het requirements.txt-bestand in README.md om te zien welke pakketten u nodig hebt.

Stap 1: In een nieuw browservenster:

  1. Log in op uw GitHub-account.
  2. Ga naar https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
  3. Hef de selectie van alleen de hoofdbranch kopiëren op. Je wilt alle vestigingen.
  4. Selecteer Een fork maken.

Stap 2: In de GitHub-fork:

  1. Selecteer main>starter-no-infra voor de startersvertakking. Deze tak bevat alleen het voorbeeldproject en geen Azure-gerelateerde bestanden of configuratie.
  2. Selecteer Code>maak een codespace op starter-no-infra. De codespace heeft een paar minuten nodig om op te starten, en het voert pip install -r requirements.txt uit voor je repository aan het einde.

Stap 3: In de codespace-terminal:

  1. Voer databasemigraties uit met flask db upgrade.
  2. Voer de app uit met flask run.
  3. Wanneer u de melding Your application running on port 5000 is available.ziet, selecteert u Openen in browser. U zou de voorbeeldtoepassing in een nieuw browsertabblad moeten zien. Om de toepassing te stoppen, typ Ctrl+C.

Aanbeveling

U kunt GitHub Copilot vragen over deze opslagplaats. Voorbeeld:

  • @workspace Wat doet dit project?
  • @workspace Wat doet de map .devcontainer?

Heb je problemen? Controleer de sectie Probleemoplossing.

2. Maak App Service en PostgreSQL aan

In deze stap maak je de Azure resources aan. De stappen die in deze tutorial worden gebruikt, creëren een set standaardveilig-resources die App Service en Azure Database voor PostgreSQL omvatten. Voor het creatieproces geeft u aan:

  • De naam voor de web-app. Deze wordt gebruikt als onderdeel van de DNS-naam voor uw app.
  • De regio om de app fysiek in de wereld uit te voeren. Het wordt ook gebruikt als onderdeel van de DNS-naam voor je app.
  • De runtimestack voor de app. Dit is waar je de versie van Python selecteert die je wilt gebruiken voor je app.
  • Het hostingabonnement voor de app. Het is het prijspakket dat de set van functies en schaalcapaciteit voor uw applicatie omvat.
  • De Resource Group voor de app. Een resourcegroep stelt u in staat om alle Azure-bronnen die nodig zijn voor de applicatie in een logische container te groeperen.

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 bovenaan de Azure portal in.
  2. Selecteer het item met het label Web App + Database onder de kop Marketplace . U kunt ook rechtstreeks naar de creatiewizard navigeren.

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

  1. Resourcegroep: Selecteer Nieuw maken en gebruik een naam van msdocs-flask-postgres-tutorial.
  2. Regio: Elke Azure-regio bij u in de buurt.
  3. Naam: msdocs-python-postgres-XYZ.
  4. Runtimestack: Python 3.12.
  5. Database: PostgreSQL - Flexible Server is standaard geselecteerd als de database-engine. De servernaam en de databasenaam worden ook standaard ingesteld op geschikte waarden.
  6. Voeg Azure Cache voor Redis toe?: Nee.
  7. Hostingabonnement: Basis. Wanneer u klaar bent, kunt u opschalen naar een prijscategorie voor productie.
  8. Selecteer Beoordelen en maken.
  9. 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 . Je wordt direct naar de App Service-app geleid, maar de volgende middelen worden gemaakt: Volg deze stappen:

  • 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.
  • Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
  • Azure Database for PostgreSQL flexibele server: Alleen toegankelijk vanuit het virtuele netwerk. Voor jou worden een database en een gebruiker op de server aangemaakt.
  • Privé-DNS-zones: hiermee schakelt u DNS-omzetting van de sleutelkluis en de databaseserver in het virtuele netwerk in.

3. Beveiligingsgeheimen van connecties

De creatiewizard heeft de connectiviteitsvariabelen al voor u gegenereerd als app-instellingen. De beste beveiligingspraktijk is echter om geheimen volledig buiten App Service te houden. U verplaatst uw geheimen naar een sleutelkluis en wijzigt uw app-instelling in Key Vault-verwijzingen met behulp van serviceconnectors.

Stap 1: de bestaande verbindingsreeks ophalen

  1. Selecteer in het linkermenu van de App Service-pagina Instellingen > Omgevingsvariabelen.
  2. Selecteer AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. Zoek in de toepassingsinstelling Toevoegen/bewerken in het veld Waarde het wachtwoord= deel aan het einde van de tekenreeks.
  4. Kopieer de wachtwoordtekenreeks na Password= voor later gebruik. Met deze app-instelling kunt u verbinding maken met de Postgres-database die beveiligd is achter een privé-eindpunt. Het geheim wordt echter rechtstreeks in de App Service-app opgeslagen, wat niet ideaal is. Je zult dit veranderen.

Stap 2: Een sleutelkluis maken voor veilig beheer van geheimen

  1. Typ "Key Vault" in de bovenste zoekbalk, selecteer Marketplace>Key Vault.
  2. Selecteer in resourcegroepmsdocs-python-postgres-tutorial.
  3. Typ in de naam van de sleutelkluis een naam die alleen uit letters en cijfers bestaat.
  4. Stel deze in Regio in op dezelfde locatie als de resourcegroep.

Stap 3: De sleutelkluis beveiligen met een privé-eindpunt

  1. Selecteer het tabblad Netwerken .
  2. Schakel de selectie Openbare toegang inschakelen uit.
  3. Selecteer Een privé-eindpunt maken.
  4. Selecteer in resourcegroepmsdocs-python-postgres-tutorial.
  5. Selecteer in het dialoogvenster in Location dezelfde locatie als uw App Service-app.
  6. Typ msdocs-python-postgres-XYZVaultEndpoint in Naam.
  7. Selecteer in het virtuele netwerkmsdocs-python-postgres-XYZVnet.
  8. In Subnet, msdocs-python-postgres-XYZSubnet.
  9. Klik op OK.
  10. Selecteer Beoordelen en maken en selecteer Vervolgens Maken. Wacht tot de implementatie van de sleutelkluis is voltooid. U zou "Uw implementatie is voltooid" moeten zien.

Stap 4: De PostgreSQL-connector configureren

  1. In de bovenste zoekbalk, typ msdocs-python-postgres en selecteer vervolgens de App Service-resource msdocs-python-postgres-XYZ.
  2. Selecteer in het linkermenu op de pagina App Service, > Service Connector. Er is al een connector, die de app-creatiewizard voor je heeft gemaakt.
  3. Schakel het selectievakje naast de PostgreSQL-connector in en selecteer Bewerken.
  4. Selecteer Django in clienttype. Hoewel u een Flask-app hebt, biedt het Django-clienttype in de PostgreSQL-serviceconnector u databasevariabelen in afzonderlijke instellingen in plaats van één verbindingsreeks. De afzonderlijke variabelen zijn gemakkelijker te gebruiken in uw toepassingscode, die GEBRUIKMAAKT van SQLAlchemy om verbinding te maken met de database.
  5. Selecteer het tabblad Verificatie .
  6. Plak in Wachtwoord het wachtwoord dat u eerder hebt gekopieerd.
  7. Selecteer Geheim opslaan in Key Vault.
  8. Selecteer Nieuwe maken onder Key Vault-verbinding. Er wordt een dialoogvenster Verbinding maken geopend boven aan het bewerkingsdialoogvenster.

Een screenshot die laat zien hoe je een serviceconnector bewerkt met een verbinding naar de sleutelkluis.

Stap 5: De Key Vault-verbinding tot stand brengen

  1. Selecteer in het dialoogvenster Verbinding maken voor de Key Vault-verbinding in Key Vault de sleutelkluis die u eerder hebt gemaakt.
  2. Selecteer Beoordelen en maken.
  3. Wanneer de validatie is voltooid, selecteert u Maken.

Stap 6: De postgreSQL-connectorinstellingen voltooien

  1. U bent terug in het bewerkingsdialoogvenster voor defaultConnector. In het tabblad Verificatie, wacht tot de sleutelkluisconnector is gemaakt. Wanneer het voltooid is, wordt de vervolgkeuzelijst Key Vault Connection automatisch geselecteerd.
  2. Selecteer Volgende: Netwerken.
  3. Selecteer Opslaan. Wacht totdat de melding Update is voltooid wordt weergegeven.

Stap 7: De key vault-integratie controleren

  1. Selecteer opnieuw Instellingen > omgevingsvariabelen in het linkermenu.
  2. Selecteer naast AZURE_POSTGRESQL_PASSWORDde optie Waarde weergeven. De waarde moet zijn @Microsoft.KeyVault(...), wat betekent dat het een sleutelkluisverwijzing is omdat het geheim nu wordt beheerd in de sleutelkluis.

Samenvattend, het proces voor het beveiligen van uw verbindingsgeheimen omvatte:

  • Het ophalen van de verbindingsgeheimen uit de omgevingsvariabelen van de App Service-app.
  • Een sleutelkluis maken.
  • Een Key Vault-verbinding maken met de door het systeem toegewezen beheerde identiteit.
  • Het bijwerken van de service connectors om de geheimen in de sleutelkluizen op te slaan.

Heb je problemen? Controleer de sectie Probleemoplossing.


4. Voorbeeldcode implementeren

In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om naar App Service te deployen, maar ook een uitstekende manier om continue integratie in je implementatieproces te hebben. Standaard geldt dat elke git push naar je GitHub-opslagplaats de bouw- en implementatieactie start.

Stap 1: Selecteer implementatiecentrum in> het linkermenu.

Stap 2: 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 aanwijzingen om Azure toestemming te geven.
  3. Selecteer uw account in Organisatie.
  4. Selecteer in Opslagplaatsmsdocs-flask-postgresql-sample-app.
  5. In Branch, selecteer starter-no-infra. Dit is dezelfde branch waarin je werkte met je voorbeeldapp, zonder enige Azure-gerelateerde bestanden of configuratie.
  6. Selecteer voor verificatietype de door de gebruiker toegewezen identiteit.
  7. Selecteer Opslaan in het bovenste menu. App Service zet een workflowbestand in de gekozen GitHub-repository, in de .github/workflows-directory. Standaard maakt het implementatiecentrum een door de gebruiker toegewezen identiteit voor de werkstroom voor verificatie met behulp van Microsoft Entra (OIDC-verificatie). Zie Implementeren in App Service met behulp van GitHub Actions voor alternatieve verificatieopties.

Stap 3: Voer in de GitHub-coderuimte van uw voorbeeldfork uit git pull origin starter-no-infra. Dit haalt het nieuw gecommitteerde workflowbestand in je codeomgeving.

Stap 4 (optie 1: met GitHub Copilot):

  1. Start een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
  2. Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database?' Copilot kan u wat uitleg geven over SQLAlchemy hoe de verbindings-URI is geconfigureerd in azureproject/development.py en azureproject/production.py.
  3. Vraag het volgende: '@workspace In productiemodus wordt mijn app uitgevoerd in een App Service-web-app, die gebruikmaakt van Azure Service Connector om verbinding te maken met een flexibele PostgreSQL-server met behulp van het Django-clienttype. Wat zijn de namen van de omgevingsvariabelen die ik moet gebruiken?' Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met de code in de optie 2: zonder onderstaande GitHub Copilot-stappen en laat u zelfs weten dat u de wijziging moet aanbrengen in het bestand azureproject/production.py .
  4. Open azureproject/production.py in de verkenner en voeg de codesuggesties toe. GitHub Copilot geeft niet elke keer dezelfde reactie en het is niet altijd correct. Het kan zijn dat je meer vragen moet stellen om zijn reactie te verfijnen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.

Stap 4 (optie 2: zonder GitHub Copilot):

  1. Open Program.cs in de verkenner.
  2. Vind de uitgecommentarieerde code (regels 3-8) en haal de opmerkingen weg. Dit creëert een verbindingsreeks voor SQLAlchemy door gebruik te maken van AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST en AZURE_POSTGRESQL_NAME.

Stap 5:

  1. Selecteer de extensie Broncodebeheer .
  2. In het tekstvak, schrijf een commitboodschap zoals Configure Azure database connection. Of, selecteer en laat GitHub Copilot een commit-bericht voor je genereren.
  3. Selecteer Doorvoeren en bevestig met Ja.
  4. Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.

Een screenshot die de wijzigingen toont die worden vastgelegd en naar GitHub gepusht.

Stap 6: Ga terug naar de pagina Implementatiecentrum in Azure Portal:

  1. Selecteer het tabblad Logboeken en selecteer Vernieuwen om de nieuwe implementatie te zien.
  2. Selecteer in het logboekitem voor de implementatieuitvoering de vermelding Build/Deploy Logs met de meest recente tijdstempel.

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

Heb je problemen? Raadpleeg de gids voor probleemoplossing.

5. Genereer databaseschema

Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om Flask-databasemigraties uit te voeren in een SSH-sessie met de Linux-container in App Service.

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

  1. Selecteer SSH voor ontwikkelhulpprogramma's>.
  2. Selecteer Go.

Stap 2: Voer in de SSH-sessie het volgende uit flask db upgrade. Als het slaagt, maakt App Service met succes verbinding met de database.

Aanbeveling

In de SSH-sessie kunnen alleen wijzigingen aan bestanden in /home bewaard blijven na herstarten van de app. Wijzigingen buiten /home worden niet bewaard.

Heb je problemen? Controleer de sectie Probleemoplossing.

6. Navigeer naar de app

Stap 1: Op de App Service-pagina:

  1. Selecteer Overzicht in het linkermenu.
  2. Selecteer de URL van je app.

Stap 2: Voeg enkele restaurants toe aan de lijst. Gefeliciteerd, je voert een webapplicatie uit in Azure App Service, met een veilige verbinding naar Azure Database voor PostgreSQL.

7. Streaming diagnostische logs

Azure-app Service legt alle consolelogboeken vast om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeldapp bevat print() instructies om deze mogelijkheid te demonstreren zoals hieronder weergegeven.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

Stap 1: Op de App Service-pagina:

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

Stap 2: Kies log stream in het menu links. Je ziet de logs voor je app, inclusief platformlogs en logs vanuit de container.

Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.

8. Ruim middelen op

Wanneer je klaar bent, kun je alle resources uit je Azure-abonnement verwijderen door de resourcegroep te verwijderen.

Stap 1: In de zoekbalk boven aan Azure Portal:

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

Stap 2: Selecteer Resourcegroep verwijderen op de pagina resourcegroep.

Stap 3:

  1. Voer de naam van de resourcegroep in om je verwijdering te bevestigen.
  2. Selecteer Verwijderen.
  3. Bevestig opnieuw met Verwijderen .

2. Maak Azure-resources aan en implementeer een voorbeeldapplicatie

In deze stap maak je de Azure-resources aan en implementeer je een voorbeeld-app naar App Service op Linux. De stappen die in deze tutorial worden gebruikt, creëren een set standaardveilig-resources die App Service en Azure Database voor PostgreSQL omvatten.

De dev-container heeft al de Azure Developer CLI (AZD).

  1. Vanaf de hoofdmap van de repository, run azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. Geef de volgende antwoorden wanneer daarom gevraagd wordt.

    Vraag Antwoord
    De huidige directory is niet leeg. Wil je hier een project initialiseren in '<your-directory>'? Y
    Wat wil je met deze bestanden doen? 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 webapp in Azure (<app-name>-<hash>.azurewebsites.net). Alfanumerieke tekens en streepjes zijn toegestaan.
  3. Meld je aan bij Azure door het azd auth login commando uit te voeren en de aanwijzingen te volgen.

    azd auth login
    
  4. Maak de benodigde Azure-resources aan met het azd provision-commando. Volg de aanwijzing om de gewenste abonnement en locatie voor de Azure-resources te selecteren.

    azd provision
    

    De azd provision-opdracht duurt ongeveer 15 minuten om te voltooien (de Redis-cache neemt de meeste tijd in beslag). Later pas je je code aan om met App Service te werken en voer je de wijzigingen met azd deploy uit. Terwijl het actief is, biedt het commando berichten over het proces van voorziening en implementatie, inclusief een link naar de implementatie in Azure.

    Deze AZD-sjabloon bevat bestanden (azure.yaml en de inframap) die een 'secure-by-default' architectuur 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 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.
    • Privé-eindpunten: Toegang tot eindpunten voor de sleutelkluis en de Redis-cache in het virtuele netwerk.
    • Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
    • Azure Database for PostgreSQL flexibele server: Alleen toegankelijk vanuit het virtuele netwerk. Voor jou worden een database en een gebruiker op de server aangemaakt.
    • Privé-DNS-zone: hiermee schakelt u DNS-omzetting van de PostgreSQL-server in het virtuele netwerk in.
    • 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.
    • Azure Cache voor Redis: alleen toegankelijk vanuit achter het privé-eindpunt.
    • Sleutelkluis: alleen toegankelijk vanaf achter het privé-eindpunt. Gebruikt om geheimen te beheren voor de App Service-app.

    Zodra de opdracht is voltooid met het aanmaken van resources en het eerste keer implementeren van de applicatiecode, werkt de geïmplementeerde voorbeeldapp nog niet omdat u kleine wijzigingen moet aanbrengen om verbinding te maken met de database in Azure.

Heb je problemen? Controleer de sectie Probleemoplossing.

3. Gebruik de verbindingsreeks van de database

De AZD-sjabloon die u gebruikt, heeft de connectiviteitsvariabelen voor u al gegenereerd als app-instellingen en voert deze voor uw gemak uit naar de terminal. App-instellingen zijn een manier om verbindingsgeheimen uit je code-repository te houden.

  1. Zoek in de AZD-uitvoer de instellingen AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORDen AZURE_POSTGRESQL_HOSTAZURE_POSTGRESQL_NAME. Als u geheimen veilig wilt houden, worden alleen de naam van de instelling weergegeven. Ze zien er zo uit in de AZD-output:

     App Service app has the following connection settings:
             - AZURE_POSTGRESQL_NAME
             - AZURE_POSTGRESQL_HOST
             - AZURE_POSTGRESQL_USER
             - AZURE_POSTGRESQL_PASSWORD
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     
  2. Voor uw gemak geeft de AZD-sjabloon de directe link naar de pagina met app-instellingen van de app weer. Zoek de link en open deze in een nieuw browsertabblad.

Heb je problemen? Controleer de sectie Probleemoplossing.

4. Wijzig voorbeeldcode en implementeer opnieuw

  1. Start in de GitHub-coderuimte een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.

  2. Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database?' Copilot kan u wat uitleg geven over SQLAlchemy hoe de verbindings-URI is geconfigureerd in azureproject/development.py en azureproject/production.py.

  3. Vraag het volgende: '@workspace In productiemodus wordt mijn app uitgevoerd in een App Service-web-app, die gebruikmaakt van Azure Service Connector om verbinding te maken met een flexibele PostgreSQL-server met behulp van het Django-clienttype. Wat zijn de namen van de omgevingsvariabelen die ik moet gebruiken?' Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met de code in de optie 2: zonder onderstaande GitHub Copilot-stappen en laat u zelfs weten dat u de wijziging moet aanbrengen in het bestand azureproject/production.py .

  4. Open azureproject/production.py in de verkenner en voeg de codesuggesties toe.

    GitHub Copilot geeft niet elke keer dezelfde reactie en het is niet altijd correct. Het kan zijn dat je meer vragen moet stellen om zijn reactie te verfijnen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.

  5. In de terminal, voer azd deploy uit.

    azd deploy
    

Heb je problemen? Controleer de sectie Probleemoplossing.

5. Genereer databaseschema

Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om Flask-databasemigraties uit te voeren in een SSH-sessie met de Linux-container in App Service.

  1. Zoek in de AZD-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Het ziet er in de output zo uit:

     Open SSH session to App Service container at: <URL>
     
  2. Voer in de SSH-sessie flask db upgrade uit. Als het slaagt, maakt App Service met succes verbinding met de database.

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

    Opmerking

    Alleen wijzigingen in bestanden in /home kunnen blijven bestaan na het opnieuw opstarten van de app. Wijzigingen buiten /home worden niet bewaard.

Heb je problemen? Controleer de sectie Probleemoplossing.

6. Navigeer naar de app

  1. In de AZD-uitvoer, vind de URL van uw app en navigeer ernaartoe in de browser. De URL ziet er in de AZD-uitvoer zo uit:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Voeg een paar restaurants toe aan de lijst.

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

    Gefeliciteerd, je voert een webapplicatie uit in Azure App Service, met een veilige verbinding naar Azure Database voor PostgreSQL.

Heb je problemen? Controleer de sectie Probleemoplossing.

7. Streaming diagnostische logs

Azure App Service kan consolelogs vastleggen om u te helpen problemen met uw applicatie te diagnosticeren. Voor het gemak schakelt de AZD-sjabloon logboekregistratie al in op het lokale bestandssysteem en verzendt de logboeken naar een Log Analytics-werkruimte.

De voorbeeldapplicatie bevat print() verklaringen om deze capaciteit te demonstreren, zoals te zien in het volgende fragment.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

In de AZD-output, zoek de link om App Service-logs te streamen en navigeer ernaartoe in de browser.

Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.

Heb je problemen? Controleer de sectie Probleemoplossing.

8. Ruim middelen op

Om alle Azure-resources in de huidige uitrolomgeving te verwijderen, voert u azd down uit en volgt u de aanwijzingen.

azd down

Probleemoplossingsproces

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 voor details. Bijvoorbeeld, als u een fout ziet zoals KeyError: 'AZURE_POSTGRESQL_HOST', kan dit betekenen dat de omgeving variabele ontbreekt (u heeft misschien de app-instelling verwijderd).

Ik krijg een foutmelding bij het uitvoeren van database-migraties.

Als je fouten tegenkomt die te maken hebben met de verbinding met de database, controleer dan of de app-instellingen (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, en AZURE_POSTGRESQL_NAME) zijn gewijzigd of verwijderd. Zonder die verbindingsreeks kan het migratiecommando niet communiceren met de database.

Veelgestelde vragen

Hoeveel kost deze setup?

De prijsstelling voor de gemaakte hulpbronnen is als volgt:

Hoe verbind ik met de PostgreSQL-server die beveiligd is achter het virtuele netwerk met andere tools?

  • Voor basis toegang via een opdrachtregelhulpmiddel, kunt u psql uitvoeren vanuit de SSH-sessie 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 lokale app-ontwikkeling met GitHub Actions?

Met behulp van het automatisch gegenereerde werkstroombestand van App Service als voorbeeld, wordt met elke git push een nieuwe build- en implementatiestap 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

Hoe kan ik fouten opsporen tijdens de implementatie van GitHub Actions?

Als een stap faalt in het automatisch gegenereerde GitHub-werkstroombestand, probeer dan de mislukte opdracht aan te passen om meer uitgebreidere output te genereren. Bijvoorbeeld, je kunt meer output krijgen van het python-commando door de -d-optie toe te voegen. Plege en duw uw wijzigingen om een nieuwe implementatie naar App Service te activeren.

Ik heb geen toestemming om een gebruikersgebonden identiteit te creëren.

Zie Implementatie van GitHub Actions instellen vanuit het Implementatiecentrum.

Wat kan ik doen met GitHub Copilot in mijn codespace?

U hebt misschien gemerkt dat de GitHub Copilot-chatweergave al voor u klaarstond toen u de codespace maakte. Voor uw gemak nemen we de GitHub Copilot-chatextensie op in de containerdefinitie (zie .devcontainer/devcontainer.json). U hebt echter een GitHub Copilot-account nodig (gratis proefversie van 30 dagen beschikbaar).

Enkele tips voor jou wanneer je met GitHub Copilot spreekt:

  • In een enkele chatsessie bouwen de vragen en antwoorden op elkaar voort, en je kunt je vragen aanpassen om het antwoord dat je krijgt te verfijnen.
  • Standaard heeft GitHub Copilot geen toegang tot bestanden in je repository. Om vragen over een bestand te stellen, open eerst het bestand in de editor.
  • Om GitHub Copilot toegang te geven tot alle bestanden in de repository bij het voorbereiden van zijn antwoorden, begin je vraag met @workspace. Voor meer informatie, zie Use the @workspace agent.
  • In de chatsessie kan GitHub Copilot wijzigingen voorstellen en zelfs aangeven waar deze moeten worden aangebracht (met @workspace), maar het is niet toegestaan de wijzigingen voor jou door te voeren. Het is aan jou om de voorgestelde wijzigingen toe te voegen en het te testen.

Volgende stappen

Ga verder naar de volgende tutorial om te leren hoe je je app kunt beveiligen met een eigen domein en certificaat.

Leer hoe App Service een Python-app uitvoert.