Freigeben über


Bereitstellen einer containerisierten Flask- oder FastAPI-Web-App in Azure App Service

In diesem Tutorial erfahren Sie, wie Sie eine Python Flask- oder FastAPI-Web-App mithilfe der Funktion Web-App für Container in Azure App Service bereitstellen. Die Web-App für Container bietet Entwicklern einen einfachen Einstieg, um die Vorteile der vollständig verwalteten Azure App Service-Plattform zu nutzen, die aber auch ein einzelnes Artefakt zur Bereitstellung wünschen, das eine App und alle ihre Abhängigkeiten enthält. Weitere Informationen zur Verwendung von Containern in Azure finden Sie unter Vergleich von Azure-Containeroptionen.

In diesem Tutorial verwenden Sie die Docker-CLI und Docker, um optional ein Docker-Image zu erstellen und es lokal zu testen. Sie verwenden die Azure-CLI, um ein Docker-Image in einer Azure-Containerregistrierung zu erstellen und es in Azure App Service bereitzustellen. Die Web-App ist mit ihrer vom System zugewiesenen verwalteten Identität (kennwortlose Verbindungen) und dem rollenbasierten Azure-Zugriff konfiguriert, um das Docker-Image während der Bereitstellung aus der Azure Containerregistrierung zu ziehen. Sie können auch Visual Studio Code mit installierter Azure Tools Extension für die Bereitstellung verwenden.

Ein Beispiel für den Aufbau und die Erstellung eines Docker-Images zur Ausführung in Azure Container Apps finden Sie unter Bereitstellung einer Flask- oder FastPI-Web-Apps in Azure Container Apps.

Hinweis

In diesem Tutorial wird gezeigt, wie ein Docker-Image erstellt wird, das dann in App Service ausgeführt werden kann. Dies ist für die Nutzung von App Service nicht erforderlich. Sie können Code direkt aus einem lokalen Arbeitsbereich in App Service bereitstellen, ohne ein Docker-Image zu erstellen. Ein Beispiel sehen Sie unter Quickstart: Bereitstellung einer Python-Web-App (Django oder Flask) für Azure App Service.

Voraussetzungen

Um die Schritte dieses Tutorials abzuschließen, benötigen Sie Folgendes:

Beispielcode herunterladen

Rufen Sie in Ihrer Umgebung den Code ab.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart

Hinzufügen von Dockerfile- und .dockerignore-Dateien

Fügen Sie einen Dockerfile hinzu, um Docker anzuweisen, wie das Image erstellt werden soll. Der Dockerfile gibt die Verwendung von Gunicorn an, einem Webserver auf Produktionsebene, der Anforderungen an die Frameworks Flask und FastAPI weiterleitet. Die Befehle ENTRYPOINT und CMD weisen Gunicorn an, Anforderungen für das App-Objekt zu verarbeiten.

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 wird in diesem Beispiel für den Containerport (intern) verwendet, aber Sie können jeden freien Port verwenden.

Überprüfen Sie die Datei requirements.txt, um sicherzustellen, dass sie gunicorn enthält.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Fügen Sie eine .dockerignore-Datei hinzu, um unnötige Dateien aus dem Bild auszuschließen.

