Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm stellen Sie eine datengesteuerte Python-Web-App in Azure App Service bereit, die die Azure-Datenbank für relationalen Datenbankdienst für PostgreSQL verwendet. Azure App Service unterstützt Python in einer Linux-Serverumgebung. In diesem Artikel wird Django verwendet. Alternativen umfassen Flask oder das FastAPI-Lernprogramm.
In diesem Tutorial lernen Sie Folgendes:
- Erstellen einer standardmäßig sicheren Architektur mit App Service, PostgreSQL und Redis Cache
- Schützen von Verbindungsgeheimnissen mit einer verwalteten Identität und Key Vault-Verweisen
- Bereitstellen einer Python-Beispiel-App in App Service aus einem GitHub-Repository
- Greifen Sie auf App Service-App-Verbindungszeichenfolgen und -App-Einstellungen im Anwendungscode zu.
- Vornehmen von Änderungen und erneutes Bereitstellen des Anwendungscodes
- Generieren eines Datenbankschemas durch Ausführen von Datenbankmigrationsvorgängen
- Streamen von Diagnoseprotokollen aus Azure
- Verwalten der App im Azure-Portal
- Bereitstellen derselben Architektur und Bereitstellen mithilfe der Azure Developer CLI
- Optimieren des Entwicklungsworkflows mit GitHub Codespaces und GitHub Copilot
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie nicht über ein Azure-Konto verfügen, können Sie ein konto kostenlos erstellen.
- Ein GitHub-Konto. Sie können auch kostenlos eins erhalten.
- Kenntnisse von Python mit Django-Entwicklung.
- (Optional) Um GitHub Copilot zu testen, ein GitHub Copilot-Konto. Es ist eine kostenlose 30-Tage-Testversion verfügbar.
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie nicht über ein Azure-Konto verfügen, können Sie ein konto kostenlos erstellen.
- Azure Developer CLI installiert. Sie können die Schritte mit der Azure Cloud Shell ausführen, da azure Developer CLI bereits installiert ist.
- Kenntnisse von Python mit Django-Entwicklung.
- (Optional) Um GitHub Copilot zu testen, ein GitHub Copilot-Konto. Es ist eine kostenlose 30-Tage-Testversion verfügbar.
Zum Ende springen
Wenn Sie nur die Beispiel-App in diesem Lernprogramm anzeigen möchten, das in Azure ausgeführt wird, führen Sie die folgenden Befehle in der Azure Cloud Shell aus, und folgen Sie der Eingabeaufforderung:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
Beispiel ausführen
Richten Sie als Ausgangspunkt eine datengesteuerte Beispiel-App ein. Aus Gründen Der Einfachheit halber umfasst das Beispiel-Repository eine Dev-Containerkonfiguration . Der Entwicklercontainer verfügt über alles, was Sie zum Entwickeln einer Anwendung benötigen, einschließlich der Datenbank, des Caches und aller Umgebungsvariablen, die die Beispielanwendung benötigt. Der Entwicklercontainer kann in einem GitHub-Codespace ausgeführt werden, sodass Sie das Beispiel auf jedem Computer mit einem Webbrowser ausführen können.
Hinweis
Wenn Sie diesem Lernprogramm mit Ihrer eigenen App folgen, schauen Sie sich die requirements.txt Dateibeschreibung in README.md an, um zu sehen, welche Pakete Sie benötigen.
Schritt 1: In einem neuen Browserfenster:
- Melden Sie sich bei Ihrem GitHub-Konto an.
- Navigieren Sie zu https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Deaktivieren Sie die Option Nur Mainbranch kopieren. Sie benötigen alle Branches.
- Wählen Sie "Verzweigung erstellen" aus.
Schritt 2: In der GitHub-Fork:
- Wählen Sie main>starter-no-infra für den Starterzweig aus. Dieser Branch enthält nur das Beispielprojekt und keine Azure-bezogenen Dateien oder Konfigurationen.
- Wählen Sie Code>Codespace in starter-no-infra erstellen aus.
Das Einrichten des Codespace dauert einige Minuten. Es läuft
pip install -r requirements.txtfür Ihr Repository. Die bereitgestellte env-Datei enthält bereits eine Dummy-VariableSECRET_KEY, die Django lokal ausführen muss.
Schritt 3: Im Codespace-Terminal:
- Führen Sie eine Datenbankmigration mit
python manage.py migrateaus. - Führen Sie die App mit
python manage.py runserveraus. - Wenn die Benachrichtigung
Your application running on port 8000 is available.angezeigt wird, wählen Sie "Im Browser öffnen" aus. Die Beispielanwendung sollte auf einer neuen Browserregisterkarte angezeigt werden. Um die Anwendung zu beenden, geben SieCtrl+Cein.
Tipp
Sie können GitHub Copilot zu diesem Repository fragen. Beispiel:
- @workspace Was macht dieses Projekt?
- @workspace Was geschieht im Ordner ".devcontainer"?
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Erstellen von App Service, Datenbank und Cache
Erstellen Sie in diesem Schritt die Azure-Ressourcen. In diesem Lernprogramm wird eine Reihe sicherer standardmäßiger Ressourcen erstellt, die App Service, Azure-Datenbank für PostgreSQL und Azure Cache enthalten. Für den Erstellungsprozess geben Sie Folgendes an:
- Der Name für die Web-App. Sie wird als Teil des DNS-Namens für Ihre App verwendet.
- Die Region für die physische Ausführung der App in der Welt. Sie ist auch Teil des DNS-Namens für Ihre App.
- Der Laufzeitstapel für die App. Sie wählen die Für Ihre App zu verwendende Python-Version aus.
- Der Hostingplan für die App. Das Preisniveau umfasst die Reihe von Features und Skalierungskapazität für Ihre App.
- Die Ressourcengruppe für die App. Mit einer Ressourcengruppe können Sie alle Azure-Ressourcen gruppieren, die für die Anwendung in einem logischen Container erforderlich sind.
Melden Sie sich beim Azure-Portal an. Führen Sie die folgenden Schritte aus, um Ihre Azure App Service-Ressourcen zu erstellen.
Schritt 1: Im Azure-Portal:
- Geben Sie oben im Azure-Portal im Suchfeld die Web-App-Datenbank ein.
- Wählen Sie unter der Überschrift Marketplace das Element mit der Bezeichnung Web App + Datenbank aus. Sie können auch direkt zu "Web-App erstellen " navigieren.
Schritt 2: Füllen Sie auf der Seite "Web App + Datenbank erstellen " das Formular wie folgt aus.
- Ressourcengruppe: Wählen Sie "Neu erstellen" aus, und geben Sie "msdocs-django-postgres-tutorial" ein.
- Region: Eine beliebige Azure-Region in Ihrer Nähe.
- Name:msdocs-python-postgres-XYZ.
- Laufzeitstapel: Python 3.14.
- Datenbank: PostgreSQL – Flexibler Server ist standardmäßig als Datenbankmodul ausgewählt. Der Servername und der Datenbankname sind ebenfalls standardmäßig auf geeignete Werte festgelegt.
- Azure Cache für Redis hinzufügen: Ja.
- Hostingplan: Einfach. Wenn Sie bereit sind, können Sie auf ein Produktionspreisniveau skalieren .
- Wählen Sie "Überprüfen" und "Erstellen" aus.
- Nachdem die Überprüfung abgeschlossen ist, wählen Sie "Erstellen" aus.
Schritt 3: Die Bereitstellung dauert ein paar Minuten. Klicken Sie nach Abschluss der Bereitstellung auf Zu Ressource wechseln. Die Bereitstellung stellt die folgenden Ressourcen bereit:
- Ressourcengruppe: Der Container für alle erstellten Ressourcen.
- App Service-Plan: Definiert die Computeressourcen für App Service. Diese Instanz ist ein Linux-Plan auf der Stufe "Einfach ".
- App Service: Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
- Virtuelles Netzwerk: In die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
- Privater Endpunkt: Zugriffsendpunkt für den Redis-Cache im virtuellen Netzwerk.
- Netzwerkschnittstellen: Private IP-Adressen, eine für jeden privaten Endpunkt.
- Azure Database for PostgreSQL flexible Server: Zugriff nur über das virtuelle Netzwerk. Die Bereitstellung erstellt eine Datenbank und einen Benutzer auf dem Server.
- Azure Cache für Redis: Nur über sein privates Netzwerk zugänglich.
- Private DNS-Zonen: Ermöglicht die DNS-Auflösung des Datenbankservers und des Redis-Caches im virtuellen Netzwerk.
Sichere Verbindungsschlüssel und Hinzufügen von SECRET_KEY
Der Bereitstellungsprozess generiert die Konnektivitätsvariablen für Sie als App-Einstellungen. Die bewährte Sicherheitsmethode besteht darin, Geheimnisse vollständig aus dem App-Service herauszuhalten. Verschieben Sie Ihre Geheimnisse in einen Schlüsseltresor, und ändern Sie die App-Einstellungen zu Key Vault references mit Service Connectors.
Schritt 1: Abrufen der vorhandenen Verbindungszeichenfolge
- Wählen Sie im linken Menü der Seite "App Service" Einstellungen>Umgebungsvariablen aus.
- Wählen Sie AZURE_POSTGRESQL_CONNECTIONSTRING aus.
- Suchen Sie in der Anwendungseinstellung 'Hinzufügen/Bearbeiten' im Feld „Wert“ den Kennwort=-Abschnitt am Ende der Zeichenfolge.
- Kopieren Sie die Kennwortzeichenfolge nach kennwort= zur späteren Verwendung.
Mit dieser App-Einstellung können Sie eine Verbindung mit der Postgres-Datenbank und dem Redis-Cache herstellen, der hinter privaten Endpunkten gesichert ist. Die geheimen Schlüssel werden direkt in der App Service-App gespeichert, was nicht der beste Ansatz ist. Sie ändern diese Konfiguration. Außerdem fügen Sie eine
SECRET_KEYEinstellung hinzu, die Ihre Django-App erfordert.
Schritt 2: Erstellen eines Schlüsseltresors für die sichere Verwaltung von Geheimnissen
- Geben Sie in der oberen Suchleiste den Schlüsseltresor ein, und wählen Sie dann Marketplace>Key Vault aus.
- Wählen Sie in der Ressourcengruppe"msdocs-python-postgres-tutorial" aus.
- Geben Sie im Namen des Schlüsseltresors einen Namen ein, der nur aus Buchstaben und Zahlen besteht.
- Wählen Sie in "Region" denselben Speicherort wie die Ressourcengruppe aus.
Schritt 3: Schützen des Schlüsseltresors mit einem privaten Endpunkt
- Wählen Sie die Registerkarte "Netzwerk " aus.
- Deaktivieren Sie die Option "Öffentlichen Zugriff aktivieren".
- Wählen Sie "Privaten Endpunkt erstellen" aus.
- Wählen Sie in der Ressourcengruppe"msdocs-python-postgres-tutorial" aus.
- Wählen Sie im Dialogfeld Standort denselben Standort wie Ihre App Service-App aus.
- Geben Sie im Namen"msdocs-python-postgres-XYZVaultEndpoint" ein.
- Wählen Sie im virtuellen Netzwerk"msdocs-python-postgres-XYZVnet" aus.
- Wählen Sie unter Subnetz die Option msdocs-python-postgres-XYZSubnet aus.
- Wählen Sie "OK" aus.
- Wählen Sie "Überprüfen" und "Erstellen" und dann " Erstellen" aus. Warten Sie, bis die Bereitstellung des Schlüsseltresors abgeschlossen ist. Sie sollten sehen, dass Ihre Bereitstellung abgeschlossen ist.
Schritt 4: Konfigurieren des PostgreSQL-Connectors
- Geben Sie in der oberen Suchleiste msdocs-python-postgres ein, und wählen Sie dann Ihre App Service-Ressource msdocs-python-postgres-XYZ aus.
- Wählen Sie auf der App Service-Seite im linken Menü Einstellungen> und Service Connector aus. Es gibt bereits zwei Connectors, die der App-Erstellungsprozess für Sie erstellt hat.
- Aktivieren Sie das Kontrollkästchen neben dem PostgreSQL-Connector, und wählen Sie dann "Bearbeiten" aus.
- Wählen Sie im ClienttypDjango aus. Der Django-Client-Typ im PostgreSQL-Dienstconnector stellt Ihnen Datenbankvariablen in separaten Einstellungen zur Verfügung, anstatt einer einzigen Verbindungszeichenfolge. Die separaten Variablen sind einfacher für Sie in den Datenbankeinstellungen von Django zu verwenden.
- Wählen Sie "Authentifizierung" aus.
- Fügen Sie im Kennwort das Kennwort ein, das Sie zuvor kopiert haben.
- Wählen Sie Geheimnis im Schlüsseltresor speichern aus.
- Wählen Sie unter "Key Vault-Verbindung" die Option "Neu erstellen" aus. Mit dieser Aktion wird ein Dialogfeld zum Erstellen einer Verbindung über dem Bearbeitungsdialogfeld geöffnet.
Schritt 5: Einrichten der Key Vault-Verbindung
- Wählen Sie im Dialogfeld "Verbindung erstellen" für die Key Vault-Verbindung den zuvor erstellten Key Vault aus.
- Wählen Sie "Überprüfen" und "Erstellen" aus.
- Wenn die Überprüfung abgeschlossen ist, wählen Sie "Erstellen" aus.
Schritt 6: Abschließen der Einstellungen für den PostgreSQL-Connector
- Sie befinden sich wieder im Bearbeitungsdialogfeld für defaultConnector. Warten Sie unter Authentifizierung, bis der Key Vault-Connector erstellt wurde. Die Dropdownliste "Key Vault Connection " wählt sie automatisch aus.
- Wählen Sie "Weiter" aus: Netzwerk.
- Wählen Sie "Speichern" aus. Warten Sie, bis die Aktualisierung erfolgreich angezeigt wird.
Schritt 7: Den Redis-Connector zur Verwendung von Key Vault-Geheimnissen konfigurieren
- Aktivieren Sie auf der Seite "Dienstconnectors" das Kontrollkästchen neben dem Redis-Connector-Cache, und wählen Sie dann "Bearbeiten" aus.
- Wählen Sie "Authentifizierung" aus.
- Wählen Sie Geheimnis im Schlüsseltresor speichern aus.
- Wählen Sie unter Key Vault-Verbindung den von Ihnen erstellten Schlüsseltresor aus.
- Wählen Sie "Weiter" aus: Netzwerk.
- Wählen Sie "Firewallregeln konfigurieren" aus, um den Zugriff auf den Zieldienst zu ermöglichen. Der App-Erstellungsprozess hat die SQL-Datenbank bereits mit einem privaten Endpunkt gesichert.
- Wählen Sie "Speichern" aus. Warten Sie, bis die Aktualisierung erfolgreich angezeigt wird.
Schritt 8: Überprüfen der Key Vault-Integration
- Wählen Sie im linken Menü erneut Einstellungen > Umgebungsvariablen aus.
- Wählen Sie neben AZURE_POSTGRESQL_PASSWORD die Option "Wert anzeigen" aus. Der Wert sollte
@Microsoft.KeyVault(...)sein, was bedeutet, dass es sich um einen Schlüsseltresorverweis handelt, da der geheime Schlüssel jetzt im Schlüsseltresor verwaltet wird. - Um die Redis-Verbindungszeichenfolge zu überprüfen, wählen Sie neben AZURE_REDIS_CONNECTIONSTRING"Wert anzeigen" aus.
Schritt 9: Die Beispielanwendung liest die SECRET_KEY Umgebungsvariable, um die erforderliche SECRET_KEY Einstellung festzulegen. Sie erstellen sie in diesem Schritt als App-Einstellung.
- Wählen Sie auf der Registerkarte "App-Einstellungen" die Option "Hinzufügen" aus.
- Legen Sie den Namen auf SECRET_KEY fest.
- Legen Sie Wert auf eine lange zufällige Zeichenfolge fest.
- Wählen Sie Übernehmen, anschließend erneut Übernehmen und dann Bestätigen aus.
Folgende Schritte sind zum Schützen Ihrer Verbindungsgeheimnisse erforderlich:
- Abrufen der Verbindungsgeheimnisse aus den Umgebungsvariablen der App Service-App
- Erstellen eines Schlüsseltresors
- Erstellen einer Key Vault-Verbindung mit der systemseitig zugewiesenen verwalteten Identität
- Aktualisieren der Dienstconnectors zum Speichern der Geheimnisse in Key Vault
Hinweis
Im Idealfall sollte die App-Einstellung SECRET_KEY auch als Key Vault-Verweis konfiguriert werden. Dieser Prozess umfasst mehrere Schritte. Weitere Informationen finden Sie unter Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Bereitstellen von Beispielcode
Konfigurieren Sie in diesem Abschnitt die GitHub-Bereitstellung mithilfe von GitHub-Aktionen. Es ist eine von vielen Möglichkeiten, App Service bereitzustellen. Es ist eine hervorragende Möglichkeit, eine kontinuierliche Integration in Ihren Bereitstellungsprozess zu haben. Standardmäßig startet jeder git push-Vorgang in Ihrem GitHub-Repository die Build- und Bereitstellungsaktion.
Schritt 1: Wählen Sie im linken Menü Bereitstellung>Bereitstellungscenter aus.
Schritt 2: Auf der Seite Bereitstellungscenter:
- Wählen Sie in "Quelle" GitHub aus. Standardmäßig ist GitHub-Aktionen als Buildanbieter ausgewählt.
- Melden Sie sich bei Ihrem GitHub-Konto an und folgen Sie der Aufforderung, Azure zu autorisieren.
- Wählen Sie in "Organisation" Ihr Konto aus.
- Wählen Sie im Repository"msdocs-django-postgresql-sample-app" aus.
- Wählen Sie unter Branch den Eintrag starter-no-infra aus. Diese Branch ist die gleiche, in der Sie mit Ihrer Beispiel-App gearbeitet haben, ohne Azure-bezogene Dateien oder Konfiguration.
- Wählen Sie für den Authentifizierungstyp die vom Benutzer zugewiesene Identität aus.
- Wählen Sie im oberen Menü " Speichern" aus.
App Service committet eine Workflowdatei in das GitHub-Repository im
.github/workflowsverzeichnis. Standardmäßig erstellt das Bereitstellungscenter eine vom Benutzer zugewiesene Identität für den Workflow zur Authentifizierung mithilfe von Microsoft Entra (OIDC-Authentifizierung). Weitere Authentifizierungsoptionen finden Sie unter Deploy to App Service using GitHub Actions.
Schritt 3: Im GitHub-Codespace Ihrer Beispiel-Fork führen Sie git pull origin starter-no-infra aus.
Mit diesem Befehl wird die neu zugesicherte Workflowdatei in Ihren Codespace abgerufen.
Schritt 4 (Option 1: mit GitHub Copilot):
- Starten Sie eine neue Chatsitzung, indem Sie zunächst die Chatansicht und dann + auswählen.
- Frage: "@workspace Wie stellt die App eine Verbindung mit der Datenbank und Redis her?" Copilot gibt Ihnen möglicherweise einige Erläuterungen darüber, wie die Einstellungen in azureproject/development.py und azureproject/production.py konfiguriert sind.
- Fragen Sie " @workspace Im Produktionsmodus wird meine App in einer App Service Web App ausgeführt, die Azure Service Connector verwendet, um eine Verbindung mit einem flexiblen PostgreSQL-Server mithilfe des Django-Clienttyps herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?" Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich wie in der Option 2: ohne GitHub Copilot-Schritte folgen und sie sogar anweisen, die Änderung in der Datei azureproject/production.py vorzunehmen.
- Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag hinzu.
- Fragen Sie „*@workspace Meine App Service-App verwendet auch den Azure-Dienstconnector, um eine Verbindung mit Cache for Redis mithilfe des Clienttyps Django herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?" Copilot könnte Ihnen einen Codevorschlag geben, der dem in Option 2: ohne GitHub Copilot ähnelt, und Sie anweisen, die Änderung in der Datei azureproject/production.py vorzunehmen.
- Fügen Sie den Codevorschlag ein. GitHub Copilot gibt Ihnen nicht jedes Mal dieselbe Antwort. Antworten sind nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace tun?.
Schritt 4 (Option 2: ohne GitHub Copilot):
- Öffnen Sie azureproject/production.py im Explorer.
- Suchen Sie den auskommentierten Code (Zeilen 29–48), und heben Sie die Auskommentierung auf.
Dieser Code erstellt PostgreSQL- und Redis-Verbindungen mithilfe von
AZURE_POSTGRESQL_USER,AZURE_POSTGRESQL_PASSWORD,AZURE_POSTGRESQL_HOST,AZURE_POSTGRESQL_NAMEundAZURE_REDIS_CONNECTIONSTRING.
Schritt 5:
- Wählen Sie die Quellcodeverwaltungserweiterung aus.
- Geben Sie im Textfeld eine Commitnachricht ein, z. B.
Configure Azure database and cache connections. Oder wählen Sie
aus, und lassen Sie GitHub Copilot eine Commit-Nachricht für Sie generieren. - Wählen Sie Commit und bestätigen Sie dann mit Ja.
- Wählen Sie Änderungen synchronisieren 1 aus, und bestätigen Sie dann mit OK.
Schritt 6: Zurück im Bereitstellungscenter im Azure-Portal:
- Wählen Sie Protokolle und dann Aktualisieren aus, um die neue Bereitstellungsausführung zu sehen.
- Wählen Sie im Protokollelement für die Bereitstellungsausführung den Eintrag "Build/Deploy Logs " mit dem neuesten Zeitstempel aus.
Schritt 7: Sie werden zu Ihrem GitHub-Repository weitergeleitet. Die GitHub-Aktion wird ausgeführt. Die Workflowdatei definiert zwei separate Phasen, Erstellen und Bereitstellen. Warten Sie, bis die GitHub-Ausführung einen Erfolgsstatus anzeigt. Dies dauert ca. 5 Minuten.
Treten Probleme auf? Überprüfen Sie das Handbuch zur Problembehandlung.
Datenbankschema generieren
Mit der Vom virtuellen Netzwerk geschützten PostgreSQL-Datenbank befindet sich die einfachste Möglichkeit zum Ausführen von Django-Datenbankmigrationen in einer SSH-Sitzung mit dem Linux-Container in App Service.
Schritt 1: Zurück auf der Seite "App Service " im linken Menü:
- Wählen Sie "Entwicklungstools>SSH" aus.
- Wählen Sie Start.
Schritt 2: Führen Sie in der SSH-Sitzung aus python manage.py migrate. Wenn dies erfolgreich ist, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit.
Tipp
In der SSH-Sitzung können nur Änderungen an Dateien in /home über den Neustart der App hinaus bestehen bleiben. Änderungen außerhalb von /home bleiben nicht erhalten.
Die SSH-Sitzung ist nützlich für die Ausführung allgemeiner python manage.py-Befehle, z. B. für die Benutzererstellung mit python manage.py createsuperuser. Weitere Informationen finden Sie unter django django-admin und manage.py. Verwenden Sie das Superuser-Konto, um auf den /admin-Teil der Website zuzugreifen.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Navigieren zur App
Schritt 1: Auf der Seite "App Service ":
- Wählen Sie im linken Menü die Option "Übersicht" aus.
- Wählen Sie die URL Ihrer App aus.
Schritt 2: Fügen Sie der Liste einige Restaurants hinzu. Glückwunsch! Sie führen eine Web-App in Azure App Service mit sicherer Konnektivität zu Azure Database for PostgreSQL aus.
Übertragung von Diagnoseberichten
Azure App Service erfasst alle Konsolenprotokolle, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Die Beispiel-App enthält print() Anweisungen zur Veranschaulichung dieser Funktion.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Schritt 1: Auf der Seite "App Service ":
- Wählen Sie im linken Menü Überwachung>App-Dienst-Protokolle aus.
- Wählen Sie unter Anwendungsprotokollierungdie Option "Dateisystem" aus.
- Wählen Sie im oberen Menü " Speichern" aus.
Schritt 2: Wählen Sie im linken Menü " Protokolldatenstrom" aus. Sie sehen die Protokolle für Ihre App, einschließlich Plattformprotokolle und Protokolle innerhalb des Containers.
Weitere Informationen zur Protokollierung in Python-Apps finden Sie unter Einrichten von Azure Monitor für Ihre Python-Anwendung.
Bereinigen von Ressourcen
Wenn Sie fertig sind, können Sie alle Ressourcen aus Ihrem Azure-Abonnement löschen, indem Sie die Ressourcengruppe löschen.
Schritt 1: In der Suchleiste oben im Azure-Portal:
- Geben Sie den Ressourcengruppennamen ein.
- Wählen Sie die Ressourcengruppe aus.
Schritt 2: Wählen Sie auf der Seite "Ressourcengruppe" die Option " Ressourcengruppe löschen" aus.
Schritt 3:
- Um den Löschvorgang zu bestätigen, geben Sie den Namen der Ressourcengruppe ein.
- Wählen Sie "Löschen" aus.
Erstellen von Azure-Ressourcen und Bereitstellen einer Beispiel-App
Erstellen Sie in diesem Abschnitt die Azure-Ressourcen, und stellen Sie eine Beispiel-App für App Service unter Linux bereit. Mit den in diesem Tutorial ausgeführten Schritten werden einige standardmäßig sicherer Ressourcen erstellt, zu denen App Service, Azure Database for PostgreSQL und Azure Cache for Redis gehören.
Der Entwicklercontainer verfügt bereits über die Azure Developer CLI (AZD).
Führen Sie im Repositorystamm
azd initaus.azd init --template python-app-service-postgresql-infraWenn Sie dazu aufgefordert werden, geben Sie die folgenden Antworten:
Frage Antwort Das aktuelle Verzeichnis ist nicht leer. Möchten Sie ein Projekt hier in <Ihr Verzeichnis> initialisieren? J Was möchten Sie mit diesen Dateien tun? Meine vorhandenen Dateien unverändert lassen Geben Sie einen neuen Umgebungsnamen ein. Geben Sie einen eindeutigen Namen ein. Die AZD-Vorlage verwendet diesen Namen als Teil des DNS-Namens Ihrer Web-App in Azure ( <app-name>-<hash>.azurewebsites.net). Alphanumerische Zeichen und Bindestriche sind zulässig.Melden Sie sich mithilfe des Befehls
azd auth loginbei Azure an, und folgen Sie der Eingabeaufforderung:azd auth loginErstellen Sie die erforderlichen Azure-Ressourcen mit dem Befehl
azd provision. Folgen Sie der Eingabeaufforderung, um das gewünschte Abonnement und den gewünschten Standort für die Azure-Ressourcen auszuwählen.azd provisionDer
azd provisionBefehl dauert etwa 15 Minuten, bis er abgeschlossen ist. Der Redis-Cache dauert die meiste Zeit. Modifizieren Sie später Ihren Code, damit er mit App Service funktioniert, und stellen Sie die Änderungen mitazd deploybereit. Während der Ausführung stellt der Befehl Nachrichten zum Bereitstellungs- und Einsatzprozess bereit. Die Ausgabe enthält einen Link zur Bereitstellung in Azure.Diese AZD-Vorlage enthält Dateien (azure.yaml und das Infrastrukturverzeichnis ), die eine sichere standardmäßige Architektur mit den folgenden Azure-Ressourcen generieren:
- Ressourcengruppe: Der Container für alle erstellten Ressourcen.
- App Service-Plan: Definiert die Computeressourcen für App Service. Er erstellt einen Linux-Plan auf der Stufe "Einfach ".
- App Service: Stellt Ihre App dar und wird im App Service-Plan ausgeführt.
- Virtuelles Netzwerk: In die App Service-App integriert und isoliert den Back-End-Netzwerkdatenverkehr.
- Private Endpunkte: Greifen Sie auf Endpunkte für den Schlüsseltresor und den Redis-Cache im virtuellen Netzwerk zu.
- Netzwerkschnittstellen: Private IP-Adressen, eine für jeden privaten Endpunkt.
- Azure Database for PostgreSQL flexible Server: Zugriff nur über das virtuelle Netzwerk. Sie erstellt eine Datenbank und einen Benutzer auf dem Server.
- Private DNS-Zone: Aktiviert die DNS-Auflösung des PostgreSQL-Servers im virtuellen Netzwerk.
- Log Analytics-Arbeitsbereich: Dient als Zielcontainer für Ihre App, um die Protokolle zu versenden, wo Sie auch die Protokolle abfragen können.
- Azure Cache für Redis: Zugriff nur von hinter seinem privaten Endpunkt.
- Schlüsseltresor: Nur von hinter seinem privaten Endpunkt aus zugänglich. Wird verwendet, um Geheimnisse für die App Service-App zu verwalten.
Nachdem der Befehl das Erstellen von Ressourcen abgeschlossen und den Anwendungscode zum ersten Mal bereitgestellt hat, funktioniert die bereitgestellte Beispiel-App noch nicht. Sie müssen kleine Änderungen vornehmen, um eine Verbindung mit der Datenbank in Azure herzustellen.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Verwenden Sie die Datenbankverbindungszeichenfolge
Die AZD-Vorlage, die Sie verwenden, generierte Konnektivitätsvariablen für Sie als App-Einstellungen. Sie gibt sie an das Terminal aus. App-Einstellungen sind eine Möglichkeit, um Verbindungsgeheimnisse aus Ihrem Coderepository herauszuhalten.
Suchen Sie in der AZD-Ausgabe die Einstellungen
AZURE_POSTGRESQL_USER,AZURE_POSTGRESQL_PASSWORD,AZURE_POSTGRESQL_HOST,AZURE_POSTGRESQL_NAMEundAZURE_REDIS_CONNECTIONSTRING. Um Geheimnisse zu schützen, werden nur die Einstellungsnamen angezeigt. Sie sehen in der AZD-Ausgabe wie folgt aus: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_SCOPEDer Einfachheit halber enthält die AZD-Vorlage den direkten Link zur Seite „App-Einstellungen“ der App. Suchen Sie den Link, und öffnen Sie ihn auf einer neuen Browserregisterkarte.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Ändern von Beispielcode und erneute Bereitstellung
Starten Sie im GitHub-Codespace eine neue Chatsitzung, indem Sie die Chatansicht und dann die Option "Chat" auswählen +.
Fragen Sie " @workspace Wie stellt die App eine Verbindung mit der Datenbank her?" Copilot gibt Ihnen möglicherweise einige Erläuterungen darüber, wie die Verbindungseinstellungen in azureproject/development.py und azureproject/production.py konfiguriert sind.
Fragen Sie " @workspace Im Produktionsmodus wird meine App in einer App Service Web App ausgeführt, die Azure Service Connector verwendet, um eine Verbindung mit einem flexiblen PostgreSQL-Server mithilfe des Django-Clienttyps herzustellen. Was sind die Namen der Umgebungsvariablen, die ich verwenden muss?" Copilot gibt Ihnen möglicherweise einen Codevorschlag ähnlich wie in der Option 2: ohne GitHub Copilot-Schritte folgen und sie sogar anweisen, die Änderung in der Datei azureproject/production.py vorzunehmen.
Öffnen Sie azureproject/production.py im Explorer, und fügen Sie den Codevorschlag hinzu.
GitHub Copilot gibt Ihnen nicht jedes Mal dieselbe Antwort. Antworten sind nicht immer richtig. Möglicherweise müssen Sie weitere Fragen stellen, um ihre Antwort zu optimieren. Tipps finden Sie unter Was kann ich mit GitHub Copilot in meinem Codespace tun?.
Führen Sie im Terminal
azd deployaus.azd deploy
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Datenbankschema generieren
Bei einer durch ein virtuelles Netzwerk geschützten PostgreSQL-Datenbank können Sie Django-Datenbankmigrationsvorgänge am einfachsten in einer SSH-Sitzung mit dem Linux-Container in App Service ausführen.
Suchen Sie in der AZD-Ausgabe die URL für die SSH-Sitzung, und navigieren Sie im Browser dorthin. Die Ausgabe sieht wie folgt aus:
Open SSH session to App Service container at: <URL>Führen Sie in der SSH-Sitzung
python manage.py migrateaus. Wenn der Befehl erfolgreich ausgeführt wird, stellt der App-Dienst eine erfolgreiche Verbindung mit der Datenbank bereit.Hinweis
Nur Änderungen an Dateien in
/homekönnen über den Neustart der App hinaus beibehalten werden. Änderungen außerhalb von/homebleiben nicht erhalten.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Navigieren zur App
Suchen Sie in der AZD-Ausgabe die URL für Ihre App, und navigieren Sie im Browser dorthin. Die URL sieht in der AZD-Ausgabe wie folgt aus:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>Fügen Sie ein paar Restaurants zu der Liste hinzu.
Glückwunsch! Sie führen eine Web-App in Azure App Service mit sicherer Konnektivität zu Azure Database for PostgreSQL aus.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Übertragung von Diagnoseberichten
Azure App Service kann Konsolenprotokolle erfassen, um Sie bei der Diagnose von Problemen mit Ihrer Anwendung zu unterstützen. Aus Gründen der Einfachheit ermöglicht die AZD-Vorlage bereits die Protokollierung im lokalen Dateisystem und übermittelt die Protokolle an einen Log Analytics-Arbeitsbereich.
Die Beispielanwendung enthält print()-Anweisungen, um diese Funktion wie im folgenden Codeschnipsel gezeigt zu veranschaulichen.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Suchen Sie in der AZD-Ausgabe den Link zum Streamen von App Service-Protokollen, und navigieren Sie im Browser dorthin.
Stream App Service logs at: <URL>
Erfahren Sie mehr über die Protokollierung in Python-Apps in der Reihe zum Einrichten von Azure Monitor für Ihre Python-Anwendung.
Treten Probleme auf? Überprüfen Sie den Abschnitt "Problembehandlung".
Bereinigen von Ressourcen
Führen Sie azd down aus, und folgen Sie den Eingabeaufforderungen, um alle Azure-Ressourcen in der aktuellen Bereitstellungsumgebung zu löschen.
azd down
Problembehandlung
Im Folgenden finden Sie Probleme, die beim Ausführen dieses Lernprogramms auftreten können, und schritte, um sie zu beheben.
Ich kann keine Verbindung mit der SSH-Sitzung herstellen
Wenn Sie keine Verbindung mit der SSH-Sitzung herstellen können, kann die App selbst nicht gestartet werden. Details finden Sie in den Diagnoseprotokollen . Wenn beispielsweise ein Fehler angezeigt KeyError: 'AZURE_POSTGRESQL_HOST'wird, bedeutet dies möglicherweise, dass die Umgebungsvariable fehlt. Möglicherweise haben Sie die App-Einstellung entfernt.
Ich erhalten einen Fehler beim Ausführen von Datenbankmigrationen
Wenn Fehler im Zusammenhang mit dem Herstellen einer Verbindung mit der Datenbank auftreten, überprüfen Sie, ob die App-Einstellungen (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST und AZURE_POSTGRESQL_NAME) geändert oder gelöscht wurden. Ohne diese Verbindungszeichenfolge kann der Migrationsbefehl (migrate) nicht mit der Datenbank kommunizieren.
Häufig gestellte Fragen
- Wie viel kostet diese Einrichtung?
- Wie kann ich eine Verbindung mit dem PostgreSQL-Server herstellen, der mit anderen Tools hinter dem virtuellen Netzwerk gesichert ist?
- Wie funktioniert die lokale App-Entwicklung mit GitHub-Aktionen?
- Wie ist das Django-Beispiel für die Ausführung auf Azure App Service konfiguriert?
- Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
- Wie debuge ich Fehler während der GitHub Actions-Bereitstellung?
- Ich habe keine Berechtigungen zum Erstellen einer vom Benutzer zugewiesenen Identität
- Was kann ich mit GitHub Copilot in meinem Codespace tun?
- Wie viel kostet diese Einrichtung?
- Wie kann ich eine Verbindung mit dem PostgreSQL-Server herstellen, der mit anderen Tools hinter dem virtuellen Netzwerk gesichert ist?
- Wie funktioniert die lokale App-Entwicklung mit GitHub-Aktionen?
- Wie ist das Django-Beispiel für die Ausführung auf Azure App Service konfiguriert?
- Wie debuge ich Fehler während der GitHub Actions-Bereitstellung?
- Ich habe keine Berechtigungen zum Erstellen einer vom Benutzer zugewiesenen Identität
- Was kann ich mit GitHub Copilot in meinem Codespace tun?
Wie viel kostet diese Einrichtung?
Die Preise für die erstellte Ressourcen sind wie folgt:
- Der App Service-Plan wird auf der Ebene "Einfach " erstellt und kann nach oben oder unten skaliert werden. Siehe App Service-Preise.
- Der flexible PostgreSQL-Server wird in der niedrigsten burstfähigen Dienstebene (Standard_B1ms) mit der Mindestspeichergröße erstellt, die hoch- und herunterskaliert werden kann. Siehe Azure Database for PostgreSQL pricing.
- Das virtuelle Netzwerk hat keine Gebühr, es sei denn, Sie konfigurieren zusätzliche Funktionen, z. B. Peering. Siehe Azure Virtual Network-Preise.
- Die private DNS-Zone verursacht eine kleine Gebühr. Siehe Azure DNS-Preise.
Wie stelle ich mit anderen Tools eine Verbindung mit dem PostgreSQL-Server her, der hinter dem virtuellen Netzwerk geschützt ist?
- Für den einfachen Zugriff aus einem Befehlszeilentool können Sie
psqlin der SSH-Sitzung der App ausführen. - Um eine Verbindung mit einem Desktoptool herzustellen, muss sich Ihr Computer innerhalb des virtuellen Netzwerks befinden. Beispielsweise könnte es sich um einen virtuellen Azure-Computer sein, der mit einem der Subnetze verbunden ist, oder ein Computer in einem lokalen Netzwerk, der über eine Standort-zu-Standort-VPN-Verbindung mit dem virtuellen Azure-Netzwerk verfügt.
- Sie können Azure Cloud Shell auch in das virtuelle Netzwerk integrieren.
Wie funktioniert die lokale App-Entwicklung mit GitHub Actions?
Nehmen Sie die automatisch generierte Workflowdatei von App Service als Beispiel; jede git push startet eine neue Build- und Bereitstellungsausführung. Aus einem lokalen Klon des GitHub-Repositorys können Sie die gewünschten Updates vornehmen und zu GitHub pushen. Beispiel:
git add .
git commit -m "<some-message>"
git push origin main
Wie ist das Django-Beispiel für die Ausführung in Azure App Service konfiguriert?
Die Django-Beispielanwendung konfiguriert Einstellungen in der Datei "azureproject/production.py ", damit sie in Azure App Service ausgeführt werden kann. Diese Änderungen sind gängig bei der Bereitstellung von Django in der Produktion und nicht spezifisch für App Service.
Django überprüft den HTTP_HOST-Header in eingehenden Anforderungen. Der Beispielcode verwendet die
WEBSITE_HOSTNAMEUmgebungsvariable in App Service , um den Domänennamen der App zu Djangos ALLOWED_HOSTS Einstellung hinzuzufügen.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []Django unterstützt die Bereitstellung statischer Dateien in der Produktion nicht. Für dieses Lernprogramm verwenden Sie WhiteNoise , um die Bereitstellung der Dateien zu ermöglichen. Das WhiteNoise-Paket wurde bereits mit „requirements.txt“ installiert, und seine Middleware wird der Liste hinzugefügt.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',Anschließend werden die statischen Dateieinstellungen entsprechend der Django-Dokumentation konfiguriert.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Weitere Informationen finden Sie unter "Produktionseinstellungen für Django-Apps".
Wie ändere ich die SECRET_KEY-App-Einstellung in einen Key Vault-Verweis?
Anhand der beschriebenen Schritte im Azure-Portal können Sie den SECRET_KEY durch einen Key Vault-Verweis ändern, indem Sie die folgenden Azure CLI-Befehle in der Cloud Shell ausführen:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Sie können dies auch im Portal ausführen. Weitere Informationen finden Sie unter
Gewusst wie: Debuggen von Fehlern während der GitHub Actions-Bereitstellung
Wenn ein Schritt in der automatisch generierten GitHub-Workflowdatei fehlschlägt, versuchen Sie, den fehlerhaften Befehl zu ändern, um eine ausführlichere Ausgabe zu generieren. So erhalten Sie beispielsweise eine ausführlichere Ausgabe der python-Befehle, wenn Sie die -d-Option hinzufügen. Committen und pushen Sie Ihre Änderungen, um eine weitere Bereitstellung in App Service auszulösen.
Ich habe keine Berechtigungen zum Erstellen einer benutzerseitig zugewiesenen Identität.
Siehe Einrichten der Bereitstellung von GitHub Actions aus dem Deployment Center.
Was kann ich mit GitHub Copilot in meinem Codespace machen?
Die GitHub Copilot-Chatansicht war bereits dort, als Sie den Codespace erstellt haben. Für Ihre Bequemlichkeit fügen wir die GitHub Copilot-Chaterweiterung in die Containerdefinition ein (siehe .devcontainer/devcontainer.json). Sie benötigen jedoch ein GitHub Copilot-Konto (30 Tage kostenlose Testversion verfügbar).
Einige Tipps für die Unterhaltung mit GitHub Copilot:
- In einer einzelnen Chatsitzung bauen die Fragen und Antworten aufeinander auf, und Sie können Ihre Fragen anpassen, um die Antworten zu optimieren.
- Standardmäßig hat GitHub Copilot keinen Zugriff auf Dateien in Ihrem Repository. Um Fragen zu einer Datei zu stellen, öffnen Sie die Datei zuerst im Editor.
- Damit GitHub Copilot beim Vorbereiten der Antworten Zugriff auf alle Dateien im Repository hat, beginnen Sie Ihre Frage mit
@workspace. Weitere Informationen finden Sie unter Use the @workspace agent. - Innerhalb der Chatsitzung kann GitHub Copilot Änderungen vorschlagen und (mit
@workspace) auch angeben, wo die Änderungen vorgenommen werden sollen. Copilot darf jedoch die Änderungen nicht für Sie vornehmen. Sie müssen entscheiden, ob Sie die vorgeschlagenen Änderungen hinzufügen und testen.
Verwandte Inhalte
Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre App mit einer benutzerdefinierten Domäne und einem Zertifikat schützen.
Oder erfahren Sie, wie App Service eine Python-App ausführt: