Tutorial: Lernen Sie Übersichtskonzepte für die Bereitstellung einer Python Web-App auf Azure Container Apps
In dieser Lernprogrammreihe wird gezeigt, wie Sie eine Python-Web-App containerisieren und in Azure Container Appsbereitstellen. Eine Beispielweb-App ist containerisiert, und das Docker-Image wird in Azure Container Registrygespeichert. Azure Container Apps ist so konfiguriert, dass das Docker-Image aus der Containerregistrierung abgerufen und ein Container erstellt wird. Die Beispiel-App verbindet sich mit der Azure-Datenbank für PostgreSQL, um die Kommunikation zwischen Container-Apps und anderen Azure-Ressourcen zu veranschaulichen.
Es gibt mehrere Optionen zum Erstellen und Bereitstellen von cloud nativen und containerisierten Python-Web-Apps in Azure. In dieser Lernprogrammreihe werden Azure Container-Apps behandelt. Container Apps eignet sich zum Ausführen von allgemeinen Containern, insbesondere für Anwendungen, die viele Microservices umfassen, die in Containern bereitgestellt werden.
In dieser Lernprogrammreihe erstellen Sie einen Container. Informationen zum Bereitstellen einer Python-Web-App als Container für Azure App Service finden Sie unter Containerized Python Web App in Azure mit MongoDB.
Die Anleitungen in dieser Tutorial-Serie helfen Ihnen bei der Durchführung dieser Aufgaben:
- Erstellen Sie ein Docker Image aus einer Python-Web-App und speichern Sie das Image in Azure Container Registry.
- Konfigurieren Sie Azure Container Apps zum Hosten des Docker-Images.
- Richten Sie GitHub-Aktionen ein, um den Container mit einem neuen Docker-Image zu aktualisieren, das durch Änderungen an Ihrem GitHub-Repository ausgelöst wird. Dieser Schritt ist optional.
- Einrichten von kontinuierlicher Integration und kontinuierlicher Bereitstellung (CI/CD) einer Python Web-App in Azure.
In diesem ersten Teil der Reihe lernen Sie grundlegende Konzepte für die Bereitstellung einer Python-Web-App in Azure-Container-Apps kennen.
Dienstübersicht
Das folgende Diagramm zeigt, wie Sie Ihre lokale Umgebung, GitHub-Repositorys und Azure-Dienste in dieser Lernprogrammreihe verwenden.
Das Diagramm enthält die folgenden Komponenten:
-
Mit Azure Container-Apps können Sie Microservices und containerisierte Anwendungen auf einer serverlosen Plattform ausführen. Eine serverlose Plattform bedeutet, dass Sie die Vorteile der Ausführung von Containern mit minimaler Konfiguration genießen. Mit Azure Container-Apps können Ihre Anwendungen basierend auf Merkmalen wie HTTP-Datenverkehr, ereignisgesteuerter Verarbeitung oder CPU- oder Arbeitsspeicherlast dynamisch skaliert werden.
Container Apps zieht Docker-Images aus der Azure Container Registry. Änderungen an Containerimages lösen ein Update für den bereitgestellten Container aus. Sie können GitHub-Aktionen auch so konfigurieren, dass Updates ausgelöst werden.
-
Mit der Azure-Containerregistrierung können Sie mit Docker-Images in Azure arbeiten. Da die Containerregistrierung ihren Bereitstellungen in Azure nahe kommt, haben Sie die Kontrolle über den Zugriff. Sie können Ihre Microsoft Entra-Gruppen und -Berechtigungen verwenden, um den Zugriff auf Docker-Images zu steuern.
In dieser Tutorial-Serie ist die Registry Quelle Azure Container Registry. Sie können aber auch Docker Hub oder eine private Registrierung mit geringfügigen Änderungen verwenden.
Azure-Datenbank für PostgreSQL
Im Beispielcode werden Anwendungsdaten in einer PostgreSQL-Datenbank gespeichert. Die Container-App verbindet sich mit PostgreSQL, indem sie eine vom Benutzer zugewiesene verwaltete Identität verwendet. Verbindungsinformationen werden in Umgebungsvariablen gespeichert, die explizit oder über ein Azure-Dienstverbindungsmodulkonfiguriert sind.
-
Der Beispielcode für diese Tutorialserie befindet sich in einem GitHub Repo, das Sie lokal forken und klonen. Um einen CI/CD-Workflow mit GitHub Actionseinzurichten, benötigen Sie ein GitHub-Konto.
Sie können diese Tutorialreihe weiterhin ohne GitHub-Konto verfolgen, wenn Sie lokal oder in Azure Cloud Shell arbeiten, um das Container-Image aus dem Beispiel-Code-Repository zu erstellen.
Revisionen und CI/CD
Um Codeänderungen vorzunehmen und an einen Container zu übertragen, erstellen Sie ein neues Docker-Image mit Ihren Änderungen. Dann pushen Sie das Image in die Containerregistrierung und erstellen eine neue Revision der Container App.
Um diesen Prozess zu automatisieren, zeigt Ihnen ein optionaler Schritt in der Lernprogrammreihe, wie Sie eine CI/CD-Pipeline mithilfe von GitHub Actions erstellen. Die Pipeline baut automatisch Ihren Code und stellt ihn für Container Apps bereit, sobald ein neuer Commit in Ihr GitHub-Repository gepusht wird.
Authentifizierung und Sicherheit
In dieser Tutorialreihe erstellen Sie ein Docker-Container-Image direkt in Azure und stellen es in Azure Container Apps bereit. Container-Apps werden im Kontext einer Umgebungausgeführt, die von einem virtuellen Azure-Netzwerkunterstützt wird. Virtuelle Netzwerke sind ein grundlegender Baustein für Ihr privates Netzwerk in Azure. Container-Apps ermöglichen es Ihnen, Ihre Container-App im öffentlichen Web verfügbar zu machen, indem Sie Ingress aktivieren.
Um CI/CD einzurichten, autorisieren Sie Azure Container Apps als OAuth App für Ihr GitHub-Konto. Als OAuth App schreibt Container Apps eine GitHub Actions Workflow-Datei in Ihr Repo mit Informationen über Azure Ressourcen und Jobs zu deren Aktualisierung. Der Workflow aktualisiert Azure-Ressourcen, indem er die Anmeldeinformationen eines Microsoft Entra Dienste Prinzipals (oder eines bestehenden) mit rollenbasiertem Zugriff für Container Apps und einen Benutzernamen und ein Kennwort für Azure Container Registry verwendet. Anmeldeinformationen werden sicher in Ihrem GitHub-Repository gespeichert.
Schließlich speichert die Beispielweb-App in dieser Lernprogrammreihe Daten in einer PostgreSQL-Datenbank. Der Beispielcode stellt über eine Verbindungszeichenfolge eine Verbindung mit PostgreSQL bereit. Wenn die App in Azure ausgeführt wird, wird eine Verbindung mit der PostgreSQL-Datenbank mithilfe einer vom Benutzer zugewiesenen verwalteten Identität hergestellt. Der Code verwendet DefaultAzureCredential
, um das Kennwort in der Verbindungszeichenfolge während der Laufzeit dynamisch mit einem Microsoft Entra Token für den Zugriff zu aktualisieren. Dieser Mechanismus verhindert, dass das Kennwort in der Verbindungszeichenfolge oder einer Umgebungsvariable hartcodiert werden muss, und es bietet eine zusätzliche Sicherheitsebene.
Die Tutorialreihe begleitet Sie bei der Erstellung der verwalteten Identität und dabei, ihr eine geeignete PostgreSQL-Rolle und -Berechtigungen zuzuweisen, damit sie auf die Datenbank zugreifen und diese aktualisieren kann. Während der Konfiguration von Container-Apps führt Sie die Tutorialreihe durch die Konfiguration der verwalteten Identität auf der App und das Einrichten von Umgebungsvariablen, die Verbindungsinformationen für die Datenbank enthalten. Sie können auch einen Azure-Dienstconnector verwenden, um dasselbe zu erreichen.
Voraussetzungen
Um diese Lernprogrammreihe abzuschließen, benötigen Sie Folgendes:
Ein Azure-Konto, in dem Sie Folgendes erstellen können:
- Eine Azure Container Registry-Instanz.
- Eine Azure-Container-Apps-Umgebung.
- Eine Azure-Datenbank für PostgreSQL-Instanz.
Visual Studio Code oder die Azure CLI, je nachdem, welches Tool Sie verwenden:
- Für Visual Studio Code benötigen Sie die Container Apps Erweiterung.
- Sie können die Azure CLI über Azure Cloud Shellverwenden.
Python-Pakete:
- pyscopg2-binary für die Verbindung zu PostgreSQL.
- Flask oder Django als Webframework.
Beispiel-App
Die Python-Beispiel-App ist eine Restaurant-Rezensions-App, die Restaurant- und Rezensionsdaten in PostgreSQL speichert. Am Ende der Tutorialserie werden Sie eine App zur Bewertung von Restaurants in Azure Container Apps bereitstellen und ausführen können, die wie der folgende Screenshot aussieht.