.git*
**/*.pyc
.venv/

Konfiguration von Gunicorn

Gunicorn kann mit einer gunicorn.conf.py-Datei konfiguriert werden. Wenn sich die Datei gunicorn.conf.py im selben Verzeichnis befindet, in dem Gunicorn ausgeführt wird, müssen Sie ihren Speicherort nicht in der Dockerfile angeben. Weitere Informationen zur Angabe der Konfigurationsdatei finden Sie unter Gunicorn-Einstellungen.

In diesem Tutorial wird Gunicorn mithilfe der vorgeschlagenen Konfigurationsdatei so konfiguriert, dass die Anzahl der Mitarbeiter basierend auf der Anzahl der verfügbaren Cores erhöht wird. Weitere Informationen zu Einstellungen von gunicorn.conf.py-Dateien, finden Sie unter Gunicorn-Konfiguration.

# Gunicorn configuration file
import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "0.0.0.0:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

Lokales Erstellen und Ausführen des Images

Lokale Erstellung des Images.

docker build --tag flask-demo .

Hinweis

Wenn der Befehl docker build einen Fehler zurückgibt, stellen Sie sicher, dass der Docker-Daemon ausgeführt wird. Stellen Sie unter Windows sicher, dass Docker Desktop ausgeführt wird.

Führen Sie das Image lokal in einem Docker-Container aus.

docker run --detach --publish 5000:50505 flask-demo

Öffnen Sie die http://localhost:5000 URL in Ihrem Browser, um die Web-App lokal auszuführen.

Die --detach Option führt den Container im Hintergrund aus. Die --publish Option ordnet den Containerport einem Port auf dem Host zu. Der (externe) Host-Port steht an erster Stelle des Paares und der (interne) Container-Port an zweiter Stelle. Weitere Informationen finden Sie in der Referenz zur Docker-Ausführung.

Erstellen Sie eine Ressourcengruppe und ein Azure-Container-Register

  1. Führen Sie den Befehl az login aus, um sich bei Azure anzumelden.

    az login
    
  2. Führen Sie den Befehl az upgrade aus, um sicherzustellen, dass Ihre Version von Azure CLI aktuell ist.

    az upgrade
    
  3. Erstellen Sie eine Gruppe mit dem Befehl az group create.

    az group create --name web-app-simple-rg --location eastus
    

    Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Wenn Sie eine Ressourcengruppe erstellen, geben Sie einen Speicherort an, z. B. eastus.

  4. Erstellen Sie eine Azure Containerregistrierung mit dem Befehl az acr create.

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic
    

    Hinweis

    Der Registrierungsname muss in Azure eindeutig sein. Wenn Sie eine Fehlermeldung erhalten, versuchen Sie es mit einem anderen Namen. Registernamen können aus 5-50 alphanumerischen Zeichen bestehen. Bindestriche und Unterstriche sind nicht erlaubt. Weitere Informationen erhalten Sie unter Namensregeln für Azure Containerregistrierung. Wenn Sie einen anderen Namen verwenden, achten Sie darauf, dass Sie in den Befehlen, die in den folgenden Abschnitten auf die Registrierung und die Registrierungsartefakte verweisen, Ihren Namen und nicht webappacr123 verwenden.

    Eine Azure Containerregistrierung ist eine private Docker-Registrierung, die Images zur Verwendung in Azure Container Instances, Azure App Service, Azure Kubernetes Service und anderen Diensten speichert. Wenn Sie eine Registrierung erstellen, geben Sie einen Namen, eine SKU und eine Ressourcengruppe an.

Erstellen eines Image in Azure Containerregistrierung

Erstellen Sie das Docker-Image in Azure mit dem Befehl az acr build. Der Befehl verwendet die Dockerdatei im aktuellen Verzeichnis und überträgt das Image in die Registrierung.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

Die Option --registry gibt den Registrierungsnamen an und die Option --image den Namen des Images. Der Image-Name hat das folgende Format registry.azurecr.io/repository:tag.

Bereitstellen der Web-App in Azure

  1. Erstellen Sie einen App Service Plan mit dem Befehl az appservice plan.

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Setzen Sie eine Umgebungsvariable auf Ihre Abonnement-ID. Diese wird im Parameter --scope des nächsten Befehls verwendet.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    Der Befehl zur Erstellung der Umgebungsvariablen wird für die Bash-Shell angezeigt. Ändern Sie die Syntax entsprechend für andere Umgebungen.

  3. Erstellen Sie die Web-App mit dem Befehl az webapp create.

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --assign-identity [system] \
    --role AcrPull \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-rg \
    --acr-use-identity --acr-identity [system] \
    --container-image-name webappacr123.azurecr.io/webappsimple:latest 
    

    Hinweise:

    • Der Name der Web-App muss in Azure eindeutig sein. Wenn Sie eine Fehlermeldung erhalten, versuchen Sie es mit einem anderen Namen. Der Name kann aus alphanumerischen Zeichen und Bindestrichen bestehen, darf aber nicht mit einem Bindestrich beginnen oder enden. Weitere Informationen finden Sie unter Microsoft.Web Namensregeln.

    • Wenn Sie einen anderen Namen als webappacr123 für Ihre Azure Containerregistrierung verwenden, stellen Sie sicher, dass Sie den Parameter --container-image-name entsprechend aktualisieren.

    • Die Parameter --assign-identity, --role und --scope aktivieren die vom System zugewiesene verwaltete Identität in der Web-App und weisen ihr die AcrPull Rolle in der Ressourcengruppe zu. Damit erhält die verwaltete Identität die Berechtigung, Images von jeder Azure Containerregistrierung in der Ressourcengruppe zu beziehen.

    • Die Parameter --acr-use-identity und --acr-identity konfigurieren die Web-App so, dass sie ihre vom System zugewiesene verwaltete Identität verwendet, um Images aus der Azure Containerregistrierung zu beziehen.

    • Es kann ein paar Minuten dauern, bis die Web-App erstellt ist. Sie können die Protokolle der Bereitstellung mit dem Befehl az webapp log tail überprüfen. Beispiel: az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Wenn Sie Einträge mit „warmup“ sehen, wird der Container gerade bereitgestellt.

    • Die URL der Web-App lautet <web-app-name>.azurewebsites.net, z. B. https://webappsimple123.azurewebsites.net.

Aktualisierungen vornehmen und erneut bereitstellen

Nachdem Sie Codeänderungen vorgenommen haben, können Sie den App Service mit den Befehlen az acr build und az webapp update erneut bereitstellen.

Bereinigung

Alle in diesem Tutorial erstellten Azure-Ressourcen befinden sich in der gleichen Ressourcengruppe. Das Entfernen der Ressourcengruppe entfernt alle Ressourcen in der Ressourcengruppe und ist der schnellste Weg, um alle Azure-Ressourcen zu entfernen, die für Ihre App verwendet werden.

Um Ressourcen zu entfernen, verwenden Sie den Befehl az group delete.

az group delete --name web-app-simple-rg

Sie können die Gruppe auch im Azure-Portal oder in Visual Studio Code und der Azure Tools Extension entfernen.

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Ressourcen: