Példa: Webalkalmazás létrehozása és üzembe helyezése az Azure-kódtárak használatával
Ez a példa bemutatja, hogyan használhatja az Azure SDK felügyeleti kódtárait egy Python-szkriptben egy webalkalmazás létrehozásához és üzembe helyezéséhez Azure-alkalmazás Szolgáltatásban. Az alkalmazáskód egy GitHub-adattárból van üzembe helyezve.
A felügyeleti kódtárakkal (például azure-mgmt-web
a névterek kezdetévelazure-mgmt
) konfigurációs és üzembehelyezési programokat írhat, hogy ugyanazokat a feladatokat hajtsa végre, mint az Azure Portalon, az Azure CLI-vel vagy más erőforrás-felügyeleti eszközökkel. Példa: Rövid útmutató: Python -webalkalmazás (Django vagy Flask) üzembe helyezése Azure-alkalmazás szolgáltatásban. (A cikk későbbi részében egyenértékű Azure CLI-parancsokat adunk meg.)
A cikkben szereplő összes parancs ugyanúgy működik a Linux/macOS bash és a Windows parancshéjakban, hacsak fel nem jegyezzük.
1: A helyi fejlesztési környezet beállítása
Ha még nem tette meg, hozzon létre egy környezetet, ahol futtathatja ezt a kódot. Íme néhány lehetőség:
Python virtuális környezetet konfigurálhat a választott eszközzel vagy használatával
venv
. Létrehozhatja a virtuális környezetet helyileg vagy az Azure Cloud Shellben, és ott futtathatja a kódot. Mindenképpen aktiválja a virtuális környezetet a használat megkezdéséhez.Használjon conda környezetet.
Használjon Dev-tárolót a Visual Studio Code-ban vagy a GitHub Codespace-ben.
2: A szükséges Azure-kódtárcsomagok telepítése
Hozzon létre egy requirements.txt nevű fájlt a következő tartalommal:
azure-mgmt-resource
azure-mgmt-web
azure-identity
A virtuális környezetet aktiváló terminálban vagy parancssorban telepítse a követelményeket:
pip install -r requirements.txt
3: A mintaadattár elágazása
Nyissa meg https://github.com/Azure-Samples/python-docs-hello-world az adattárat, és forkozza be a saját GitHub-fiókjába. Egy elágazás használatával biztosíthatja, hogy rendelkezik az adattár Azure-ban való üzembe helyezéséhez szükséges engedélyekkel.
Ezután hozzon létre egy környezeti változót az elágazás URL-címével.REPO_URL
A következő szakaszban szereplő példakód a környezeti változótól függ:
set REPO_URL=<url_of_your_fork>
set AZURE_SUBSCRIPTION_ID=<subscription_id>
4: Kód írása webalkalmazás létrehozásához és üzembe helyezéséhez
Hozzon létre egy provision_deploy_web_app.py nevű Python-fájlt a következő kóddal. A megjegyzések a kód részleteit ismertetik. A szkript futtatása előtt mindenképpen definiálja a környezeti és AZURE_SUBSCRIPTION_ID
a REPO_URL
környezeti változókat.
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")
Ez a kód cli-alapú hitelesítést használ (a használatával AzureCliCredential
), mert bemutatja azOkat a műveleteket, amelyeket egyébként közvetlenül az Azure CLI-vel végezhet. Mindkét esetben ugyanazt az identitást használja a hitelesítéshez. A környezettől függően előfordulhat, hogy először futtatnia az login
kell a hitelesítéshez.
Ha az ilyen kódot éles szkriptben szeretné használni (például a virtuális gépek felügyeletének automatizálásához), használja DefaultAzureCredential
(ajánlott) egy egyszerű szolgáltatásalapú metódussal a Python-alkalmazások Azure-szolgáltatásokkal való hitelesítéséről szóló cikkben leírtak szerint.
A kódban használt osztályok hivatkozásai
- AzureCliCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- WebSiteManagementClient (azure.mgmt.web import)
5: A szkript futtatása
python provision_deploy_web_app.py
6: A webalkalmazás üzembe helyezésének ellenőrzése
Nyissa meg az üzembe helyezett webhelyet az alábbi parancs futtatásával:
az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Cserélje le a webalkalmazás nevét (--name
beállítás) és az erőforráscsoport nevét (--resource-group
beállítás) a szkriptben használt értékekre. A böngészőben meg kell jelennie a "Hello, World!" kifejezésnek.
Ha nem látja a várt kimenetet, várjon néhány percet, és próbálkozzon újra.
Ha továbbra sem látja a várt kimenetet, akkor:
- Nyissa meg az Azure Portalt.
- Válassza ki az Erőforráscsoportokat, és keresse meg a létrehozott erőforráscsoportot.
- Válassza ki az erőforráscsoport nevét a benne található erőforrások megtekintéséhez. Pontosabban ellenőrizze, hogy van-e App Service-csomag és az App Service.
- Válassza ki az App Service-t, majd válassza az Üzembe helyezési központ lehetőséget.
- Válassza a naplók lapot az üzembehelyezési naplók megtekintéséhez.
7: A webalkalmazás kódjának ismételt üzembe helyezése (nem kötelező)
A szkript beállítja a webalkalmazás üzemeltetéséhez szükséges erőforrásokat, és manuális integrációval beállítja az üzembehelyezési forrást az elágazáshoz. Manuális integráció esetén aktiválnia kell a webalkalmazást a konfigurált adattárból és ágból való lekéréshez.
A szkript meghívja a WebSiteManagementClient.web_apps.sync_repository metódust, hogy elindítsa a lekérést a webalkalmazásból. Ha későbbi kódmódosításokat küld az adattárba, újra üzembe helyezheti a kódot az API meghívásával vagy más Azure-eszközökkel, például az Azure CLI-vel vagy az Azure Portallal.
A kódot az Azure CLI-vel telepítheti az az webapp üzembehelyezési forrásszinkronizálási parancs futtatásával:
az webapp deployment source sync --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Cserélje le a webalkalmazás nevét (--name
beállítás) és az erőforráscsoport nevét (--resource-group
beállítás) a szkriptben használt értékekre.
A kód üzembe helyezése az Azure Portalon:
- Nyissa meg az Azure Portalt.
- Válassza ki az Erőforráscsoportokat, és keresse meg a létrehozott erőforráscsoportot.
- Válassza ki az erőforráscsoport nevét a benne található erőforrások megtekintéséhez. Pontosabban ellenőrizze, hogy van-e App Service-csomag és az App Service.
- Válassza ki az App Service-t, majd válassza az Üzembe helyezési központ lehetőséget.
- A felső menüben válassza a Szinkronizálás lehetőséget a kód üzembe helyezéséhez.
8: Erőforrások törlése
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Futtassa az az group delete parancsot, ha nem kell megtartania a példában létrehozott erőforráscsoportot. Az erőforráscsoportok nem számolnak fel folyamatos díjakat az előfizetésben, de célszerű törölni azokat a csoportokat, amelyeket nem használ aktívan. Az --no-wait
argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen a művelet befejezésére való várakozás helyett.
A metódussal ResourceManagementClient.resource_groups.begin_delete
egy erőforráscsoportot is törölhet a kódból.
Hivatkozás: egyenértékű Azure CLI-parancsok
Az alábbi Azure CLI-parancsok ugyanazokat a kiépítési lépéseket hajtják végre, mint a Python-szkript:
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
Lásd még
- Példa: Erőforráscsoport létrehozása
- Példa: Erőforráscsoportok listázása előfizetésben
- Példa: Azure Storage létrehozása
- Példa: Az Azure Storage használata
- Példa: MySQL-adatbázis létrehozása és lekérdezése
- Példa: Virtuális gép létrehozása
- Azure Managed Disks használata virtuális gépekkel
- Rövid felmérés befejezése a Pythonhoz készült Azure SDK-ról