Przykład: tworzenie i wdrażanie aplikacji internetowej przy użyciu bibliotek platformy Azure
W tym przykładzie pokazano, jak utworzyć i wdrożyć aplikację internetową w usłudze aplikacja systemu Azure Service za pomocą bibliotek zarządzania zestawu Azure SDK w skryscie języka Python. Kod aplikacji jest wdrażany z repozytorium GitHub.
Dzięki bibliotekom zarządzania (przestrzeniom nazw rozpoczynającym się od azure-mgmt
, na przykład azure-mgmt-web
), można napisać programy konfiguracji i wdrażania, aby wykonywać te same zadania, które można wykonywać za pośrednictwem witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub innych narzędzi do zarządzania zasobami. Aby zapoznać się z przykładami, zobacz Szybki start: wdrażanie aplikacji internetowej w języku Python (Django lub Flask) w usłudze aplikacja systemu Azure Service. (Równoważne polecenia interfejsu wiersza polecenia platformy Azure są podane w dalszej części tego artykułu).
Wszystkie polecenia w tym artykule działają tak samo w powłokach poleceń systemu Linux/macOS i Windows, chyba że zostały zaznaczone.
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. Środowisko wirtualne można utworzyć lokalnie lub w usłudze Azure Cloud Shell i uruchomić tam kod. Pamiętaj, aby aktywować środowisko wirtualne, aby rozpocząć korzystanie z niego.Użyj środowiska conda.
Użyj kontenera deweloperskiego w programie Visual Studio Code lub GitHub Codespaces.
2: Instalowanie wymaganych pakietów bibliotek platformy Azure
Utwórz plik o nazwie requirements.txt z następującą zawartością:
azure-mgmt-resource
azure-mgmt-web
azure-identity
W terminalu lub wierszu polecenia z aktywowanym środowiskiem wirtualnym zainstaluj wymagania:
pip install -r requirements.txt
3. Tworzenie rozwidlenia przykładowego repozytorium
Odwiedź https://github.com/Azure-Samples/python-docs-hello-world repozytorium i rozwidlenie go na własnym koncie usługi GitHub. Użyjesz rozwidlenia, aby upewnić się, że masz uprawnienia do wdrażania repozytorium na platformie Azure.
Następnie utwórz zmienną środowiskową o nazwie REPO_URL
z adresem URL rozwidlenia. Przykładowy kod w następnej sekcji zależy od tej zmiennej środowiskowej:
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 przy użyciu następującego kodu. Komentarze wyjaśniają szczegóły kodu. Przed uruchomieniem skryptu pamiętaj, aby zdefiniować REPO_URL
zmienne środowiskowe i AZURE_SUBSCRIPTION_ID
.
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")
Ten kod używa uwierzytelniania opartego na interfejsie wiersza polecenia (przy użyciu AzureCliCredential
metody ), ponieważ demonstruje akcje, które w przeciwnym razie można wykonać bezpośrednio z interfejsem 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
Odwiedź wdrożona witryna sieci Web, uruchamiając następujące polecenie:
az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Zastąp nazwę aplikacji internetowej (--name
opcja) i nazwę grupy zasobów (--resource-group
opcja) wartościami użytymi w skrypcie. W przeglądarce powinien zostać wyświetlony komunikat "Hello, World!".
Jeśli nie widzisz oczekiwanych danych wyjściowych, poczekaj kilka minut i spróbuj ponownie.
Jeśli nadal nie widzisz oczekiwanych danych wyjściowych, wykonaj następujące elementy:
- Przejdź do portalu Azure Portal.
- Wybierz pozycję Grupy zasobów i znajdź utworzoną grupę zasobów.
- Wybierz nazwę grupy zasobów, aby wyświetlić zawarte w niej zasoby. W szczególności sprawdź, czy istnieje plan usługi App Service i usługa App Service.
- Wybierz usługę App Service, a następnie wybierz pozycję Centrum wdrażania.
- Wybierz kartę dzienników, aby wyświetlić dzienniki wdrażania.
7. Ponowne wdrażanie kodu aplikacji internetowej (opcjonalnie)
Skrypt konfiguruje zasoby potrzebne do hostowania aplikacji internetowej i ustawia źródło wdrożenia na rozwidlenie przy użyciu integracji ręcznej. W przypadku ręcznej integracji należy wyzwolić aplikację internetową, aby ściągnąć ze skonfigurowanego repozytorium i gałęzi.
Skrypt wywołuje metodę WebSiteManagementClient.web_apps.sync_repository , aby wyzwolić ściąganie z aplikacji internetowej. Jeśli wypchniesz kolejne zmiany kodu do repozytorium, możesz ponownie wdrożyć kod, wywołując ten interfejs API lub używając innych narzędzi platformy Azure, takich jak interfejs wiersza polecenia platformy Azure lub witryna Azure Portal.
Kod można wdrożyć za pomocą 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
Zastąp nazwę aplikacji internetowej (--name
opcja) i nazwę grupy zasobów (--resource-group
opcja) wartościami użytymi w skrypcie.
Aby wdrożyć kod z witryny Azure Portal:
- Przejdź do portalu Azure Portal.
- Wybierz pozycję Grupy zasobów i znajdź utworzoną grupę zasobów.
- Wybierz nazwę grupy zasobów, aby wyświetlić zawarte w niej zasoby. W szczególności sprawdź, czy istnieje plan usługi App Service i usługa App Service.
- Wybierz usługę App Service, a następnie wybierz pozycję Centrum wdrażania.
- W górnym menu wybierz pozycję Synchronizuj , aby wdrożyć kod.
8. Czyszczenie zasobów
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Uruchom polecenie az group delete, jeśli nie musisz przechowywać grupy zasobów utworzonej w tym przykładzie. Grupy zasobów nie generują żadnych bieżących opłat w ramach subskrypcji, ale dobrym rozwiązaniem jest wyczyszczenie żadnej grupy, z której nie korzystasz aktywnie. Argument --no-wait
umożliwia polecenie natychmiastowego zwrócenia zamiast oczekiwania na zakończenie operacji.
Możesz również użyć ResourceManagementClient.resource_groups.begin_delete
metody , aby usunąć grupę zasobów z kodu.
Aby uzyskać informacje ogólne: równoważne polecenia interfejsu wiersza polecenia platformy Azure
Następujące polecenia interfejsu wiersza polecenia platformy Azure wykonaj te same kroki aprowizacji co skrypt języka Python:
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
Zobacz też
- 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
- Korzystanie z usługi Azure Dyski zarządzane z maszynami wirtualnymi
- Wykonaj krótką ankietę dotyczącą zestawu Azure SDK dla języka Python