Teilen über


Beispiel: Verwenden der Azure-Bibliotheken zum Erstellen einer Web-App

In diesem Beispiel wird veranschaulicht, wie die Azure SDK-Verwaltungsbibliotheken in einem Python-Skript verwendet werden, um eine Web-App in Azure App Service zu erstellen und bereitzustellen. Der App-Code wird über ein GitHub-Repository bereitgestellt.

Mit den Verwaltungsbibliotheken (die Namenspaces beginnen mit azure-mgmt, z. B. azure-mgmt-web) können Sie Konfigurations- und Bereitstellungsprogramme schreiben, um dieselben Aufgaben auszuführen, zu denen Sie auch das Azure-Portal, die Azure CLI oder andere Tools zur Verwaltung von Ressourcen nutzen können. Siehe zum Beispiel Schnellstart: Bereitstellen einer Python-Web-App (Django oder Flask) in Azure App Service. (Äquivalente Azure CLI-Befehle finden Sie weiter unten in diesem Artikel.)

Alle Befehle in diesem Artikel funktionieren in Linux-/macOS-Bash- und Windows-Befehlsshells identisch, sofern nicht anders angegeben.

1: Einrichten Ihrer lokalen Entwicklungsumgebung

Falls noch nicht geschehen, richten Sie eine Umgebung ein, in der Sie diesen Code ausführen können. Hier einige Optionen:

2: Installieren der erforderlichen Azure-Bibliothekspakete

Erstellen Sie eine Datei namens requirements.txt mit folgendem Inhalt:

azure-mgmt-resource
azure-mgmt-web
azure-identity

Installieren Sie in einem Terminal oder einer Eingabeaufforderung bei aktivierter virtueller Umgebung die Voraussetzungen:

pip install -r requirements.txt

3: Forken des Beispielrepositorys

Besuchen Sie https://github.com/Azure-Samples/python-docs-hello-world, und forken Sie das Repository in Ihr eigenes GitHub-Konto. Sie verwenden eine Fork (Verzweigung), um sicherzustellen, dass Sie über die Berechtigungen zum Bereitstellen des Repository in Azure verfügen.

Forken des Beispielrepositorys auf GitHub

Erstellen Sie dann eine Umgebungsvariable namens REPO_URL mit der URL Ihrer Fork. Der Beispielcode im nächsten Abschnitt hängt von dieser Umgebungsvariablen ab:

set REPO_URL=<url_of_your_fork>
set AZURE_SUBSCRIPTION_ID=<subscription_id>

4: Schreiben von Code zum Erstellen und Bereitstellen einer Web-App

Erstellen Sie eine Python-Datei mit dem Namen provision_deploy_web_app.py und dem folgenden Code. Die Kommentare erklären die Details des Codes. Definieren Sie vor dem Ausführen des Skripts unbedingt die Umgebungsvariablen REPO_URL und AZURE_SUBSCRIPTION_ID.

import random, os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.web import WebSiteManagementClient

# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()

# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-WebApp-rg'
LOCATION = "centralus"

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


#Step 2: Provision the App Service plan, which defines the underlying VM for the web app.

# Names for the App Service plan and App Service. We use a random number with the
# latter to create a reasonably unique name. If you've already provisioned a
# web app and need to re-run the script, set the WEB_APP_NAME environment 
# variable to that name instead.
SERVICE_PLAN_NAME = 'PythonAzureExample-WebApp-plan'
WEB_APP_NAME = os.environ.get("WEB_APP_NAME", f"PythonAzureExample-WebApp-{random.randint(1,100000):05}")

# Obtain the client object
app_service_client = WebSiteManagementClient(credential, subscription_id)

# Provision the plan; Linux is the default
poller = app_service_client.app_service_plans.begin_create_or_update(RESOURCE_GROUP_NAME,
    SERVICE_PLAN_NAME,
    {
        "location": LOCATION,
        "reserved": True,
        "sku" : {"name" : "B1"}
    }
)

plan_result = poller.result()

print(f"Provisioned App Service plan {plan_result.name}")


# Step 3: With the plan in place, provision the web app itself, which is the process that can host
# whatever code we want to deploy to it.

poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
    WEB_APP_NAME,
    {
        "location": LOCATION,
        "server_farm_id": plan_result.id,
        "site_config": {
            "linux_fx_version": "python|3.8"
        }
    }
)

web_app_result = poller.result()

print(f"Provisioned web app {web_app_result.name} at {web_app_result.default_host_name}")

# Step 4: deploy code from a GitHub repository. For Python code, App Service on Linux runs
# the code inside a container that makes certain assumptions about the structure of the code.
# For more information, see How to configure Python apps,
# https://docs.microsoft.com/azure/app-service/containers/how-to-configure-python.
#
# The create_or_update_source_control method doesn't provision a web app. It only sets the
# source control configuration for the app. In this case we're simply pointing to
# a GitHub repository.
#
# You can call this method again to change the repo.

REPO_URL = os.environ["REPO_URL"]

poller = app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_GROUP_NAME,
    WEB_APP_NAME, 
    { 
        "location": "GitHub",
        "repo_url": REPO_URL,
        "branch": "master",
        "is_manual_integration": True
    }
)

sc_result = poller.result()

print(f"Set source control on web app to {sc_result.branch} branch of {sc_result.repo_url}")

# Step 5: Deploy the code using the repository and branch configured in the previous step.
#
# If you push subsequent code changes to the repo and branch, you must call this method again
# or use another Azure tool like the Azure CLI or Azure portal to redeploy. 
# Note: By default, the method returns None.

app_service_client.web_apps.sync_repository(RESOURCE_GROUP_NAME, WEB_APP_NAME)

print(f"Deploy code")

