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. De app-code wordt geïmplementeerd vanuit een GitHub-opslagplaats.

Met de beheerbibliotheken (naamruimten die beginnen met azure-mgmtbijvoorbeeld azure-mgmt-web), kunt u configuratie- en implementatieprogramma's schrijven om dezelfde taken uit te voeren die u kunt uitvoeren via de Azure-portal, Azure CLI of andere hulpprogramma's voor resourcebeheer. Zie quickstart: Een Python-web-app (Django of Flask) implementeren in Azure-app Service voor voorbeelden. (Equivalente Azure CLI-opdrachten worden verderop in dit artikel gegeven.)

Alle opdrachten in dit artikel werken hetzelfde in Linux-/macOS-bash- en Windows-opdrachtshells, tenzij vermeld.

1: Uw lokale ontwikkelomgeving instellen

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

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 de vereisten in een terminal of opdrachtprompt waarbij de virtuele omgeving is geactiveerd:

pip install -r requirements.txt

3: De voorbeeldopslagplaats splitsen

Ga naar https://github.com/Azure-Samples/python-docs-hello-world en fork de opslagplaats in uw eigen GitHub-account. U gebruikt een fork om ervoor te zorgen dat u gemachtigd bent om de opslagplaats in Azure te implementeren.

Forking the sample repository on GitHub

Maak vervolgens een omgevingsvariabele REPO_URL met de naam met de URL van uw fork. De voorbeeldcode in de volgende sectie is afhankelijk van deze omgevingsvariabele:

set REPO_URL=<url_of_your_fork>
set 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 met de volgende code. In de opmerkingen worden de details van de code uitgelegd. Zorg ervoor dat u de REPO_URL variabelen en AZURE_SUBSCRIPTION_ID omgevingsvariabelen definieert voordat u het script uitvoert.

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 worden uitgevoerd az login om te verifiëren.

Als u dergelijke code wilt gebruiken in een productiescript (bijvoorbeeld voor het automatiseren van VM-beheer), gebruikt DefaultAzureCredential u (aanbevolen) met een service-principalmethode, zoals beschreven in Het verifiëren van Python-apps met Azure-services.

5: Het script uitvoeren

python provision_deploy_web_app.py

6: De implementatie van de web-app controleren

Ga naar de geïmplementeerde website door de volgende opdracht uit te voeren:

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

Vervang de naam van de web-app (--name optie) en de naam van de resourcegroep (--resource-group optie) door de waarden die u in het script hebt gebruikt. U ziet 'Hallo, wereld!' in de browser.

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, doet u het volgende:

  1. Ga naar de Azure-portal.
  2. Selecteer Resourcegroepen en zoek de resourcegroep die u hebt gemaakt.
  3. Selecteer de naam van de resourcegroep om de resources weer te geven die deze bevat. Controleer met name of er een App Service-plan en de App Service is.
  4. Selecteer de App Service en selecteer vervolgens Deployment Center.
  5. Selecteer het tabblad Logboeken om implementatielogboeken weer te geven.

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

Het script stelt de resources in die nodig zijn om uw web-app te hosten en stelt de implementatiebron in op uw fork met behulp van handmatige integratie. Met handmatige integratie moet u de web-app activeren om op te halen uit de geconfigureerde opslagplaats en vertakking.

Het script roept de methode WebSiteManagementClient.web_apps.sync_repository aan om een pull uit de web-app te activeren. Als u volgende codewijzigingen naar uw opslagplaats pusht, kunt u uw code opnieuw implementeren door deze API aan te roepen of door andere Azure-hulpprogramma's te gebruiken, zoals de Azure CLI of Azure Portal.

U kunt uw code implementeren met 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

Vervang de naam van de web-app (--name optie) en de naam van de resourcegroep (--resource-group optie) door de waarden die u in het script hebt gebruikt.

Uw code implementeren vanuit De Azure-portal:

  1. Ga naar de Azure-portal.
  2. Selecteer Resourcegroepen en zoek de resourcegroep die u hebt gemaakt.
  3. Selecteer de naam van de resourcegroep om de resources weer te geven die deze bevat. Controleer met name of er een App Service-plan en de App Service is.
  4. Selecteer de App Service en selecteer vervolgens Deployment Center.
  5. Selecteer in het bovenste menu Sync om uw code te implementeren.

8: Resources opschonen

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

Voer de opdracht az group delete uit als u de resourcegroep die in dit voorbeeld is gemaakt, niet hoeft te behouden. Voor resourcegroepen worden geen doorlopende kosten in uw abonnement in rekening gebracht, maar het is een goede gewoonte om een groep op te schonen die u niet actief gebruikt. Met --no-wait het argument kan de opdracht onmiddellijk worden geretourneerd in plaats van te wachten tot de bewerking is voltooid.

U kunt ook de ResourceManagementClient.resource_groups.begin_delete methode gebruiken om een resourcegroep uit code te verwijderen.

Ter referentie: equivalente Azure CLI-opdrachten

De volgende Azure CLI-opdrachten voeren dezelfde inrichtingsstappen uit als het Python-script:

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

Zie ook