Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przykładzie pokazano, jak za pomocą bibliotek zarządzania zestawu Azure SDK w skrypcie języka Python utworzyć i wdrożyć aplikację internetową w usłudze Azure App Service z kodem aplikacji pobranym z repozytorium GitHub.
Zestaw Azure SDK dla języka Python zawiera biblioteki zarządzania (przestrzenie nazw rozpoczynające się od azure-mgmt
) umożliwiające automatyzowanie konfiguracji i wdrażania zasobów — podobnie jak w przypadku witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM. Aby zapoznać się z przykładami, zobacz Szybki start: wdrażanie aplikacji internetowej w języku Python (Django lub Flask) w usłudze Azure App Service.
1: Konfigurowanie lokalnego środowiska projektowego
Jeśli jeszcze tego nie zrobiono, skonfiguruj środowisko, w którym można uruchomić ten kod. Oto kilka opcji:
Skonfiguruj środowisko wirtualne języka Python przy użyciu
venv
lub wybranego narzędzia. Aby rozpocząć korzystanie ze środowiska wirtualnego, pamiętaj, aby go aktywować. Aby zainstalować język Python, zobacz Instalowanie języka Python.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)
Użyj środowiska conda. Aby zainstalować aplikację Conda, zobacz Instalowanie narzędzia Miniconda.
Użyj kontenera deweloperskiego w Visual Studio Code lub GitHub Codespaces.
2: Instalowanie wymaganych pakietów bibliotek platformy Azure
Utwórz plik o nazwie requirements.txt o następującej zawartości:
azure-mgmt-resource
azure-mgmt-web
azure-identity
W lokalnym środowisku programistycznym zainstaluj wymagania przy użyciu następującego kodu:
pip install -r requirements.txt
3. Sforkuj przykładowe repozytorium
Odwiedź https://github.com/Azure-Samples/python-docs-hello-world i zforkuj repozytorium na swoim koncie GitHub. Użycie rozwidlenia gwarantuje, że masz uprawnienia niezbędne do wdrożenia aplikacji na platformie Azure.
Następnie utwórz zmienną środowiskową o nazwie
REPO_URL
i ustaw ją na adres URL forkowanego repozytorium. Ta zmienna jest wymagana przez przykładowy kod w następnej sekcji.
export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>
4. Pisanie kodu w celu utworzenia i wdrożenia aplikacji internetowej
Utwórz plik w języku Python o nazwie provision_deploy_web_app.py i dodaj następujący kod. Komentarze w wierszu wyjaśniają, co robi każda część skryptu. Zmienne REPO_URL
środowiskowe i AZURE_SUBSCRIPTION_ID
powinny być już ustawione w poprzednim 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")
pl-PL: Ten kod używa uwierzytelniania opartego na CLI (przy użyciu AzureCliCredential
), ponieważ demonstruje działania, które w przeciwnym razie można wykonać bezpośrednio przy użyciu interfejsu wiersza polecenia platformy Azure. W obu przypadkach używasz tej samej tożsamości do uwierzytelniania. W zależności od środowiska może być konieczne uruchomienie pierwszego uruchomienia az login
w celu uwierzytelnienia.
Aby użyć takiego kodu w skryscie produkcyjnym (na przykład w celu zautomatyzowania zarządzania maszynami wirtualnymi), użyj DefaultAzureCredential
(zalecane) z metodą opartą na jednostce usługi zgodnie z opisem w temacie Jak uwierzytelniać aplikacje języka Python za pomocą usług platformy Azure.
Linki referencyjne dla klas używanych w kodzie
- AzureCliCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- WebSiteManagementClient (import azure.mgmt.web)
5. Uruchamianie skryptu
python provision_deploy_web_app.py
6. Weryfikowanie wdrożenia aplikacji internetowej
Aby wyświetlić wdrożona witrynę internetową, uruchom następujące polecenie:
az webapp browse --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg
Zastąp nazwę aplikacji internetowej (--name
) wartością wygenerowaną przez skrypt.
Nie musisz zmieniać nazwy grupy zasobów (--resource-group
), chyba że została zmieniona w skrypcie. Po otwarciu witryny powinien zostać wyświetlony komunikat "Hello, World!" w przeglądarce
Wskazówka
Jeśli nie widzisz oczekiwanych danych wyjściowych, poczekaj kilka minut i spróbuj ponownie.
Jeśli nadal nie widzisz oczekiwanych danych wyjściowych:
- Przejdź do witryny Azure Portal.
- Przejdź do obszaru Grupy zasobów i znajdź utworzoną grupę zasobów.
- Wybierz grupę zasobów, aby wyświetlić jej zasoby. Upewnij się, że zawiera zarówno plan usługi App Service, jak i usługę App Service.
- Wybierz usługę App Service, a następnie przejdź do Centrum wdrażania.
- Otwórz kartę dzienników , aby sprawdzić dzienniki wdrażania pod kątem błędów lub aktualizacji stanu.
7. Ponowne wdrażanie kodu aplikacji internetowej (opcjonalnie)
Skrypt udostępnia wszystkie niezbędne zasoby do hostowania aplikacji webowej oraz konfiguruje źródło wdrożenia, aby używać rozwidlonego repozytorium za pomocą integracji ręcznej. W przypadku ręcznej integracji należy ręcznie uruchomić aplikację internetową w celu ściągnięcia aktualizacji z określonego repozytorium i gałęzi.
Skrypt używa metody WebSiteManagementClient.web_apps.sync_repository , aby wyzwolić aplikację internetową w celu ściągnięcia kodu z repozytorium. Jeśli wprowadzisz dalsze zmiany w kodzie, możesz ponownie wdrożyć ten interfejs API lub za pomocą innych narzędzi platformy Azure, takich jak interfejs wiersza polecenia platformy Azure lub witryna Azure Portal.
Możesz ponownie wdrożyć kod przy użyciu interfejsu wiersza polecenia platformy Azure, uruchamiając polecenie az webapp deployment source sync :
az webapp deployment source sync --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg
Nie musisz zmieniać nazwy grupy zasobów (--resource-group
), chyba że została zmieniona w skrypcie.
Aby wdrożyć kod z witryny Azure Portal:
- Przejdź do witryny Azure Portal.
- Przejdź do obszaru Grupy zasobów i znajdź utworzoną grupę zasobów.
- Wybierz nazwę grupy zasobów, aby wyświetlić jej zasoby. Upewnij się, że zawiera zarówno plan usługi App Service, jak i usługę App Service.
- Wybierz usługę App Service, a następnie przejdź do Centrum wdrażania.
- W górnym menu wybierz pozycję Synchronizuj , aby wyzwolić wdrożenie kodu.
8. Czyszczenie zasobów
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Nie trzeba zmieniać nazwy grupy zasobów, chyba że zmieniono ją w skrypcie. (Opcja --resource-group
)
Jeśli nie potrzebujesz już grupy zasobów utworzonej w tym przykładzie, możesz ją usunąć, uruchamiając polecenie az group delete . Chociaż grupy zasobów nie generują bieżących opłat, dobrym rozwiązaniem jest wyczyszczenie wszelkich nieużywanych zasobów. Użyj argumentu --no-wait
, aby natychmiast zwrócić kontrolkę do wiersza polecenia bez oczekiwania na zakończenie usuwania.
Grupę zasobów można również usunąć programowo przy użyciu ResourceManagementClient.resource_groups.begin_delete
metody .
Zobacz także
- Przykład: tworzenie grupy zasobów
- Przykład: Wyświetlanie listy grup zasobów w subskrypcji
- Przykład: tworzenie usługi Azure Storage
- Przykład: korzystanie z usługi Azure Storage
- Przykład: tworzenie i wykonywanie zapytań względem bazy danych MySQL
- Przykład: tworzenie maszyny wirtualnej
- Użyj zarządzanych dysków Azure z maszynami wirtualnymi
- Wykonaj krótką ankietę dotyczącą zestawu Azure SDK dla języka Python