Dieser Code verwendet die CLI-basierte Authentifizierung (AzureCliCredential), da er Aktionen veranschaulicht, die Sie andernfalls direkt mit der Azure CLI ausführen würden. In beiden Fällen verwenden Sie dieselbe Identität für die Authentifizierung. Abhängig von Ihrer Umgebung müssen Sie möglicherweise zuerst az login ausführen, um sich zu authentifizieren.

Zur Verwendung eines solchen Codes in einem Produktionsskript (z. B. zum Automatisieren der VM-Verwaltung) verwenden Sie DefaultAzureCredential (empfohlen) mit einer dienstprinzipalbasierten Methode, wie unter Authentifizieren von Python-Apps mit Azure-Diensten beschrieben.

5: Ausführen des Skripts

python provision_deploy_web_app.py

6: Überprüfen der Web-App-Bereitstellung

Besuchen Sie die bereitgestellte Website, indem Sie den folgenden Befehl ausführen:

az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg

Ersetzen Sie den Namen der Web-App (--name Option) und den Namen der Ressourcengruppe (--resource-group Option) durch die Werte, die Sie im Skript verwendet haben. Sie sollten „Hello, World!“ im Browser sehen.

Wird die erwartete Ausgabe nicht angezeigt, warten Sie einige Minuten und versuchen Sie es erneut.

Wenn die erwartete Ausgabe weiterhin nicht angezeigt wird, dann:

  1. Öffnen Sie das Azure-Portal.
  2. Wählen Sie Ressourcengruppen aus, und suchen Sie die Ressourcengruppe, die Sie erstellt haben.
  3. Wählen Sie den Namen der Ressourcengruppe aus, damit die darin enthaltenen Ressourcen angezeigt werden. Überprüfen Sie insbesondere, ob ein App Service-Plan und der App Service vorhanden sind.
  4. Wählen Sie den App Service und dann Bereitstellungscenter aus.
  5. Wählen Sie die Registerkarte Protokolle aus, um Bereitstellungsprotokolle anzuzeigen.

7: Erneutes Bereitstellen des Web-App-Codes (optional)

Das Skript richtet die Ressourcen ein, die zum Hosten Ihrer Web-App erforderlich sind, und legt die Bereitstellungsquelle mit der manuellen Integration auf Ihre Fork fest. Bei der manuellen Integration müssen Sie über die Web-App einen Pull aus dem konfigurierten Repository und der Fork auslösen.

Das Skript ruft die Methode WebSiteManagementClient.web_apps.sync_repository auf, um einen Pull aus der Web-App auszulösen. Wenn Sie nachfolgende Codeänderungen an Ihr Repository übertragen, können Sie Ihren Code erneut bereitstellen, indem Sie diese API aufrufen oder andere Azure-Tools wie das Azure CLI oder Azure-Portal verwenden.

Sie können Ihren Code mit dem Azure CLI bereitstellen, indem Sie den Befehl az webapp deployment source sync ausführen:

az webapp deployment source sync --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg

Ersetzen Sie den Namen der Web-App (--name Option) und den Namen der Ressourcengruppe (--resource-group Option) durch die Werte, die Sie im Skript verwendet haben.

So stellen Sie Ihren Code aus dem Azure-Portal bereit:

  1. Öffnen Sie das Azure-Portal.
  2. Wählen Sie Ressourcengruppen aus, und suchen Sie die Ressourcengruppe, die Sie erstellt haben.
  3. Wählen Sie den Namen der Ressourcengruppe aus, damit die darin enthaltenen Ressourcen angezeigt werden. Überprüfen Sie insbesondere, ob ein App Service-Plan und der App Service vorhanden sind.
  4. Wählen Sie den App Service und dann Bereitstellungscenter aus.
  5. Wählen Sie im oberen Menü Synchronisieren aus, um Ihren Code bereitzustellen.

8: Bereinigen von Ressourcen

az group delete --name PythonAzureExample-WebApp-rg --no-wait

Führen Sie den Befehl az group delete aus, wenn Sie die in diesem Beispiel erstellte Ressourcengruppe nicht beibehalten müssen. Ressourcengruppen verursachen keine laufenden Gebühren in Ihrem Abonnement, aber es ist eine bewährte Methode, alle Gruppen zu bereinigen, die Sie nicht aktiv verwenden. Das Argument --no-wait ermöglicht die direkte Rückgabe des Befehls, und es muss nicht auf den Abschluss des Vorgangs gewartet werden.

Sie können auch die ResourceManagementClient.resource_groups.begin_delete-Methode verwenden, um eine Ressourcengruppe aus dem Code zu löschen.

Zur Referenz: äquivalente Azure CLI-Befehle

Die folgenden Azure CLI-Befehle führen dieselben Bereitstellungsschritte wie das Python-Skript aus:

rem Replace <your_github_user_name> with the account name of the fork.

set repoUrl=https://github.com/<your_github_user_name>/python-docs-hello-world
set appName=PythonAzureExample-WebApp-%random%

az group create -l centralus -n PythonAzureExample-WebApp-rg

az appservice plan create -n PythonAzureExample-WebApp-plan -g PythonAzureExample-WebApp-rg ^
     --is-linux --sku F1

echo Creating app: %appName%

az webapp create -g PythonAzureExample-WebApp-rg -n %appName% ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8"

rem You can use --deployment-source-url with the first create command. It is shown here
rem to match the sequence of the Python code.

az webapp create -n %appName% -g PythonAzureExample-WebApp-rg ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8" ^
    --deployment-source-url %repoUrl% 

rem The previous command sets up External Git deployment from the specified repository. This 
rem command triggers a pull from the repository.

az webapp deployment source sync --name %appName% --resource-group PythonAzureExample-WebApp-rg

Weitere Informationen