Sdílet prostřednictvím


Příklad: Vytvoření a nasazení webové aplikace pomocí knihoven Azure

Tento příklad ukazuje, jak pomocí knihoven pro správu sady Azure SDK ve skriptu Pythonu vytvořit a nasadit webovou aplikaci do služby Azure App Service s kódem aplikace načítaným z úložiště GitHub.

Sada Azure SDK pro Python obsahuje knihovny pro správu (obory názvů začínající azure-mgmt) umožňující automatizovat konfiguraci a nasazení prostředků – podobně jako u šablon Azure Portal, Azure CLI nebo ARM. Příklady najdete v rychlém startu: Nasazení webové aplikace Pythonu (Django nebo Flask) do služby Azure App Service.

1: Nastavení místního vývojového prostředí

Pokud jste to ještě neudělali, nastavte prostředí, ve kterém můžete tento kód spustit. Tady jsou některé možnosti:

  • Nakonfigurujte virtuální prostředí Pythonu pomocí venv nebo libovolného nástroje podle vašeho výběru. Pokud chcete začít používat virtuální prostředí, nezapomeňte ho aktivovat. Pokud chcete nainstalovat Python, přečtěte si téma Instalace Pythonu.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Použijte prostředí Conda. Pokud chcete nainstalovat Conda, přečtěte si téma Instalace Miniconda.

  • Použijte vývojový kontejner v editoru Visual Studio Code nebo GitHub Codespaces.

2: Instalace požadovaných balíčků knihovny Azure

Vytvořte soubor s názvem requirements.txt s následujícím obsahem:

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

V místním vývojovém prostředí nainstalujte požadavky pomocí následujícího kódu:

pip install -r requirements.txt

3: Vytvoření forku ukázkového úložiště

  1. Navštivte https://github.com/Azure-Samples/python-docs-hello-world a forkněte úložiště do svého vlastního účtu na GitHubu. Použití forku zajišťuje, že máte potřebná oprávnění k nasazení aplikace do Azure.

    Vytvoření forku ukázkového úložiště na GitHubu

  2. Nejprve vytvořte proměnnou prostředí s názvem REPO_URL a nastavte ji na adresu URL vašeho odvozeného úložiště. Tuto proměnnou vyžaduje ukázkový kód v další části.

export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>

4: Napsání kódu pro vytvoření a nasazení webové aplikace

Vytvořte soubor Pythonu s názvem provision_deploy_web_app.py a přidejte následující kód. Vložené komentáře vysvětlují, co jednotlivé části skriptu dělá. Proměnné prostředí REPO_URL a AZURE_SUBSCRIPTION_ID by už měly být nastaveny v předchozím kroku.

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")

Tento kód používá ověřování založené na rozhraní příkazového řádku (pomocí AzureCliCredential), protože ukazuje akce, které byste jinak mohli udělat s Azure CLI přímo. V obou případech k ověřování používáte stejnou identitu. V závislosti na vašem prostředí možná budete muset nejprve spustit az login pro autentizaci.

Pokud chcete tento kód použít v produkčním skriptu (například k automatizaci správy virtuálních počítačů), použijte DefaultAzureCredential (doporučeno) s metodou založenou na instančním objektu, jak popisuje postup ověřování aplikací Pythonu pomocí služeb Azure.

5: Spuštění skriptu

python provision_deploy_web_app.py

6: Ověření nasazení webové aplikace

Pokud chcete zobrazit nasazený web, spusťte následující příkaz:

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

Nahraďte název webové aplikace (--name) hodnotou vygenerovanou skriptem. Název skupiny prostředků (--resource-group) nemusíte měnit, pokud jste ho nezměnili ve skriptu. Když web otevřete, měli byste vidět "Hello, World!" v prohlížeči.

Návod

Pokud se očekávaný výstup nezobrazí, počkejte několik minut a zkuste to znovu.

Pokud se stále nezobrazuje očekávaný výstup:

  1. Přejděte na Azure portal.
  2. Přejděte do skupin prostředků a vyhledejte skupinu prostředků, kterou jste vytvořili.
  3. Vyberte skupinu prostředků a zobrazte její prostředky. Ujistěte se, že obsahuje jak App Service plán, tak i App Service službu.
  4. Vyberte službu App Service a pak přejděte do Centra nasazení.
  5. Otevřete kartu protokoly a zkontrolujte případné chyby nebo aktualizace stavu v protokolech nasazení.

7: Opětovné nasazení kódu webové aplikace (volitelné)

Skript zřídí všechny potřebné prostředky pro hostování webové aplikace a nakonfiguruje zdroj nasazení tak, aby používal vaše forkované úložiště pomocí ruční integrace. S ruční integrací musíte webovou aplikaci ručně aktivovat, aby se aktualizace načítá z zadaného úložiště a větve.

Skript používá metodu WebSiteManagementClient.web_apps.sync_repository k aktivaci webové aplikace k načtení kódu z úložiště. Pokud v kódu provedete další změny, můžete toto rozhraní API znovu nasadit voláním tohoto rozhraní API nebo pomocí jiných nástrojů Azure, jako je Azure CLI nebo Azure Portal.

Kód můžete znovu nasadit pomocí Azure CLI spuštěním příkazu az webapp deployment source sync :

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

Název skupiny prostředků (--resource-group) nemusíte měnit, pokud jste ho nezměnili ve skriptu.

Nasazení kódu z webu Azure Portal:

  1. Přejděte na Azure portal.
  2. Přejděte do skupin prostředků a vyhledejte skupinu prostředků, kterou jste vytvořili.
  3. Výběrem názvu skupiny prostředků zobrazíte její prostředky. Ujistěte se, že obsahuje jak App Service plán, tak i App Service službu.
  4. Vyberte službu App Service a pak přejděte do Centra nasazení.
  5. V horní nabídce vyberte Synchronizovat a aktivujte nasazení kódu.

8: Vyčištění prostředků

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

Pokud jste ho nezměnili ve skriptu, nemusíte měnit název skupiny prostředků (--resource-group možnost).

Pokud už skupinu prostředků vytvořenou v tomto příkladu nepotřebujete, můžete ji odstranit spuštěním příkazu az group delete . I když se za skupiny prostředků neúčtují průběžné poplatky, je vhodné vyčistit nevyužité prostředky. Pomocí argumentu --no-wait okamžitě vraťte řízení na příkazový řádek, aniž byste čekali na dokončení odstranění.

Pomocí této metody můžete také odstranit skupinu prostředků prostřednictvím kódu programu ResourceManagementClient.resource_groups.begin_delete .

Viz také