Een Python-web-app (Flask) implementeren met PostgreSQL in Azure
In deze zelfstudie implementeert u een gegevensgestuurde Python-web-app (Flask) 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 Django-zelfstudie of de FastAPI-zelfstudie .
In deze zelfstudie leert u het volgende:
- Maak standaard een beveiligde App Service-, PostgreSQL- en Redis-cachearchitectuur.
- Beveilig verbindingsgeheimen met behulp van een beheerde identiteit en Key Vault-verwijzingen.
- Implementeer een Python-voorbeeld-app in App Service vanuit een GitHub-opslagplaats.
- Toegang tot App Service-verbindingsreeks s en app-instellingen in de toepassingscode.
- Breng updates aan en implementeer de toepassingscode opnieuw.
- Genereer een databaseschema door databasemigraties uit te voeren.
- Stream diagnostische logboeken vanuit Azure.
- De app beheren in Azure Portal.
- Richt dezelfde architectuur in en implementeer met behulp van Azure Developer CLI.
- Optimaliseer uw ontwikkelwerkstroom met GitHub Codespaces en GitHub Copilot.
Vereisten
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Een GitHub-account. je kunt er ook gratis een krijgen.
- Kennis van Python met Flask-ontwikkeling.
- (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.
- 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 Flask-ontwikkeling.
- (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.
Naar het einde gaan
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 stelt u een voorbeeld van een gegevensgestuurde app in als uitgangspunt. Voor uw gemak bevat de voorbeeldopslagplaats een dev-containerconfiguratie . De dev-container heeft alles wat u nodig hebt om een toepassing te ontwikkelen, met inbegrip van de database, cache en alle omgevingsvariabelen die nodig zijn voor de voorbeeldtoepassing. De dev-container kan worden uitgevoerd in een GitHub-coderuimte, wat betekent dat u het voorbeeld kunt uitvoeren op elke computer met een webbrowser.
Notitie
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:
- Meld u aan bij uw GitHub-account.
- Navigeer naar https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
- Hef de selectie alleen het kopiëren van de hoofdbranch op. U wilt alle vertakkingen.
- Selecteer Een fork maken.
Stap 2: In de GitHub-fork:
- Selecteer de hoofdstarter-no-infra> voor de startersvertakking. Deze vertakking bevat alleen het voorbeeldproject en geen Azure-gerelateerde bestanden of configuratie.
- Selecteer Code>create codespace on starter-no-infra.
Het duurt enkele minuten voordat de codespace is ingesteld en deze wordt uitgevoerd
pip install -r requirements.txt
voor uw opslagplaats aan het einde.
Stap 3: In de codespace-terminal:
- Databasemigraties uitvoeren met
flask db upgrade
. - Voer de app uit met
flask run
. - Wanneer u de melding
Your application running on port 5000 is available.
ziet, selecteert u Openen in browser. U ziet de voorbeeldtoepassing in een nieuw browsertabblad. Als u de toepassing wilt stoppen, typtCtrl
+C
u .
Tip
U kunt GitHub Copilot vragen over deze opslagplaats. Voorbeeld:
- @workspace Wat doet dit project?
- @workspace Wat doet de map .devcontainer?
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
2. 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. Deze wordt gebruikt als onderdeel van de DNS-naam voor uw app in de vorm van
https://<app-name>-<hash>.<region>.azurewebsites.net
. - De regio om de app fysiek in de wereld uit te voeren. Deze wordt ook gebruikt als onderdeel van de DNS-naam voor uw app.
- 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:
- Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
- 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.
- Resourcegroep: Selecteer Nieuwe maken en gebruik een naam van msdocs-flask-postgres-tutorial.
- Regio: Elke Azure-regio bij u in de buurt.
- Naam: msdocs-python-postgres-XYZ.
- Runtimestack: Python 3.12.
- Database: PostgreSQL - Flexible Server is standaard geselecteerd als de database-engine. De servernaam en databasenaam worden ook standaard ingesteld op de juiste waarden.
- Voeg Azure Cache voor Redis toe?: Nee.
- Hostingabonnement: Basic. Wanneer u klaar bent, kunt u omhoog schalen naar een prijscategorie voor productie.
- Selecteer Controleren + maken.
- 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.
- Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
- 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 zones: hiermee schakelt u DNS-omzetting van de sleutelkluis en de databaseserver in het virtuele netwerk in.
3. Beveiligde verbindingsgeheimen
De wizard Voor het maken zijn de connectiviteitsvariabelen voor u gegenereerd, al als app-instellingen. De aanbevolen beveiligingsprocedures zijn 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
- Selecteer > in het linkermenu van de App Service-pagina instellingen omgevingsvariabelen.
- Selecteer AZURE_POSTGRESQL_CONNECTIONSTRING.
- Zoek in de toepassingsinstelling Toevoegen/bewerken in het veld Waarde het wachtwoord= deel aan het einde van de tekenreeks.
- Kopieer de wachtwoordtekenreeks na Password= voor later gebruik. Met deze app-instelling kunt u verbinding maken met de Postgres-database die wordt beveiligd achter een privé-eindpunt. Het geheim wordt echter rechtstreeks opgeslagen in de App Service-app, wat niet het beste is. U wijzigt dit.
Stap 2: Een sleutelkluis maken voor veilig beheer van geheimen
- Typ 'sleutelkluis' in de bovenste zoekbalk en selecteer vervolgens Marketplace>Key Vault.
- Selecteer in resourcegroep msdocs-python-postgres-tutorial.
- Typ in de naam van de sleutelkluis een naam die alleen uit letters en cijfers bestaat.
- Stel deze in Regio in op dezelfde locatie als de resourcegroep.
Stap 3: De sleutelkluis beveiligen met een privé-eindpunt
- Selecteer het tabblad Netwerken.
- Schakel de selectie Openbare toegang inschakelen uit.
- Selecteer Een privé-eindpunt maken.
- Selecteer in resourcegroep msdocs-python-postgres-tutorial.
- Selecteer in het dialoogvenster in Location dezelfde locatie als uw App Service-app.
- Typ in Naam msdocs-python-postgres-XYZVaultEndpoint.
- Selecteer in het virtuele netwerk msdocs-python-postgres-XYZVnet.
- In Subnet, msdocs-python-postgres-XYZSubnet.
- Selecteer OK.
- Selecteer Controleren en maken en selecteer vervolgens Maken. Wacht tot de implementatie van de sleutelkluis is voltooid. U ziet nu 'Uw implementatie is voltooid'.
Stap 4: De PostgreSQL-connector configureren
- Typ msdocs-python-postgres in de bovenste zoekbalk en selecteer vervolgens de App Service-resource msdocs-python-postgres-XYZ.
- Selecteer instellingenserviceconnector >in het linkermenu op de pagina App Service. Er is al een connector, die door de wizard voor het maken van apps voor u is gemaakt.
- Schakel het selectievakje naast de PostgreSQL-connector in en selecteer Bewerken.
- 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.
- Selecteer het tabblad Verificatie.
- Plak in Wachtwoord het wachtwoord dat u eerder hebt gekopieerd.
- Selecteer Geheim opslaan in Key Vault.
- Selecteer Nieuwe maken onder Key Vault-verbinding. Er wordt een dialoogvenster Verbinding maken geopend boven aan het bewerkingsdialoogvenster.
Stap 5: De Key Vault-verbinding tot stand brengen
- Selecteer in het dialoogvenster Verbinding maken voor de Key Vault-verbinding in Key Vault de sleutelkluis die u eerder hebt gemaakt.
- Selecteer Controleren + maken.
- Wanneer de validatie is voltooid, selecteert u Maken.
Stap 6: De postgreSQL-connectorinstellingen voltooien
- U bent terug in het bewerkingsdialoogvenster voor defaultConnector. Wacht op het tabblad Verificatie totdat de sleutelkluisconnector is gemaakt. Wanneer de sleutelkluis is voltooid, wordt deze automatisch geselecteerd in de vervolgkeuzelijst Key Vault-verbinding .
- Selecteer Volgende: Netwerken.
- Selecteer Opslaan. Wacht totdat de melding Update is voltooid wordt weergegeven.
Stap 7: De key vault-integratie controleren
- Selecteer opnieuw Instellingen > omgevingsvariabelen in het linkermenu.
-
Selecteer naast AZURE_POSTGRESQL_PASSWORD de 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.
Samengevat: het proces voor het beveiligen van uw verbindingsgeheimen:
- De verbindingsgeheimen ophalen uit de omgevingsvariabelen van de App Service-app.
- Een sleutelkluis maken.
- Een Key Vault-verbinding maken met de door het systeem toegewezen beheerde identiteit.
- De serviceconnectors bijwerken om de geheimen op te slaan in de sleutelkluis.
Ondervindt u 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 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: Selecteer implementatiecentrum in>het linkermenu.
Stap 2: Op de pagina Implementatiecentrum:
- Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
- Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
- Selecteer uw account in Organisatie.
- Selecteer in Opslagplaats msdocs-flask-postgresql-sample-app.
- Selecteer in Branch starter-no-infra. Dit is dezelfde vertakking waarin u met uw voorbeeld-app hebt gewerkt, zonder azure-gerelateerde bestanden of configuraties.
- Selecteer voor verificatietype de door de gebruiker toegewezen identiteit.
- Selecteer Opslaan in het bovenste menu.
App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de
.github/workflows
map. 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: Terug in de GitHub-coderuimte van uw voorbeeldfork, voert u uit git pull origin starter-no-infra
.
Hiermee haalt u het zojuist vastgelegde werkstroombestand op in uw codespace.
Stap 4 (optie 1: met GitHub Copilot):
- Start een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
- 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. - 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 kan u mogelijk een codesuggesties geven die vergelijkbaar is met die in de optie 2: zonder onderstaande GitHub Copilot-stappen en u zelfs laten weten dat u de wijziging moet aanbrengen in het bestand azureproject/production.py .
- Open azureproject/production.py in de verkenner en voeg de codesuggesties toe. GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.
Stap 4 (optie 2: zonder GitHub Copilot):
- Open Program.cs in de verkenner.
- Zoek de commentaarcode (regels 3-8) en verwijder de opmerkingen.
Hiermee maakt u een verbindingsreeks voor SQLAlchemy met behulp van
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
enAZURE_POSTGRESQL_HOST
AZURE_POSTGRESQL_NAME
.
Stap 5:
- Selecteer de extensie Broncodebeheer .
- Typ in het tekstvak een doorvoeringsbericht zoals
Configure Azure database connecton
. Of selecteer en laat GitHub Copilot een doorvoerbericht voor u genereren. - Selecteer Doorvoeren en bevestig met Ja.
- Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.
Stap 6: Terug op de pagina Implementatiecentrum in Azure Portal:
- Selecteer het tabblad Logboeken en selecteer Vervolgens Vernieuwen om de nieuwe implementatieuitvoering te zien.
- Selecteer in het logboekitem voor de implementatieuitvoering de vermelding Build/Deploy Logs met de meest recente tijdstempel.
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 Geslaagd weergeeft. Het duurt ongeveer 5 minuten.
Ondervindt u problemen? Raadpleeg de gids voor probleemoplossing.
5. Databaseschema genereren
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 op de App Service-pagina, in het linkermenu,
- Selecteer SSH voor ontwikkelhulpprogramma's>.
- Selecteer Zoeken.
Stap 2: Voer flask db upgrade
in de SSH-sessie uit. Als dit lukt, maakt App Service verbinding met de database.
Tip
In de SSH-sessie kunnen alleen wijzigingen in bestanden blijven /home
bestaan na het opnieuw opstarten van de app. Wijzigingen buiten /home
zijn niet behouden.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
6. Blader naar de app
Stap 1: Op de App Service-pagina:
- Selecteer Overzicht in het linkermenu.
- Selecteer de URL van uw app.
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.
7. Diagnostische logboeken streamen
Azure-app Service legt alle consolelogboeken vast om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeld-app bevat print()
instructies om deze mogelijkheid te demonstreren, zoals hieronder wordt 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:
- Selecteer in het linkermenu App Service-logboeken bewaken>.
- Selecteer Bestandssysteem onder Toepassingslogboek.
- 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.
Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.
8. 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:
- Voer de naam van de resourcegroup in.
- Selecteer de resourcegroep.
Stap 2: Selecteer op de pagina Resourcegroep verwijderen.
Stap 3:
- Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
- Selecteer Verwijderen.
2. 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.
De dev-container heeft al de Azure Developer CLI (AZD).
Voer vanuit de hoofdmap van de opslagplaats de opdracht uit
azd init
.azd init --template python-app-service-postgresql-infra
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>-<hash>.azurewebsites.net
). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.Meld u aan bij Azure door de
azd auth login
opdracht uit te voeren en de prompt te volgen:azd auth login
Maak de benodigde Azure-resources met de
azd provision
opdracht. Volg de prompt om het gewenste abonnement en de gewenste locatie voor de Azure-resources te selecteren.azd provision
Het duurt ongeveer 15 minuten voordat de
azd provision
opdracht is voltooid (de Redis-cache duurt het de meeste tijd). Later wijzigt u uw code om te werken met App Service en implementeert u de wijzigingen metazd deploy
. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure.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 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.
- 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: 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 vanaf achter het privé-eindpunt.
- Sleutelkluis: alleen toegankelijk vanaf achter het privé-eindpunt. Wordt gebruikt voor het beheren van geheimen voor de App Service-app.
Zodra de opdracht klaar is met het maken van resources en het implementeren van de toepassingscode de eerste keer, werkt de geïmplementeerde voorbeeld-app nog niet omdat u kleine wijzigingen moet aanbrengen om deze verbinding te maken met de database in Azure.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
3. De database gebruiken verbindingsreeks
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 uw codeopslagplaats te houden.
Zoek in de AZD-uitvoer de instellingen
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
enAZURE_POSTGRESQL_HOST
AZURE_POSTGRESQL_NAME
. Als u geheimen veilig wilt houden, worden alleen de naam van de instelling weergegeven. Ze zien er als volgt uit in de AZD-uitvoer: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
Voor uw gemak toont de AZD-sjabloon u de directe koppeling naar de app-instellingenpagina van de app. Zoek de koppeling en open deze in een nieuw browsertabblad.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
4. Voorbeeldcode wijzigen en opnieuw implementeren
Start in de GitHub-coderuimte een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
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.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 kan u mogelijk een codesuggesties geven die vergelijkbaar is met die in de optie 2: zonder onderstaande GitHub Copilot-stappen en u zelfs laten weten dat u de wijziging moet aanbrengen in het bestand azureproject/production.py .
Open azureproject/production.py in de verkenner en voeg de codesuggesties toe.
GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.
Voer
azd deploy
uit in de terminal.azd deploy
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
5. Databaseschema genereren
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.
Zoek in de AZD-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Dit ziet er als volgt uit in de uitvoer:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Voer in de SSH-sessie het volgende uit
flask db upgrade
. Als dit lukt, maakt App Service verbinding met de database.Notitie
Alleen wijzigingen in bestanden in
/home
kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten/home
zijn niet behouden.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
6. Blader naar de app
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/
Voeg enkele restaurants toe aan de lijst.
Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for PostgreSQL.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
7. Diagnostische logboeken streamen
Azure-app Service kan consolelogboeken vastleggen om u te helpen bij het vaststellen van problemen met uw toepassing. Voor het gemak schakelt de AZD-sjabloon logboekregistratie al in op het lokale bestandssysteem en verzendt de logboeken naar een Log Analytics-werkruimte.
De voorbeeldtoepassing bevat print()
instructies om deze mogelijkheid te demonstreren, zoals wordt weergegeven in het volgende codefragment.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Zoek in de AZD-uitvoer de koppeling om App Service-logboeken te streamen en navigeer ernaar in de browser. De koppeling ziet er als volgt uit in de AZD-uitvoer:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
8. Resources opschonen
Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u de aanwijzingen uit azd down
en volgt u de aanwijzingen.
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_HOST'
, 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_USER
AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
, en AZURE_POSTGRESQL_NAME
) zijn gewijzigd of verwijderd. Zonder dat verbindingsreeks kan de migratieopdracht niet communiceren met de database.
Veelgestelde vragen
- Hoeveel kost dit instellen?
- Hoe kan ik verbinding maken met de PostgreSQL-server die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
- Hoe kan ik fouten opsporen tijdens de implementatie van GitHub Actions?
- Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
- Wat kan ik doen met GitHub Copilot in mijn codespace?
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-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 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
Hoe kan ik fouten opsporen tijdens de implementatie van GitHub Actions?
Als een stap mislukt in het automatisch gegenereerde GitHub-werkstroombestand, wijzigt u de mislukte opdracht om uitgebreidere uitvoer te genereren. U kunt bijvoorbeeld meer uitvoer van de python
opdracht krijgen door de -d
optie toe te voegen. Voer uw wijzigingen door en push deze om een andere implementatie naar App Service te activeren.
Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
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 was toen u de coderuimte 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 u wanneer u met GitHub Copilot praat:
- In één chatsessie bouwen de vragen en antwoorden op elkaar voort en kunt u uw vragen aanpassen om het antwoord dat u krijgt af te stemmen.
- GitHub Copilot heeft standaard geen toegang tot een bestand in uw opslagplaats. Als u vragen wilt stellen over een bestand, opent u het bestand eerst in de editor.
- Als u GitHub Copilot toegang wilt geven tot alle bestanden in de opslagplaats bij het voorbereiden van de antwoorden, begint u met
@workspace
uw vraag. Zie Use the @workspace agent voor meer informatie. - In de chatsessie kan GitHub Copilot wijzigingen voorstellen en (met
@workspace
) zelfs waar de wijzigingen moeten worden aangebracht, maar het is niet toegestaan om de wijzigingen voor u aan te brengen. Het is aan u om de voorgestelde wijzigingen toe te voegen en te testen.
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: