Delen via


Voorbeeld: De Azure-bibliotheken gebruiken om een web-app te maken en te implementeren

In dit voorbeeld ziet u hoe u de Azure SDK-beheerbibliotheken in een Python-script gebruikt om een web-app te maken en te implementeren in Azure App Service, waarbij de app-code wordt opgehaald uit een GitHub-opslagplaats.

De Azure SDK voor Python bevat beheerbibliotheken (naamruimten die beginnen met azure-mgmt) waarmee u de resourceconfiguratie en -implementatie kunt automatiseren, vergelijkbaar met wat u kunt doen met azure Portal, Azure CLI of ARM-sjablonen. Zie quickstart: Een Python-web-app (Django of Flask) implementeren in Azure App Service voor voorbeelden.

1: Uw lokale ontwikkelomgeving instellen

Als u dit nog niet hebt gedaan, stelt u een omgeving in waarin u deze code kunt uitvoeren. Hier volgen enkele opties:

  • Configureer een virtuele Python-omgeving met behulp van venv of uw hulpprogramma naar keuze. Als u de virtuele omgeving wilt gaan gebruiken, moet u deze activeren. Om Python te installeren, raadpleeg Python installeren.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Gebruik een Conda-omgeving. Zie Miniconda installeren om Conda te installeren.

  • Gebruik een Dev-container in Visual Studio Code of GitHub Codespaces.

2: De vereiste Azure-bibliotheekpakketten installeren

Maak een bestand met de naam requirements.txt met de volgende inhoud:

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

Installeer in uw lokale ontwikkelomgeving de vereisten met behulp van de volgende code:

pip install -r requirements.txt

3: De voorbeeldopslagplaats forken

  1. Ga naar https://github.com/Azure-Samples/python-docs-hello-world en fork de opslagplaats in uw eigen GitHub-account. Het gebruik van een fork zorgt ervoor dat u over de benodigde machtigingen beschikt om de app in Azure te implementeren.

    De voorbeeldopslagplaats op GitHub splitsen

  2. Maak vervolgens een omgevingsvariabele met de naam REPO_URL en stel deze in op de URL van uw geforkte opslagplaats. Deze variabele is vereist voor de voorbeeldcode in de volgende sectie.

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

4: Code schrijven om een web-app te maken en te implementeren

Maak een Python-bestand met de naam provision_deploy_web_app.py en voeg de volgende code toe. In de opmerkingen wordt uitgelegd wat elk deel van het script doet. De REPO_URL variabelen en AZURE_SUBSCRIPTION_ID omgevingsvariabelen moeten al worden ingesteld in de vorige stap.

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

Deze code maakt gebruik van op CLI gebaseerde verificatie (met behulp van AzureCliCredential) omdat hiermee acties worden gedemonstreert die u anders rechtstreeks met de Azure CLI kunt doen. In beide gevallen gebruikt u dezelfde identiteit voor verificatie. Afhankelijk van uw omgeving moet u mogelijk eerst az login uitvoeren om te verifiëren.

Als u dergelijke code in een productiescript wilt gebruiken (bijvoorbeeld voor het automatiseren van VM-beheer), gebruik dan DefaultAzureCredential (aanbevolen) met een service-principalgebaseerde methode, zoals beschreven in Hoe u Python-apps kunt verifiëren met Azure-services.

5: Het script uitvoeren

python provision_deploy_web_app.py

6: De implementatie van de web-app controleren

Voer de volgende opdracht uit om de geïmplementeerde website weer te geven:

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

Vervang de naam van de web-app (--name) door de waarde die door het script is gegenereerd. U hoeft de naam van de resourcegroep () niet te wijzigen,--resource-group tenzij u deze in het script hebt gewijzigd. Wanneer u de site opent, ziet u 'Hallo, wereld!' in uw browser.

Aanbeveling

Als u de verwachte uitvoer niet ziet, wacht u enkele minuten en probeert u het opnieuw.

Als u de verwachte uitvoer nog steeds niet ziet:

  1. Ga naar Azure Portal.
  2. Navigeer naar Resourcegroepen en zoek de resourcegroep die u hebt gemaakt.
  3. Selecteer de resourcegroep om de bijbehorende resources weer te geven. Zorg ervoor dat het zowel een App Service-plan als een App Service bevat.
  4. Selecteer de App Service en ga vervolgens naar Deployment Center.
  5. Open het tabblad Logboeken om de implementatielogboeken te controleren op fouten of statusupdates.

7: De code van de web-app opnieuw implementeren (optioneel)

Met het script worden alle benodigde resources ingericht voor het hosten van uw web-app en wordt de implementatiebron geconfigureerd voor het gebruik van uw geforkte opslagplaats met behulp van handmatige integratie. Met handmatige integratie moet u de web-app handmatig activeren om updates op te halen uit de opgegeven opslagplaats en vertakking.

Het script maakt gebruik van de methode WebSiteManagementClient.web_apps.sync_repository om de web-app te activeren voor het ophalen van code uit uw opslagplaats. Als u verdere wijzigingen aanbrengt in uw code, kunt u deze opnieuw implementeren door deze API opnieuw aan te roepen of met behulp van andere Azure-hulpprogramma's, zoals de Azure CLI of Azure Portal.

U kunt uw code opnieuw implementeren met behulp van de Azure CLI door de opdracht az webapp deployment source sync uit te voeren:

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

U hoeft de naam van de resourcegroep () niet te wijzigen,--resource-group tenzij u deze in het script hebt gewijzigd.

Uw code implementeren vanuit De Azure-portal:

  1. Ga naar Azure Portal.
  2. Navigeer naar Resourcegroepen en zoek de resourcegroep die u hebt gemaakt.
  3. Selecteer de naam van de resourcegroep om de bijbehorende resources weer te geven. Zorg ervoor dat het zowel een App Service-plan als een App Service bevat.
  4. Selecteer de App Service en ga vervolgens naar Deployment Center.
  5. Selecteer in het bovenste menu Sync om de implementatie van uw code te activeren.

8: Bronnen opschonen

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

U hoeft de naam van de resourcegroep (--resource-group optie) niet te wijzigen, tenzij u deze in het script hebt gewijzigd.

Als u de resourcegroep die in dit voorbeeld is gemaakt niet meer nodig hebt, kunt u deze verwijderen door de opdracht az group delete uit te voeren. Hoewel resourcegroepen geen doorlopende kosten in rekening brengen, is het een goed idee om ongebruikte resources op te schonen. Gebruik het --no-wait argument om onmiddellijk de controle aan de opdrachtregel terug te geven zonder te wachten tot het verwijderen is voltooid.

U kunt een resourcegroep ook programmatisch verwijderen met behulp van de ResourceManagementClient.resource_groups.begin_delete methode.

Zie ook